如何将一个int值传递给JButton actionlistener?

时间:2017-10-09 08:46:52

标签: java swing arguments jbutton actionlistener

我正在制作一个测验程序,询问用户简单的数学问题,收到答案,计算用户的分数等......

我收到错误,因为我在actionListener中使用了一个变量(在本例中为x):

for(x = 0;x < total;x++){
System.out.print((x+1)+". ");

questionLabel.setText(number1" + "+ number2);

answerButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e){
            int returnedAns = Integer.parseInt(answerTextField.getText());

                if(returnedAns == answerToTheQuestion){
                    score++;
                    System.out.println("correct");
                    question[x].result = true;
                }else{
                    System.out.println("wrong");
                    question[x].result = false;
                }

                try{
                    Thread.sleep(500);
                }catch(Exception e){}
            }
        });
    }

当我运行我的代码时,它突出显示int x并且说'从内部clas引用的局部变量必须是最终的或有效的最终'。

请帮帮我,我真的不知道要做些什么。

我无法将其标记为final,因为我需要能够将其更改为for循环才能工作...

2 个答案:

答案 0 :(得分:3)

最好的方法是为此ActionListener实现定义一个额外的类。

public class NumberedActionListener implements ActionListener {

  private int number;

  public NumberedActionListener(int number) {
    this.number = number;
  }

  @Override
  public void actionPerformed(ActionEvent e) {
    // ...
  }
}

然后你可以将一个int值传递给构造函数。

answerButton.addActionListener(new NumberedActionListener(x));

如果您喜欢干净的代码,这看起来也会更好......

答案 1 :(得分:1)

您可以将x的值分配给for - 循环内的另一个变量,然后将该变量设为最终。

for(x = 0;x < total;x++){
   final int index = x;
   // use index inside your actionListener
}