java - setmodel - Relación entre JTable, TableModel y TableData
setmodel java (3)
Al configurar TableModel en una JTable, la tabla agrega un observador ( TableModelListener ) para informarse sobre los cambios en el modelo.
Al cambiar los datos en el modelo, se espera que el modelo notifique a los oyentes registrados activando un evento TableModelEvent . El evento en sí puede contener información complementaria sobre la granularidad del cambio (ya sea que la estructura haya cambiado significativamente o solo se hayan cambiado algunos datos de celda) para permitir que JTable haga una actualización optimizada de la vista.
¿Cuál es la relación entre JTable
, TableModel
y TableData
? Si solo TableData
, ¿eso también cambia la visualización de datos en el componente JTable
o tengo que llamar a algún método para sincronizar los dos? He visto esto , pero no me dice explícitamente ni me muestra la relación en términos de actualizaciones
Supongo que está usando la frase "TableData" para referirse solo a los datos que se muestran en la JTable. Para responder a su pregunta, ver actualizaciones automáticas o no depende de su TableModel y de cómo interactúa con sus datos.
Un modelo de tabla debe activar eventos cuando el modelo de datos subyacente ha cambiado, esto a su vez notificará a JTable que se ha producido un cambio y se debe volver a dibujar. Entonces, en términos de una relación, JTable escucha los cambios de eventos en TableModel; TableModel no tiene conocimiento de JTable.
Dependiendo de cómo esté organizado su modelo, los datos que se encuentran debajo podrían cambiar sin que TableModel lo sepa. En este caso, si tiene un paso directo de TableModel a los datos, los valores en pantalla cambiarán cuando ocurra una repintura de forma natural (cambio de tamaño de la pantalla, movimiento del mouse, etc.), pero si desea forzar el evento, debería obtener el TableModel para notificar a JTable a través de los eventos mencionados anteriormente. En términos de relación, TableModel conoce los datos de la tabla, pero los datos de la tabla no tienen conocimiento del modelo (generalmente). TableModel puede o no estar escuchando en los datos para cambios.
Cuando cambia un valor en los datos de TableModel, debe activar este evento. p.ej. cambiando el valor de una celda, llama a fireTableCellUpdated(row, col);
.
Mira esto más específicamente.