Как сделать столбец JTable содержать флажки?
-
04-10-2019 - |
Вопрос
Предисловие: Я ужасен с Java и хуже с компонентами Java UI.
Я нашел несколько разных учебных пособий о том, как добавлять кнопки в таблицы, однако я борюсь с добавлением флажков. Мне нужно иметь столбец, который рисует текстовое поле, отмеченное по умолчанию (визуализатор ячейки, я думаю, обрабатывает это), затем на клик Tickbox, Purnicks Box, RedRaws, указанный в коробке, и срабатывает с события где-то, что я могу отследить.
В настоящее время у меня есть пользовательский Cellrenderer:
public class GraphButtonCellRenderer extends JCheckBox implements TableCellRenderer {
public GraphButtonCellRenderer() {
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if(isSelected)
setSelected(true);
else
setSelected(false);
setMargin(new Insets(0, 16, 0, 0));
setIconTextGap(0);
setBackground(new Color(255,255,255,0));
return this;
}}
Что в настоящее время обрабатывает в настоящее время, рисуя галочку, но только тикает и не содержит коробку, если выбран эта строка. Но я не знаю, как обращаться с событиями. Действительно, я спрашиваю, возможно, это ссылка на хороший учебник о том, как щедро добавить флажки к JTable. Любая помощь очень ценится :)
Решение
Нет необходимости создавать свой собственный настольный рендер. Вот упрощенный пример. Отказ Просто создайте пользовательскую модель таблицы и для данного столбца вернуть класс Boolean для:
public Class getColumnClass(int column)
Если вы хотите, чтобы столбец был редактируемым, вернитесь для
public boolean isCellEditable(int row, int column)
JTable заботится о рендеринге для вас.
Другие советы
Как говорят Peter, легко используя расширенный класс defaulttablemodel, ex:
class NewTableModel extends DefaultTableModel{
public Class<?> getColumnClass(int columnIndex) {
return getValueAt(0, columnIndex).getClass();
}
}
Вот а просто Довольно разработано пример с помощью TableCellRenderer
а также TableCellEditor
. Отказ Смотрите также, Концепции: редакторы и рендеры.
Приложение: @jay ascren's Point хорошо воспринимается. Рендерер по умолчанию для Boolean.class
, Как описано в руководстве, может быть все, что вам нужно.
Самым простым решением является использование по умолчаниюTableModel и используйте логический объект в качестве значений.
В дизайнере Swing Set Column Type в Boolean