Search code examples
javaswingjtablejtableheader

Change color of header at runtime


I am using below code to change the color of a table, it works fine for rows, but not for columns.

DefaultTableCellRenderer defaultTableCellRenderer = new DefaultTableCellRenderer() {

        private static final long serialVersionUID = 1567316215541963628L;

        @Override
        public Component getTableCellRendererComponent(JTable table,
                Object value, boolean isSelected, boolean hasFocus, int row,
                int column) {

            Component c = super.getTableCellRendererComponent(table, value,
                    isSelected, hasFocus, row, column);
            c.setBackground(row % 2 == 0 ? Color.white : new Color(0xE8E8E8));
            c.setForeground(Color.black);

            // c.setForeground(Color.black);
            c.setFont(getFont().deriveFont(14.0f));

            if (row == table.getRowCount() - 1) {
                c.setForeground(Color.white);
                c.setBackground(Color.gray);
            }

            if (nameRownumber.contains(row)) {
                c.setBackground(Color.yellow);

            }
            if (nameColumnNumber.contains(column)) {
                c.setBackground(Color.yellow);
            }


            return c;
        };

    };

Here nameRownumber and nameColumnNumber are of type ArrayList<Integer>, I am assigning values for them at runtime which row and column need to highlight.


Solution

  • The table header uses a different renderer.

    You can set the renderer by using:

    table.getTableHeader().setDefaultRenderer( ... );