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:
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);
            }
        });
All'apparenza funziona perfettamente, perché qualsiasi cella clicco viene stampata la scritta giusta.
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.