JTable e eventi di cambio riga

di il
2 risposte

JTable e eventi di cambio riga

Ciao a tutti, sono un newbie di Java, e del forum.

In particolare ho ancora qualche problema a capire come funzionano gli eventi.
Ho capito come fare a ricevere eventi per la manipolazione delle celle, riesco anche a fare la somma sulla selezione multipla, ma non so come intercettare un semplice cambio di riga.

Sono convinto che la domanda sia troppo semplice, troverò una risposta, ma era piuttosto un modo per conoscere altre persone che tutto il giorno si stressano in un altra lingua per trovare soluzioni.

Ciao, grazie!

2 Risposte

  • Re: JTable e eventi di cambio riga

    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
  • Re: JTable e eventi di cambio riga

    Grazie Andrea,
    alla fine ho scritto questo.
    
        private void init_navigator_row_events()
        {
             ListSelectionModel lsm = grid_navigator.getSelectionModel();
             lsm.addListSelectionListener(new ListSelectionListener(){
                int current_row = -1;
                
                @Override
                public void valueChanged(ListSelectionEvent e)
                {
                    int selected_row = grid_navigator.getSelectedRow();
                    if (current_row != selected_row)
                    {
                        current_row = selected_row;
                        navigator_row_change(current_row);
                    }
                }
                 
             });
        }
    
    sembra che il modello in questione generi l'evento quando si cambia riga, e una volta soltanto al cambio di colonna nell'ambito della stessa riga.
    Siccome a me serviva soltanto il cambio riga, ho dovuto fare un piccolo controllo.
    Alla fine credo di aver risolto.
    Grazie ancora.

    Paolo
Devi accedere o registrarti per scrivere nel forum
2 risposte