12

JTable を使用しています。セルの選択が変更されるたびに通知を受け取る必要があります。ListSelectionListener を使用しようとしましたが、行の選択が変更されたときにのみ通知を受け取ります。同じ行の新しい列を選択すると、通知が届きません。セルが変更されたときではなく、いつセルが選択されたかを知る必要があります。これを行うために使用できるリスナーはありますか?

4

2 に答える 2

11

これを行う最も簡単な方法は、 を呼び出しsetCellSelectionEnabled(true)て、テーブルへの参照をリスナーに渡すことです。リスナーが呼び出されたら、元のテーブルでgetSelectedRow()andを呼び出します。getSelectedColumn()

別の方法として、テーブルに行選択リスナーを設定し、列選択リスナーを に設定してColumnModelから、それらの共通点を見つけます。

于 2012-09-11T20:07:08.033 に答える
5

選択の変更に関する通知を受け取る方法の 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 からのイベントを渡すためです。

于 2012-09-12T07:33:22.760 に答える