Хорошо.У меня большой проект, в котором при запуске создается jtable, который никогда не перестраивается.Модель таблицы обновляется, а таблица перерисовывается на основе различных действий пользователя.
Я добавил пользовательский класс TableCellListener для реагирования на изменения ячейки вместе с AbstractAction.Вот код, который выполняется при первом заполнении таблицы данными.(Без проверки 'firstLoad' каждый раз при перерисовке таблицы прикреплялось несколько действий).
if(firstLoad) {
AbstractAction action = new AbstractAction()
{
public void actionPerformed(ActionEvent e)
{
TableCellListener tcl = (TableCellListener)e.getSource();
sayIt("Row:" + tcl.getRow()+" Column:" + tcl.getColumn()+
" Old:" + tcl.getOldValue()+" New:" + tcl.getNewValue());
}
};
firstLoad = false;
TableCellListener tcl = new TableCellListener(table2, action);
}
TableCellListener - пользовательский слушатель, опубликованный здесь Робом Кэмиком и 'sayIt'bit - это мой собственный код отладки.
Все это прекрасно работает, но я хотел бы полностью удалить слушателя каждый раз, когда таблица перестраивается, и добавить его снова, потому что он "запоминает" значение из последнего выбранногоячейка, которая теперь недопустима, потому что данные таблицы новые.
Я вполне уверен, что вызов типа removePropertyChangeListener () сделает это, но ожидает слушателя в качестве аргумента, и я не уверен, как его найти.