Я уже писала о том, как я страдала по этому неудобному (на мой дилетантский взгляд) классу. Но, покопавшись в нете, я нашла, как можно аккуратно его обуздать.
Итак, у меня есть таблица 9 на 9, ячейки квадратные и белые.
Мне нужно: выделить блоки 3 на 3 (верхний левый, правый, один центральный и два нижних по углам) каким-то образом. Я выбрала серый цвет.
Далее есть у меня объект JTable myJTable, чтобы разукрасить его как надо, надо повесить на колонки, из которых состоит таблица, рендерер для ячеек. По умолчанию у них стоит DefaultTableCellRenderer, поэтому чтобы получить свою разновидность, надо создать свой класс, наследующий от DefaultTableCellRenderer.
//вешаем рендерер
for (int j = 0; j < DIM2; j++) {
myJTable.getColumnModel().getColumn(j).setCellRenderer(
new YourTableCellRenderer());
}
int DIM = 3;
class YourTableCellRenderer 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);
c.setFont(new Font("Tahoma", Font.PLAIN, 30));
c.setForeground(Color.black);
//выделение блоков серым цветом
if (((row / DIM) * DIM + (column / DIM)) % 2 == 0) {
c.setBackground(Color.LIGHT_GRAY);
} else
c.setBackground(Color.white);
return c;
} }
Красота=) Таким же образом в этом методе можно ввести проверку какого-либо условия, и уже по нему делать с ячейкой что угодно.
Так, например, у меня есть условие судоку и решение — они выделяются разным цветом.
This comment has been removed by the author.
ReplyDelete