sintaxis setvalueat setmodel libreria componentes java swing jtable renderer

java - setvalueat - libreria jtable



JTable deshabilitar casilla de verificación en la celda (1)

Hola, tengo una JTable Y quiero atenuar todas las casillas de casillas de verificación desactivadas que probé con un renderizador personalizado que comprueba isEnabled () y luego cambiar el color de fondo, pero aún no funciona. ¿Alguna sugerencia? ¡¡¡Gracias!!!


Como se señala en Conceptos: editores y procesadores, "un procesador de celda única generalmente se usa para dibujar todas las celdas que contienen el mismo tipo de datos". Deberá mantener el estado enabled en su modelo de tabla .

Adición: como ejemplo concreto, el modelo de datos en este ejemplo es una simple serie de instancias de Date . La getTableCellRendererComponent() como se muestra a continuación hace que los días impares se deshabiliten. En este caso, ser impar es una propiedad inherente al valor de la Date sí, pero el modelo podría ser consultado por cualquier propiedad relacionada.

@Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) { Calendar calendar = Calendar.getInstance(); calendar.setTime((Date) value); Component c = super.getTableCellRendererComponent( table, value, isSelected, hasFocus, row, col); c.setEnabled(calendar.get(Calendar.DAY_OF_MONTH) % 2 == 0); return c; }

Adición: en el ejemplo anterior, se evoca el DateRenderer porque TableModel devuelve el token de tipo Date.class , para el cual se ha establecido como predeterminado.

table.setDefaultRenderer(Date.class, new DateRenderer());

Se puede obtener una apariencia idéntica sobrescribiendo prepareRenderer() como se muestra a continuación, pero el método se invoca para todas las celdas, independientemente de la clase. Como resultado, prepareRenderer() es ideal para afectar filas enteras, como se muestra en la Tabla de Renderización de filas .

private final JTable table = new JTable(model) { @Override public Component prepareRenderer(TableCellRenderer renderer, int row, int col) { Component c = super.prepareRenderer(renderer, row, col); if (col == DATE_COL) { Calendar calendar = Calendar.getInstance(); calendar.setTime((Date) model.getValueAt(row, col)); c.setEnabled(calendar.get(Calendar.DAY_OF_MONTH) % 2 == 0); } return c; } };