cronos ha scritto:
ma non so come intercettare un semplice cambio di riga.
Innanzitutto JTable riutilizza gli stessi concetti sulla selezione che sono anche presenti in JList. Ovvero, la selezione può essere:
- singola (una sola riga per volta selezionata)
- intervallo singolo (un singolo intervallo di righe selezionate)
- intervallo multiplo (più intervalli di righe selezionate)
Se vuoi la selezione "singola", va impostato esplicitamente perché non è il default.
Poi è possibile registrare un listener per "sentire" il cambio di selezione. Però attenzione, il listener non è gestito da JTable ma dal "modello di selezione" (il ListSelectionModel).
Quindi si deve fare:
tuaTabella.getSelectionModel().addListSelectionListener( ........ );
Quando implementi il ListSelectionListener, devi implementare il metodo:
public void valueChanged(ListSelectionEvent e)
Il ListSelectionEvent fornisce varie informazioni. Purtroppo però non è in grado di dare delle informazioni precise su cosa esattamente è cambiato nella selezione (perché ci sono svariati scenari che dipendono anche dal modo di selezione impostato). Fornisce solo una indicazione di un first/last index che indica genericamente un intervallo al cui interno è avvenuto un cambio della selezione. Quando si è nel valueChanged, generalmente si va a leggere il nuovo stato della selezione usando i metodi di JTable che sono:
getSelectedRow() — utile per la selezione singola
getSelectedRowCount()
getSelectedRows() — utile per la selezione multipla