私は、特定のjtableが起動時に作成され、決して再構築されない大きなプロジェクトを持っています。表モデルはリフレッシュされ、さまざまなユーザーの操作に基づいて表が再描画されます。jtableからAbstractActionを削除します。
私は、カスタムの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はロブCamickでhereを掲載するカスタムリスナーであると「sayIt」ビットは自分自身のデバッグのコードです。
これはすべて機能しますが、テーブルが再構築されるたびにリスナーを完全に削除して、最後に選択したセルの値を「覚えています」データは新しいものです。
私はかなり 'removePropertyChangeListener()'型の呼び出しがそれを行うだろうが、それはリスナーを引数として期待しており、それを見つける方法がわかりません。
@camickrはすでに述べています:あなたが表示していないコードに何か間違っています。時間は1時間です – kleopatra
はい。私は今問題を抱えている。また、選択リスナーを使用してセルの内容を編集用に自動的に選択します(ユーザはダブルクリックを継続しないようにします)、Camickrのテストコードが期待通りに機能するため、問題になる可能性があります。 – jeff