繁体   English   中英

如何将int值传递给JButton actionlistener?

[英]How to pass an int value to 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并说“从内部子句引用的局部变量必须是最终的或实际上是最终的”。

请帮我,我真的不知道该怎么办。

我无法将其标记为最终版本,因为我需要能够对其进行更改以使for循环正常工作...

最好的方法是为此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));

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

您可以将x的值分配给for -loop内的另一个变量,然后将该变量定为final。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM