java中的ActionListener在第二次单击时执行操作

时间:2014-10-17 12:15:33

标签: java swing actionlistener

我正在用Java编写我的第一个复杂应用程序,Swing。当我将ActionListener添加到我的JButton时。

ActionListener changeButton = new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e){
        if(startButton.getText() == "Spustit") {
            startButton.setText("STOP");
        } else {
            startButton.setText("Spustit");
        }
    }
}

我将ActionListener添加到按钮本身

private void startButtonActionPerformed(java.awt.event.ActionEvent evt) {
    startButton.addActionListener(changeButton);
}

你能告诉我ActionListener的编码错误吗?

感谢所有人!

2 个答案:

答案 0 :(得分:3)

您已将ActionListener编码为足以使其至少为动作侦听器本身工作。问题是您在事件(第二个示例)之后添加了动作侦听器,因此第二次单击它时将调用动作侦听器。

解决方案非常简单:

JButton button = new JButton();
button.addActionListener( new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
      //...
    }
 });

如果您直接向按钮添加新的ActionListener,而不是在执行某个操作后,动作侦听器应该在第一次单击时激活

答案 1 :(得分:1)

为什么要在actionPerformed中添加actionlistener?我认为你应该这样做:

public static void main(String[] args) {
    final JButton startButton = new JButton("Spustit");
    ActionListener changeButton = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            if (startButton.getText() == "Spustit") {
                startButton.setText("STOP");
            } else {
                startButton.setText("Spustit");
            }
        }
    };
    startButton.addActionListener(changeButton);
    // Add it to your panel where you want int
}