2011-09-30 10 views
5

¿Qué detector se puede usar para reaccionar ante el evento de cambio de valor de celda JTable? Intenté usar TableModelListener, pero o bien obtuve algo mal, o este oyente no reacciona al cambiar el contenido de una celda.J Detector de cambio de valor de celda celular

Necesito actuar ya sea para cambiar el contenido de una celda o para perder el foco de la celda. ¿Cuál es la mejor manera de hacer esto? Gracias.

+3

Algo está mal con la implementación de su modelo (o su uso); debe notificar _always_ al cambiar. TableModelListener es el camino a seguir – kleopatra

+0

De hecho, este fue el caso. Uno de los métodos de actualización de la tabla reemplazó al modelo y el oyente se adjuntó al modelo anterior. Gracias por asegurarme que buscar. – celicni

Respuesta

2

La manera más fácil de reaccionar al cambio de valores es personalizar un modelo de tabla y reaccionar al setValueAt().

Si está buscando asegurarse de que las ediciones "se peguen" cuando pierde el foco, llámelo en la tabla.

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

.... (dentro contructor)

addPropertyChangeListener(new PropertyChangeListener() { 

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

... (fin del constructor)

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); 
} 

}

más detalles aquí: http://tips4java.wordpress.com/2009/06/07/table-cell-listener/

+0

ehh ... no (copiado incorrectamente de la sugerencia de Rob ;-) Que en el caso general no es lo mejor que se puede hacer de todos modos. – kleopatra

+0

no se ha copiado, se ha interpretado – ungalcrys

+0

se pone énfasis en _incorrect_ (no se copia) - compare cuidadosamente los detalles :-) – kleopatra

Cuestiones relacionadas