2017-10-09 78 views
0

我正在做一个测验程序,要求用户简单的数学问题,接受答案,计算用户的分数等...如何将一个int值传递给JButton actionlistener?

我得到一个错误,因为我使用的是一个变量情况下,X)一个ActionListener内:

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引用的局部变量必须是最后的或有效的决赛。”

请帮帮我我真的不知道应该怎么做。

我不能将其标记为最终我需要能够改变它的for循环工作...

+1

使变量'final' :) – notyou

+0

但事情是我需要去改变它....它的循环变量 –

回答

1

可以的x值分配给另一个变量的for -loop和内然后让这个变量最终。

for(x = 0;x < total;x++){ 
    final int index = x; 
    // use index inside your actionListener 
} 
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)); 

这也看起来好多了,如果你喜欢干净的代码...

相关问题