habilitar deshabilitar java swing checkbox jtable jcheckbox

java - deshabilitar - JPara habilitar e inhabilitar la casilla de verificación al marcar una en otra columna



deshabilitar checkbox jquery (2)

No he analizado su código, pero en general con tablas Swing, listas y árboles, la instancia del procesador se reutiliza para dibujar muchas filas. Debe decirle a JTable que su contenido ha cambiado, de modo que pueda volver a dibujar las filas relevantes. Use el modelo para notificar a sus TableModelListeners que algunas filas han cambiado.

Tengo una JTable con pocas columnas que están pintadas como casillas de verificación. Lo que quiero hacer es habilitar / deshabilitar la casilla de verificación de la columna A marcando / desmarcando la casilla de verificación correspondiente en la columna B.

He logrado hacerlo basándome en este ejemplo , pero tengo un problema con las casillas recién habilitadas / deshabilitadas, no se actualizan correctamente. La casilla de verificación que se habilitó / deshabilitó la última vez se actualiza solo después de hacer clic en cualquier otra celda de la tabla.

El problema es similar a esto (la columna "Ref. Estructura" es la que tiene las casillas habilitadas / deshabilitadas):

Casilla de verificación no habilitada:

Casilla de verificación no desactivada:

Este es mi código JTable:

public class StructuresJTable extends JTable { public StructuresJTable() { super(); } public StructuresJTable(TableModel dm) { super(dm); } @Override public Component prepareRenderer(TableCellRenderer renderer, int row, int col) { Component c = super.prepareRenderer(renderer, row, col); if (col == StructuresTableModel.COMPARISON_REF_STRUCT_COL) { c.setEnabled((Boolean) this.dataModel.getValueAt(row, StructuresTableModel.COMPARE_COL)); } else { c.setEnabled(true); } return c; } }

¿Tiene alguna sugerencia sobre cómo hacer que funcione?


Actualización: Usar prepareRenderer() versus implementar TableCellRenderer no es tan importante como acondicionar el modelo correctamente. Si el modelo es correcto, la vista seguirá. Necesitarás un modelo , un procesador y un editor adecuados.

  • Modelo: necesitará una estructura de datos para mantener el estado de cada celda. En su implementación de TableModel , anule setValueAt() para condicionar el estado deseado de cada celda en el modelo a medida que ocurren los cambios.

  • Renderer: en su TableCellRenderer , anule getTableCellRendererComponent() para condicionar el renderizador para cada celda como se especifica en el modelo.

  • Editor: DefaultCellEditor , usado aquí implícitamente, debería ser suficiente.