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 Calendars 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 Calendars pendiente de que llenar la fila 0, que es lo que yo quería, pero lo que me impidió hacerlo en el primer lugar?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top