【问题标题】:JButton ActionListener Integration IssueJButton ActionListener 集成问题
【发布时间】:2013-04-03 23:30:48
【问题描述】:

我对 Java 比较陌生,最近我一直在研究基于 GUI 的 html 解析器。 界面很简单,包括:

  1. JTextField 用于输入搜索词
  2. JButtonb1 发起搜索
  3. JButtonb2 退出
  4. JButtonb3 使用 cmd prmt 在浏览器中显示 URL。

问题出现在 b3 上。 这是一个代码示例:

while (mstyle2.find()) 
{
    String s=mstyle2.group(0);
    String pattern = "(?i)(<cite.*?>)(.+?)(</cite>)";
    String updated = s.replaceAll(pattern, "$2"); 
    String pattern2 = "(?i)(<b>)(.+?)(</b>)";
    String updated2 = updated.replaceAll(pattern2, "$2"); 
    String pattern3 = "(http://)";
    boolean c=true;
    String updated32 = updated2.replaceAll(pattern3, ""); 
    String pattern32 = "(https://)";
    final String updated3 = updated32.replaceAll(pattern32,""); 

    try {
        URL url2 = new URL("http://"+updated3);
        URLConnection conne = url2.openConnection();
        conne.connect();
    } catch (MalformedURLException e) {
        c=false;
    } catch (IOException e) {
        c=false;//checks validity of url 
    }

    if(c) {
        Process p=Runtime.getRuntime().exec("cmd /c start http://"+updated3);
    }
}

这个想法是只有在按下 b3 时才应该执行以下命令行。否则循环将不会执行,并一直停留在该行,直到按下按钮。

Process p=Runtime.getRuntime().exec("cmd /c start http://"+updated3);

但是,我找不到任何可行的方法来正确实现 ActionListener 方法以使这成为可能。

在我的大多数尝试中,一旦按下 b3,所有链接都会立即打开(因此超出了 b3 的目的),而不是每次点击 b3 时都一个一个打开。

【问题讨论】:

  • "JButton b3 使用 cmd prmt 在浏览器中显示 URL。" 请改用 Desktop.browse(URI)。它将更加强大(和跨平台)。

标签: java swing html-parsing jbutton actionlistener


【解决方案1】:

解决方案

JButtons 有一个名为addActionListener() 的方法。这个方法允许你将一个runnable附加到一个按钮上,所以代码只有在被点击时才会被调用。

 b3.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e)
      {
           // Your code here!
      }
 });

这是在做什么?

嗯,这是向您的按钮添加一个新的ActionListener 对象。但是,ActionListener 有一个抽象方法 actionPeformed 需要实现。您只是在构造函数中提供代码。

【讨论】:

  • 也可以考虑Action
  • 是的,我也尝试过这种方法 - 但又出现了这个问题 - 在我的大多数尝试中,一旦按下 b3,所有链接都会立即打开(从而达到 b3 的目的) 而不是每点击一次 b3。基本上,它一次执行所有 url,而不是以每次点击的方式执行。此外,尽管没有单击按钮,但此方法不会阻止整个循环执行。
  • 克里斯 - 不幸的是,该方法没有按照您所说的方式在循环中工作,请帮忙?
  • 您在actionPerformed 方法中添加的代码是什么?
猜你喜欢
  • 1970-01-01
  • 2023-03-10
  • 2020-11-01
  • 2013-11-02
  • 1970-01-01
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 2013-04-21
相关资源
最近更新 更多