Java - Cambio de JTable representador por clase
-
16-09-2020 - |
Pregunta
Estaba esperando que alguien podría explicar algo a mí, ya he encontrado mi solución, pero no entiendo por qué funciona.Quería establecer un procesador predeterminado por el tipo de Clase a toda una tabla, no sabiendo en la creación donde los objetos estará en ella.
Yo había declarado un JTable y establecer el valor predeterminado de renderizado que de mi propia, para la Calendar
clase, de manera que cualquier Calendar
s daría una representación significativa, no sólo una toString()
de sí mismos.
JTable table = new JTable();
table.setDefaultRenderer(Calendar.class, new MyRenderer());
public class MyRenderer extends DefaultTableCellRenderer{
public MyRenderer() { super(); }
@Override
public void setValue(Object value){
setText(makeCalendarToDate((GregorianCalendar)value));
}
}
Esto no iba a funcionar hasta que se me pasó por encima del método de getColumnClass
como se hizo Aquí
De acuerdo a la luz del sol Documentación, parece getColumnClass
debe hacer exactamente lo que fue reemplazado en el ejemplo dado más arriba - ¿por qué se hace cuando configuro ese método, pero no cuando me deje el stock de implementación?
Ahora puedo llenar la columna con Calendar
s pendiente de que llenar la fila 0, que es lo que yo quería, pero lo que me impidió hacerlo en el primer lugar?
Solución
JTable se presenta la columna de la clase del modelo.La respuesta radica en la implementación de AbstractTableModel, suponiendo que es lo que le ha basado su modelo de mesa en.En AbstractTableModel getColumnClass ha sido implementado como este: return Object.class;
Así que, a menos que reemplazar, la columna de objetos siempre será manejado como Objeto.Esto no es algo que el modelo va a gestionar de forma automática.Sólo tienes que reemplazar getColumnClass, no hay forma de evitar eso.