Как сделать столбец JTable содержать флажки?
предисловие: я ужасен с java и хуже с компонентами Java ui.
Я нашел несколько разных учебников о том, как добавлять кнопки в таблицы, однако я борюсь с добавлением флажков. Мне нужно иметь столбец, который рисует текстовое поле, отмеченное галочкой по умолчанию (Cell renderer, я думаю, обрабатывает это), затем по щелчку галочки, распаковывает поле, перерисовывает указанное поле и запускает событие где-то, где я могу отслеживать.
в настоящее время у меня есть пользовательский объекта 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. Любая помощь очень ценится:)
5 ответов
нет необходимости создавать свой собственный рендерер таблицы. вот более простой пример. Просто создайте пользовательскую модель таблицы и для данного столбца верните класс Boolean для:
public Class getColumnClass(int column)
Если вы хотите, чтобы столбец был редактируемым, верните true для
public boolean isCellEditable(int row, int column)
JTable заботится о рендеринге для вас.
Как говорит Питер, его легко использовать расширенный класс DefaultTableModel, например:
class NewTableModel extends DefaultTableModel{
public Class<?> getColumnClass(int columnIndex) {
return getValueAt(0, columnIndex).getClass();
}
}
здесь простой довольно подробно пример С помощью TableCellRenderer
и TableCellEditor
. См. также концепции: редакторы и визуализаторы.
добавление: точка зрения @Jay Askren хорошо принята. Средство визуализации по умолчанию для Boolean.class
, как описано в учебнике, может быть все, что вам нужно.
самое простое решение-использовать DefaultTableModel и использовать логический объект в качестве значений.