Quote Originariamente inviata da mike1991 Visualizza il messaggio
ciao avevo già provato a fare cosi e purtroppo non sono riuscito a farlo funzionare perché mi da un errore riguardante qualcosa che tu hai accennato sotto. Facendo cosi
codice:
public void AggiungiPannelli(){
    for (int i = 0; i < 8; i++) {
        pannelli.add(new JPanel());
        pannelli.get(i).setBackground(Color.BLACK);
        pannelli.get(i).addMouseListener(new MouseAdapter() {
        @Override
         public void mousePressed(MouseEvent e) {
               pannelli.get(i).setBackground(Color.RED);
         }
        @Override
         public void mouseReleased(MouseEvent e) {
               pannelli.get(i).setBackground(Color.BLACK);
         }
    });
}
No, perché qui il problema è il riferimento alla variabile 'i'.

Più semplicemente (e più pulito):

codice:
for (int i = 0; i < 8; i++) {
    JPanel panel = new JPanel();
    // altri setup su panel
    
    panel.addMouseListener(new MouseAdapter() {
        // i metodi qui POSSONO fare riferimento a panel, che è quel JPanel distinto per ciascun ciclo
    });

    // .. altro (aggiungi panel dove vuoi)
}

Da Java 8 panel può non essere final, prima di Java 8 DEVE essere final.