Je suis en train de créer un tableau de JLabels, tous devraient être invisibles quand on clique dessus. Le problème survient lorsque vous essayez de configurer le programme d'écoute de la souris via une classe interne qui a besoin d'accéder à la variable d'itération de la boucle utilisée pour déclarer les étiquettes. Code est explicite:l'accès à la variable dans la classe interne dans Java
for(int i=1; i<label.length; i++) {
label[i] = new JLabel("label " + i);
label[i].addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent me) {
label[i].setVisible(false); // compilation error here
}
});
cpane.add(label[i]);
}
Je pensais que je pouvais résoudre ce par l'utilisation de this
ou peut-être super
au lieu de l'appel de label[i]
dans la méthode intérieure mais je ne l'ai pas été en mesure de comprendre.
L'erreur de compilation est la suivante: la variable locale i est accessible à partir de la classe interne; doit être déclaré final`
Je suis sûr que la réponse doit être quelque chose de vraiment stupide que je n'ai pas pensé ou peut-être que je fais une petite erreur.
Toute aide serait appréciée
L'erreur est: 'variable locale i est accessible à partir de la classe intérieure; doit être déclaré final – omtinez
@omtinez: alors peut-être que vous devriez déclarer la variable comme 'final', non? (jetez un oeil à [ce Q & A] (http://stackoverflow.com/questions/3045130/constructeurs-in-inner-classes-implementing-interfaces), aussi) –
@Matt Ball, Ce n'est pas une bonne idée de avoir la variable d'itérateur 'final'. –