Salve a tutti, ho creato un piccolo programma con interfaccia grafica, costituita da una tabella che stampa a video tutti gli elementi di una matrice.
Voglio fare in modo che quando uno clicca una qualsiasi cella della matrice, venga stampato a schermo "Hai selezionato l'elemento ..." (tramite un println()).
Il listener che ho implementato è questo:
All'apparenza funziona perfettamente, perché qualsiasi cella clicco viene stampata la scritta giusta.codice:ListSelectionModel lsm = t.getSelectionModel(); lsm.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); lsm.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { System.out.println(e); Chess.ChessMen sel = null; int rows[] = t.getSelectedRows(); int cols[] = t.getSelectedColumns(); for(int i=0; i<rows.length; i++) for(int j=0; j<cols.length; j++) sel = (Chess.ChessMen)t.getValueAt(rows[i], cols[j]); System.out.println("Hai selezionato l'elemento " +sel); } });
Però c'è un problema, l'evento non viene richiamato se, dopo aver cliccato una cella, ne clicco un altro sulla stessa riga.
Se, ad esempio, clicco l'elemento (0;0) viene stampato il messaggio esatto, ma se dopo clicco l'elemento (0;1) (cioè stessa riga ma colonna diversa) non viene richiamato l'evento e, di conseguenza, non viene stampato nulla.
Se invece dopo aver richiamato (0;0) richiamo (1;0) e dopo (0;1) tutte le scritte vengono stampate correttamente.
Come devo fare affinché l'evento venga richiamato ovunque io clicchi?
Grazie.![]()