Wednesday, May 9, 2007

Укрощаем JTable

Я уже писала о том, как я страдала по этому неудобному (на мой дилетантский взгляд) классу. Но, покопавшись в нете,  я нашла, как можно аккуратно его обуздать.

Итак, у меня есть таблица 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;
} }

Красота=) Таким же образом в этом методе можно ввести проверку какого-либо условия, и уже по нему делать с ячейкой что угодно.

Так, например, у меня есть условие судоку и решение — они выделяются разным цветом.

1 comment:

  1. This comment has been removed by the author.

    ReplyDelete