Как сделать столбец 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 и использовать логический объект в качестве значений.


в конструкторе Swing Установите тип столбца в boolean