从一个ActionEvent中多次调用方法

问题描述 投票:-1回答:1

我正在尝试使用基于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。

java swing awt jbutton actionevent
1个回答
0
投票
submit.addActionListener(this);

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

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

© www.soinside.com 2019 - 2024. All rights reserved.