Sto provando a creare un array di JLabels, tutti dovrebbero diventare invisibili quando si fa clic. Il problema si presenta quando si tenta di impostare il listener del mouse attraverso una classe interna che deve accedere alla variabile di iterazione del ciclo utilizzato per dichiarare le etichette. Codice è auto-esplicativo:accesso alla variabile all'interno della classe interna in 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]);
}
ho pensato che avrei potuto superare questo con l'uso di this
o forse super
invece che il richiamo del label[i]
all'interno del metodo interno, ma non sono stato in grado di capirlo.
L'errore di compilazione è: la variabile locale i è accessibile dall'interno della classe interna; deve essere dichiarato definitivo
Sono sicuro che la risposta deve essere qualcosa di veramente sciocco a cui non ho pensato o forse sto facendo un piccolo errore.
Tutto l'aiuto sarebbe apprezzato
L'errore è: 'variabile locale i si accede dall'interno di classe interna; deve essere dichiarato finale ' – omtinez
@omtinez: allora forse dovresti dichiarare la variabile come' finale', no? (dai un'occhiata a [questo Q & A] (http://stackoverflow.com/questions/3045130/constructors-in-inner-classes-implementing-interfaces), anche) –
@Matt Ball, non è una buona idea avere la variabile iteratore 'final'. –