[英]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.