2017-10-09 7 views
0

Je fais un programme de quiz qui demande à l'utilisateur des questions simples de mathématiques, une réponse recieves, calcule le score de l'utilisateur, etc ...Comment passer une valeur int à JButton actionlistener?

Je reçois une erreur parce que je utilise une variable (dans ce cas, x) à l'intérieur d'un 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){} 
      } 
     }); 
    } 

quand je lance mon code, il met en évidence int x et dit « variables locales référencées à partir clas un interne doit être définitive ou efficace finale ».

S'il vous plaît aidez-moi, je ne sais vraiment pas quoi faire.

Je ne peux pas marquer comme finale que je dois pouvoir le changer pour la boucle de travailler ...

+1

Faire la variable 'final' :) – notyou

+0

mais la chose est que je dois changer .... sa variable de boucle –

Répondre

1

Vous pouvez affecter la valeur de x à une autre variable à l'intérieur du for -loop et alors faites cette variable finale.

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

La meilleure façon est de définir une classe supplémentaire pour cette implémentation ActionListener.

public class NumberedActionListener implements ActionListener { 

    private int number; 

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

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

Ensuite, vous pouvez passer une valeur int au constructeur.

answerButton.addActionListener(new NumberedActionListener(x)); 

Cela ressemble aussi beaucoup mieux si vous aimez code propre ...