从一个 ActionEvent 多次调用方法

Posted

技术标签:

【中文标题】从一个 ActionEvent 多次调用方法【英文标题】:Method is called more than once from one ActionEvent 【发布时间】:2020-04-17 04:14:29 【问题描述】:

我正在尝试使用基于 ActionEvent 的按钮编写基于琐事的游戏。我在 if-else 结构中组织了每个连接到 JButton 实例的特定事件,并且在每个结构中,都会调用一个方法。其中一种方法会增加一个变量,该变量包含正确(cor)和错误(inc)答案的数量:

public void compare(String sel , String ans)



  //if correct
  if(sel.compareToIgnoreCase(ans) == 0)

    

        q.setText("Correct! 10 points added!");
        score += 10;
        cor++;

    

    //if incorrect
    else

    

        q.setText("Incorrect! The correct answer was: " + ans);
       inc++;

    


这组代码将从这里运行:

public void actionPerformed(ActionEvent event)



  if(e.equals("GUESS"))

  

     userGuess = entry.getText();
     answer = ans.get(currentQuestionIndex);
     base.remove(entry);
     base.remove(submit);
     submit.setText("OK");
     submit.setActionCommand("OK");
     submit.addActionListener(this);
     base.add(submit);
     compare(userGuess, answer);

   

...

但是,每当调用 compare 方法时,inc 和 cor 值似乎都会增加一个不明确的值。例如,如果我正确回答一个问题,cor 的新值将是 2 而不是 1。当我回答另一问题时,cor 将是 5 而不是 2。我尝试在我的代码中使用跟踪器,但到目前为止,我似乎程序检测到运行 compare() 的 actionEvent 被多次按下,因此,它多次运行所述代码。如何修复我的代码,以便这些变量可以正确递增 1。

【问题讨论】:

如需更好的帮助,请edit添加minimal reproducible example或Short, Self Contained, Correct Example。 e.equals("GUESS") 中的e 是什么? - 它在哪里设置?你不是在看event吗? 【参考方案1】:
submit.addActionListener(this);

不要在 actionPerformed() 方法中添加 ActionListener。

每次调用 actionPerformed 时,您都会添加另一个侦听器,因此当您单击“提交”按钮时,您会获得多次执行的代码。

【讨论】:

以上是关于从一个 ActionEvent 多次调用方法的主要内容,如果未能解决你的问题,请参考以下文章

C++ 从函数调用的多次返回中构建字符串向量的最佳方法

15.2-全栈Java笔记:ActionEvent事件类型可以实现哪些功能?

从单个服务多次调用多个微服务的最佳方法或设计模式是啥?

为啥 RxJava 的“订阅”方法会被多次调用?

跨域解决方法

如何避免从 Bash 脚本中多次调用 Python 解释器?