События JTable

Модератор: Absurd

Ответить
keo
Сообщения: 46
Зарегистрирован: 25 апр 2006, 17:35
Откуда: Украина, Киев

Подскажите как сделать обработчик события завершения редактирования ячейки таблицы...

Если у кого есть ссылки на литературу вообще по событиям таблицы в целом буду благодарен...
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

CellEditor.addCellEditorListener(new CellEditorListener(){
public void editingCanceled(ChangeEvent e) {}
public void editingStopped(ChangeEvent e) {}
});
keo
Сообщения: 46
Зарегистрирован: 25 апр 2006, 17:35
Откуда: Украина, Киев

Oscar, спасибо!
keo
Сообщения: 46
Зарегистрирован: 25 апр 2006, 17:35
Откуда: Украина, Киев

Не могу понять...

Пробовал так

Код: Выделить всё

TableColumn column = mainTable.getColumnModel().getColumn(3);
column.getCellEditor().addCellEditorListener(
        new CellEditorListener() {
        public void editingCanceled(ChangeEvent e) {}
        public void editingStopped(ChangeEvent e) {}
      }
);
ругается java.lang.NullPointerException

что делаю не правильно?
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

keo,
по умолчанию column.getCellEditor() равен null (см. api doc),
и если он равен нулю, то используется DefaultCellEditor (в зависимости от класса обьекта, хранящегося в ячейке).

Таким образом есть следующие два варианта:

1. column.setCellEditor(new DefaultCellEditor(new JTextField())); // или же свой собственный эдитор, а дальше, как ты написал.
этот способ требует нового эдитора, и работает для всей колонки

2. tableCellEditor = table.getDefaultEditor(String.class); // tableCellEditor.addCellEditorListener .....
этот способ не требует нового эдитора и работает для всех ячеек таблицы, с обьектами класса String

И ещё один подход:

3. TableCellEditor tableCellEditor = table.getCellEditor(0, 0); //tableCellEditor.addCellEditorListener...

работает для конкретной ячейки
// можно сделать в цикле для всей колонки,
// но если таки нужна колонка, то лучше уж первый способ использовать, ИМХО
keo
Сообщения: 46
Зарегистрирован: 25 апр 2006, 17:35
Откуда: Украина, Киев

Спасибо, буду пробовать!
Ответить