2011-09-30 7 views
5

Quale listener può essere utilizzato per reagire all'evento della modifica del valore della cella JTable? Ho provato a usare TableModelListener ma ho qualcosa che non va, o questo listener non reagisce cambiando il contenuto di una cella.Jascolto listener di valori delle celle di una cella

Devo intervenire o per modificare il contenuto di una cella o per perdere l'attenzione della cella. Qual è il modo migliore per farlo? Grazie.

+3

c'è qualcosa che non va nell'implementazione del modello (o nel suo utilizzo) - deve notificare _always_ sul cambiamento. TableModelListener è la strada da percorrere – kleopatra

+0

In effetti, questo era il caso. Uno dei metodi di aggiornamento della tabella ha sostituito il modello e l'ascoltatore è stato collegato al vecchio modello. Grazie per avermi assicurato quale guardare. – celicni

risposta

2

Un modo semplice per reagire ai valori che cambiano è personalizzare un modello di tabella e reagire a setValueAt().

Se si desidera assicurarsi che le modifiche "stick" quando perde lo stato attivo, chiamare questo sul tavolo.

table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE); 
5
class extends JTable { 

.... (all'interno contructor)

addPropertyChangeListener(new PropertyChangeListener() { 

    @Override 
    public void propertyChange(PropertyChangeEvent evt) { 
     if ("tableCellEditor".equals(evt.getPropertyName())) { 
      if (isEditing()) 
       processEditingStarted(); 
      else 
       processEditingStopped(); 
     } 
    } 
}); 

... (fine del costruttore)

protected void processEditingStopped() { 
    System.out.println("save " + editingRow + ":" + editingColumn); 
} 

protected void processEditingStarted() { 
    System.out.println("edit " + editingRow + ":" + editingColumn); 
    if (editRow > -1 && editColumn > -1) 
     oldValue = (String) model.getValueAt(editRow, editColumn); 
} 

}

maggiori dettagli qui: http://tips4java.wordpress.com/2009/06/07/table-cell-listener/

+0

ehh ... no (copiato in modo errato dal suggerimento di Rob ;-) Il che nel caso generale non è comunque la cosa migliore da fare. – kleopatra

+0

non è copiato è interpretato – ungalcrys

+0

l'enfasi è su _incorrect_ (non copiato) - confronta attentamente i dettagli :-) – kleopatra

Problemi correlati