2

我开发了一些桌面应用程序,基于 netbeans GUI 创建者,我遇到了 jButton 行为的奇怪问题,每次单击它时,它都会执行 7 次:

jButton7.addActionListener(new ButtonListener());
class ButtonListener implements ActionListener {
ButtonListener() {
}
    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("pushToTest")) {
            System.out.println("Button1 has been clicked");
            }
      }
}

输出如下:

Button1 has been clicked
Button1 has been clicked
Button1 has been clicked
Button1 has been clicked
Button1 has been clicked
Button1 has been clicked
Button1 has been clicked

只需单击一下。它发生在我所有的按钮上,我无法发布 gui 的代码,它就像 1700 行,甚至没有人会费心阅读它。

4

1 回答 1

4

事实上,我会让我的评论成为答案:

我的猜测-您的问题出在未显示的代码中,并且您可能会将 ActionListener 添加到每个 JButton 7 次。您是否使用 for 循环来执行此操作?您需要仔细检查您的代码,现在,我们无法帮助您,因为有问题的代码尚未显示。

编辑:您的 pastebin 帖子表明您实际上在 for 循环中做了很多 GUI 初始化工作,这个循环:for (int ii = 0; ii < holder2.size() / 3; ii++) {. 查看右花括号的位置:

         setComponent(mainPanel);
     setMenuBar(menuBar);
     setStatusBar(statusPanel);
  }// </editor-fold>  // *** here ***

在这些大括号之间有大量的代码,包括大部分的 GUI 初始化代码。这可能是导致您将 ActionListener 7 次添加到按钮的原因。我的猜测是你真的不希望 for 循环调用所有代码,你的错误在于没有在正确的位置添加循环的结束括号。

此外,考虑重构那个怪物程序并使用具有逻辑意义的变量名,您会发现调试程序会容易得多。对我们来说也一样。

于 2012-06-09T13:26:02.087 回答