JTable を使用しています。セルの選択が変更されるたびに通知を受け取る必要があります。ListSelectionListener を使用しようとしましたが、行の選択が変更されたときにのみ通知を受け取ります。同じ行の新しい列を選択すると、通知が届きません。セルが変更されたときではなく、いつセルが選択されたかを知る必要があります。これを行うために使用できるリスナーはありますか?
2 に答える
これを行う最も簡単な方法は、 を呼び出しsetCellSelectionEnabled(true)
て、テーブルへの参照をリスナーに渡すことです。リスナーが呼び出されたら、元のテーブルでgetSelectedRow()
andを呼び出します。getSelectedColumn()
別の方法として、テーブルに行選択リスナーを設定し、列選択リスナーを に設定してColumnModel
から、それらの共通点を見つけます。
列選択の変更に関する通知を受け取る方法の 1 つは、@parsifal(コメントで既に回答済み) のように、TableColumnModel の内部 selectionModel を取得してリスナーを登録することです。
table.getColumnModel().getSelectionModel().addListSelectionListener(selectionListener);
もう 1 つの方法は、TableColumnModelListener を columnModel に登録することです。
table.getColumnModel().addColumnModelListener(columnModelListener);
1 つ目は、コードに関しては「短い」ものです。実装するメソッドが 1 つだけであるのに対して、複数のメソッドが実装されます。columnSelectionChanged 以外はほとんど空です。
2 つ目は、動的な変更に対してより堅牢です。1 つ目では、columnModel の selectionModel プロパティの変更に対して保護する可能性はありません ... プロパティではないためです。言い換えると、アプリケーション コードが selectionModel をスワップ アウトする (非常にまれな) ケースでは、リスナーは Void をリッスンしています。columnModelListener をインストールすると、そのような変更の影響を受けません。columnModel は selectionModel からのイベントを渡すためです。