Как сделать, чтобы столбец JTable содержал флажки? - PullRequest
8 голосов
/ 25 мая 2010

Предисловие: я ужасен с Java, и хуже с компонентами Java UI.

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

В настоящее время у меня есть собственный 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 ]

24 голосов
/ 25 мая 2010

Нет необходимости создавать свой собственный рендерер таблиц. Вот более простой пример . Просто создайте пользовательскую модель таблицы и для данного столбца верните класс Boolean для:

public Class getColumnClass(int column)

Если вы хотите, чтобы столбец был редактируемым, верните true для

public boolean isCellEditable(int row, int column)

JTable позаботится о рендеринге за вас.

Другой пример здесь.

5 голосов
/ 07 августа 2011

Как сказал Питер, легко использовать расширенный класс DefaultTableModel, например:

class NewTableModel extends DefaultTableModel{
        public Class<?> getColumnClass(int columnIndex) {
            return getValueAt(0, columnIndex).getClass();
        }
    }
4 голосов
/ 25 мая 2010

Вот простой довольно сложный пример с использованием TableCellRenderer и TableCellEditor.См. Также, Концепции: редакторы и средства визуализации .

Приложение: @Джей Аскрен правильно понялРендерер по умолчанию для Boolean.class, как описано в руководстве, может быть всем, что вам нужно.

3 голосов
/ 25 мая 2010

Самое простое решение - использовать DefaultTableModel и использовать логический объект в качестве значений.

0 голосов
/ 11 ноября 2012

В Swing Designer установите тип столбца в логическое значение

...