@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() для работы с данными ячеек.
@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; } }); |
В этом случае не требуется создание отдельного класса для рендерера.