JTable меняет цвета ячеек с помощью TableCellRenderer

Я использую JTable в своем приложении с графическим интерфейсом в качестве сетки для представления позиций в игре. Я хочу, чтобы ячейки таблицы, представляющие определенную позицию объекта, имели определенный цвет, а при некоторых действиях объект перемещался (т.е. цветная ячейка перемещалась в сетке/JTable). Я знаю, что могу изменить цвета ячеек, создав класс, который расширяет DefaultTableCellRenderer , это единственный способ сделать это? или есть более простой способ изменить цвет ячеек? Также JXTable лучше, чем JTable для такого приложения?

РЕДАКТИРОВАТЬ: я не учел тот факт, что мне нужно, чтобы определенные цвета ячеек изменялись динамически, т. е. при нажатии кнопки, щелчке клавиатуры... и т. д. Возможно ли это с любым TableCellRenderer, если я все еще с помощью JTable?

Спасибо,


person Saher Ahwal    schedule 26.04.2011    source источник


Ответы (2)


С JTable DefaultTableCellRenderer — лучший способ сделать это.

Однако, если вы используете JXTable, будет намного проще использовать Highlighter и пользовательский Predicate. Как правило, предикаты используются для окрашивания в зависимости от содержимого ячейки, но вы можете так же легко получить его цвет в зависимости от строки/столбца и некоторого внешнего значения.

Посмотрите в http://www.jaRVana.com/jaRVana/view/org/swinglabs/swingx-core/1.6.2/swingx-core-1.6.2-javadoc.jar!/org/jdesktop/swingx/JXTable.html в разделе «Визуализация и выделение», который представляет собой чередующуюся таблицу и сопоставление с образцом. По сути, вы делаете то же самое, что и средство выделения шаблонов, но со своим собственным предикатом.

person Reverend Gonzo    schedule 26.04.2011
comment
Как это сделать динамически? Работает ли это так же, если мне нужно нажать кнопку, которая меняет цвет ячейки, или заставить щелкнуть клавиатуру, чтобы изменить цвет ячейки? Спасибо вам - person Saher Ahwal; 02.05.2011

В качестве альтернативы рассмотрите возможность использования prepareRenderer(), как предложено @mKorbel и показано в статье Визуализация строк таблицы.

person trashgod    schedule 27.04.2011
comment
Могу ли я использовать prepareRenderer() для действия кнопки, чтобы изменить цвет одной ячейки или набора ячеек? - person Saher Ahwal; 02.05.2011
comment
Да, если состояние является чистой функцией строки и столбца. См. также этот ответ. - person trashgod; 02.05.2011