Инициализация JCheckBoxes, когда они генерируются табличной моделью - PullRequest
0 голосов
/ 01 февраля 2010

В Java Swing я создал JTable, который использует класс табличной модели, который расширяет DefaultTableModel. Поскольку значения одной строки таблицы имеют логический тип, они отображаются в виде флажков. Поскольку я хочу добавить к этим флажкам классы слушателей элементов, мне нужно инициализировать каждый из этих флажков. Но как мне быть, если они автоматически создаются моделью таблицы?

Ответы [ 2 ]

2 голосов
/ 01 февраля 2010

Поскольку эти флажки изменяют базовые данные, должно быть достаточно добавить TableModelListener и реагировать на tableChanged события этого столбца.

jTable1.getModel().addTableModelListener(new TableModelListener() {
    final int YOUR_BOOLEAN_COLUMN = 1;
    public void tableChanged(TableModelEvent e) {
        if(e.getColumn() == YOUR_BOOLEAN_COLUMN) {
            // get value from model (not affected if user re-orders columns)
            TableModel tableModel = jTable1.getModel();
            Boolean value =
                (Boolean)tableModel.getValueAt(e.getFirstRow(), YOUR_BOOLEAN_COLUMN);
            System.out.println(value);
        }
    }
});
1 голос
/ 01 февраля 2010

Краткий ответ: вы не можете добавить ActionListeners к JCheckboxes в таблице по двум причинам:

  1. При настройке по умолчанию один JCheckbox используется для визуализации всех ячеек с флажками.
  2. Щелчки мыши по ячейке таблицы, содержащей JCheckBox, не передаются на флажок, они поглощаются таблицей.

Я думаю, что важно спросить , почему вам нужны эти события? Ответ, который вы дадите, будет отражать лучший подход.

Если вы хотите разрешить пользователю редактировать состояние флажков, лучше всего подменить TableModel.isCellEditable(int, int), чтобы вернуть true для столбцов флажков, а затем просто обновить исходные данные при обновлении TableModel.

...