java - defaulttablecellrenderer - cómo agregar un oyente de ratón a una celda de JTable que contiene un valor booleano representado como casilla de verificación
jtable java (4)
No me puedo resistir con el consejo de @jzd, realmente no, creo que no, no me TableMode#setValue
pasar TableMode#setValue
,
pero básicamente hay dos opciones
1) TableModelListener
2) AFAIK solo TableCellEditor # isCellEditable puede hacer eso en conexiones con JCheckBox o JRadioButton en JTable
public boolean isCellEditable(EventObject getEvent) {
MouseEvent me = (MouseEvent) getEvent;
JTable table = (JTable) (me.getSource());
Point point = me.getPoint();
int column = table.columnAtPoint(point);
int row = table.rowAtPoint(point);
Rectangle rec = table.getCellRect(row, column, true);
//...
}
Tengo una JTable con un modelo personalizado implementado que extiende AbstractTableModel.
public abstract class AbstractTable extends AbstractTableModel{
public Class<? extends Object> getColumnClass(int c) {}
}
Como he implementado el método getColumnClass, los valores booleanos se muestran en la tabla como casillas de verificación. Me gustaría interceptar el cambio de estado de la casilla de verificación, pero desafortunadamente no puedo agregar directamente un oyente de mouse, porque no tengo una referencia a la casilla de verificación, que no fue creada por mí.
¿Cómo puedo configurar un oyente de ratón para interceptar el evento de cambio de estado de casilla de verificación?
EDITAR:
@jzd la respuesta es correcta. Puedo ver el cambio en el método setValue. Pero me gustaría saber cómo implementar un enfoque basado en oyentes de mouse.
Parece que agregar un oyente de ratón es un paso adicional. Sugeriría interceptar el cambio en el método setValue()
del modelo.
Si no puede cambiar el método setValue()
, lo mejor es un CustomEditor
que bloqueará los cambios porque no es una buena forma de capturar y ocultar el clic del mouse incluso desde el editor booleano predeterminado.
Estaba teniendo exactamente el mismo problema, y también sé que solicitó específicamente un oyente de ratón para el editor de casilla de verificación, pero una solución podría ser agregar TableModelListener
como se describe aquí en la sección "Escuchar cambios de datos", e intentar simular el comportamiento cuando se detecta el cambio, pero si quieres saber cuándo el mouse está sobre la casilla de verificación o cosas por el estilo <acciones específicas del mouse>, tengo miedo de que tengas que hacer tu propia implementación de una celda Editor, que implementa esos comportamientos ... Al menos eso es lo que haría ...
¡Grettings! ...
Particularmente, me gustaría evitar poner la lógica dentro de
setValue()
.
En este ejemplo de valores seleccionables, el método setValue()
no se reemplaza, excepto para actualizar la estructura de datos interna y desencadenar el evento apropiado . ValueEditor
extiende AbstractCellEditor
e implementa ValueRenderer
, mientras que ValueRenderer
amplía JCheckBox
. De esta forma, el editor puede escuchar el JCheckBox
del JCheckBox
dentro del itemStateChanged()
del editor.
Adición: Agregar un CellEditorListener
es otro enfoque, que se muestra aquí para JTree
. Tenga en cuenta que JTable
sí es un CellEditorListener
.