Ok. У меня большой проект, где конкретная jtable создается при запуске и никогда не восстанавливается. Модель таблицы обновляется, а таблица перерисовывается на основе различных действий пользователя.Удалить AbstractAction от 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 обычай слушатель отправил here Роб Camick и бит «sayIt» мой собственный код отладки.
Все это отлично работает, но я хотел бы полностью удалить слушателя каждый раз, когда таблица была перестроена, и добавьте ее снова, потому что она «запоминает» значение из последней выбранной ячейки, которая теперь недействительна, поскольку таблица данные являются новыми.
Я уверен, что вызов типа removePropertyChangeListener() будет делать это, но он ожидает слушателя в качестве аргумента, и я не уверен, как его найти.
как @camickr уже упоминалось: что-то не так с кодом, который вы не показываете, время для sscce – kleopatra
Да. Сейчас я начинаю стрелять. Я также использую прослушиватель выбора для автоматического выбора содержимого ячеек для редактирования (он не позволяет пользователю дважды кликать), и я думаю, что это может быть проблемой, поскольку тестовый код Camickr работает так, как ожидалось. – jeff