Ok。起動時に特定のjtableが作成され、再構築されない大規模なプロジェクトがあります。テーブルモデルが更新され、さまざまなユーザーアクションに基づいてテーブルが再描画されます。
AbstractActionとともにセルの変更に反応するカスタムTableCellListenerクラスを追加しました。これは、テーブルにデータが最初に入力されたときに実行されるコードです。(「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は、 Rob Camickによってここに投稿されたカスタムリスナーであり、「sayIt」ビットは私自身のデバッグコードです。
これはすべてうまく機能しますが、テーブルが再構築されるたびにリスナーを完全に削除して、最後に選択したセルの値を「記憶」しているため、再度追加したいと思います。これは、テーブルデータが新しいため無効になっています。
'removePropertyChangeListener()'タイプの呼び出しでそれができると確信していますが、リスナーを引数として想定しているため、それを見つける方法がわかりません。