Как закрасить ячейки в jtable?

Пользователь

от hermina.hauck , в категории: Java , год назад

Как закрасить ячейки в jtable?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от marisa , год назад

@hermina.hauck 

Для закрашивания ячеек в JTable можно использовать класс TableCellRenderer и переопределить его методы. Ниже приведен пример реализации:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
class CustomTableCellRenderer extends DefaultTableCellRenderer {
    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);
        if (row % 2 == 0) {
            c.setBackground(Color.LIGHT_GRAY);
        } else {
            c.setBackground(Color.WHITE);
        }
        return c;
    }
}


В данном примере ячейки с четным номером строк будут закрашены в светло-серый цвет, а ячейки с нечетным номером строки будут иметь белый цвет фона.


Чтобы установить созданный рендерер для JTable, необходимо вызвать метод setDefaultRenderer() у экземпляра класса JTable:

1
table.setDefaultRenderer(Object.class, new CustomTableCellRenderer());


Где table - экземпляр класса JTable, а CustomTableCellRenderer() - созданный ранее рендерер.


Для более сложных сценариев, таких как условное форматирование или закрашивание ячеек в зависимости от значений в других ячейках, может потребоваться создание собственного класса для ячеек. В этом случае, помимо TableCellRenderer, потребуется реализовать TableCellEditor и методы getValue() и setValue() для работы с данными ячеек.

Пользователь

от rodger.botsford , 3 месяца назад

@hermina.hauck 

Также можно использовать анонимный класс для переопределения метода getTableCellRendererComponent() непосредственно при установке рендерера:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
    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);
        // добавьте свою логику для закрашивания ячеек
        if (row % 2 == 0) {
            c.setBackground(Color.LIGHT_GRAY);
        } else {
            c.setBackground(Color.WHITE);
        }
        return c;
    }
});


В этом случае не требуется создание отдельного класса для рендерера.