J'ai quelque chose comme le code ci-dessous: Cependant, la variable i code> n'est pas définie dans la portée de la classe ActionListener. Comment puis-je passer la variable? P> p>
3 Réponses :
la variable i code> est em> en fait dans la portée de l'actionListener, mais que vous essayez d'utiliser une variable locale dans une classe intérieure, la variable doit être final. Donc, vous pouvez utiliser une variable finale pour cela:
for(int i=0;i<10;i++){
final int index = i;
button=new JButton(buttons[i]);
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
setPage(index);
}
});
menu.add(button);
}
En plus de la réponse de Hovercraft, vous devez noter que vous n'êtes pas obligé d'utiliser des cours anonymes pour vos auditeurs. Le code de réponse de l'aéroglisseur est similaire à celui suivant:
private class PageActionListener implements ActionListener { private int page; public PageActionListener(int page) { this.page = page; } public void actionPerformed(ActionEvent e) { setPage(page); } } ... for(int i = 0; i < 10; i++){ button = new JButton(buttons[i]); button.addActionListener(new PageActionListener(i)); menu.add(button); }
J'aime cette approche, davantage de la variable finale de la boucle (préférence personnelle de bien sûr). A +1 pour corriger le bowvote
Une approche totalement différente serait d'ajouter une propriété au bouton et de récupérer cette propriété dans votre auditeur d'action.
Par exemple.
Cela devrait être la réponse acceptée. C'est une approche plus simple. Franchement, je ne savais pas que des propriétés peuvent être ajoutées aux boutons comme ça. Très bonne réponse.
Peut-être que l'astucieux a décidé de ne plus utiliser de classe anonyme, il a donc accepté la réponse de JB Nizet.
Et si vous utilisez une classe qui n'a pas "putClientProperty ()"? Comme la minuterie de Javax.
i code> sera toujours
10 code> lorsque l'auditeur est viré. (N'est-ce pas le
final code> exigence génial?;)