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
, anulesetValueAt()
para condicionar el estado deseado de cada celda en el modelo a medida que ocurren los cambios.Renderer: en su
TableCellRenderer
, anulegetTableCellRendererComponent()
para condicionar el renderizador para cada celda como se especifica en el modelo.Editor:
DefaultCellEditor
, usado aquí implícitamente, debería ser suficiente.