funciona defaulttablecellrenderer como java swing jtable mouselistener jcheckbox

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 .