Pregunta

Estoy tratando de hacer una fila específica de mi JTable (debe tener un color de fondo diferente y debe tener caracteres en negrita).

He encontrado varias preguntas con respecto a cómo implementar un TableCellRenderer personalizado ( aquí y aquí ) y el tutorial cómo usar las tablas y este ( de fila de tabla Rendering ).

Estoy usando un JInternalFrame para mostrar la JTable. Traté de poner en práctica las dos soluciones pero tampoco getCellRenderer ni prepareRenderer están siendo llamados. Al depurar, puedo ver a mi nuevo ser creado JTable, pero, a mi punto de interrupción dentro de los métodos no son llamados.

Mi código es el siguiente:

this.add(createData(model));

private JComponent createData(ProfitLossTableModel model) {
    JTable table = new JTable(model) {

        public TableCellRenderer getCellRenderer(int row, int column) {
            if ((row == 0) && (column == 0)) {
                DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
                renderer.setHorizontalAlignment(JLabel.RIGHT);
                renderer.setBackground(Color.red);
                return renderer;
            } else {
                return super.getCellRenderer(row, column);
            }
        }
    };

    table.setPreferredScrollableViewportSize(table.getPreferredSize());
    table.changeSelection(0, 0, false, false);
    table.setAutoCreateRowSorter(true);
    return new JScrollPane(table);
}

Como se puede ver, el modelo es mi implementación de un AbstractTableModel.

Por supuesto que me falta algo. Traté de llamar repaint() para ver si ha pasado algo, pero nada ocurrió.

También trató de poner un JPane dentro de mi JInternalFrame y les agrega el JScrollPane en ella, pero nada ocurrió también.

Cualquier ayuda?

TIA,

Bob

¿Fue útil?

Solución

Como se discutió en Conceptos: Editores y Renderizadores , "la mesa invoca el método getColumnClass del modelo de tabla, que recibe el tipo de datos de celdas de la columna." Se debe comprobar que su implementación de AbstractTableModel devuelve un valor adecuado, como se sugiere en este ejemplo .

Adición:

  

Estoy tratando de hacer una fila, una columna no.

La fila de tabla de representación prepareRenderer() parece a propósito.

tabbedPane.addTab("FirstRow", createFirstRow(model));
...
private JComponent createFirstRow(DefaultTableModel model) {

    final Font font = new Font("Serif", Font.BOLD, 14);

    JTable table = new JTable(model) {

        public Component prepareRenderer(
                TableCellRenderer renderer, int row, int column) {
            Component c = super.prepareRenderer(renderer, row, column);
            if (!isRowSelected(row)) {
                c.setBackground(row == 0 ? Color.yellow: getBackground());
                c.setFont(row == 0 ? font : getFont());
            }
            return c;
        }
    };

    table.setPreferredScrollableViewportSize(table.getPreferredSize());
    table.changeSelection(1, 1, false, false);
    return new JScrollPane(table);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top