Страница 1 из 1

События JTable

Добавлено: 18 май 2006, 16:28
keo
Подскажите как сделать обработчик события завершения редактирования ячейки таблицы...

Если у кого есть ссылки на литературу вообще по событиям таблицы в целом буду благодарен...

Добавлено: 18 май 2006, 19:27
Oscar
CellEditor.addCellEditorListener(new CellEditorListener(){
public void editingCanceled(ChangeEvent e) {}
public void editingStopped(ChangeEvent e) {}
});

Добавлено: 18 май 2006, 19:35
keo
Oscar, спасибо!

Добавлено: 19 май 2006, 12:51
keo
Не могу понять...

Пробовал так

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

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

что делаю не правильно?

Добавлено: 19 май 2006, 19:04
Oscar
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...

работает для конкретной ячейки
// можно сделать в цикле для всей колонки,
// но если таки нужна колонка, то лучше уж первый способ использовать, ИМХО

Добавлено: 19 май 2006, 22:59
keo
Спасибо, буду пробовать!