2

ListSelectionListenerJTableにを追加して、行を選択すると、その行に値を設定するために使用した値を持つオブジェクトを取得できるようにしました。しかし、行を選択すると、2つのイベントが発生することに気付きました。1つは列選択用で、もう1つは行選択用です。2つのイベントが発生するのを防ぐ方法はありますか?テーブル選択モードをに設定しましたSINGLE_SELECTION。これが私のコードです:

table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {

  @Override
  public void valueChanged(ListSelectionEvent event) {
    int row = table.convertRowIndexToModel(table.getSelectedRow()); 
    SomeObject someObject = (SomeObject) tableModel.getValueAt(row, 0);
    System.err.println(someObject);
  }

});
4

2 に答える 2

4

event.getValueIsAdjusting()何かをする前に、の値を確認することをお勧めします。

それがtrueを返す場合、それは「変更がまだ行われている一連の複数のイベントの1つ」であるため、イベントを無視できます(Javadocからの引用)

getValueIsAdjusting()

setValueIsAdjusting()

于 2012-04-17T22:13:24.793 に答える
0

選択解除/選択から2つのイベントが発生している可能性があります。最初の発生は古いアイテムの選択解除であり、次のイベントは新しいアイテムの選択です。

前の選択(getSource()?)のオブジェクトをこのイベントの外に保存し、現在のイベントが最後のイベントと同じオブジェクトを持っているかどうかを確認します。その場合、現在分析しているイベントは、以前に選択されていたため、選択が解除されていると見なすことができます。それらが等しくない場合は、外部変数を更新して、実行したいコードを実際に実行します。

于 2012-04-17T20:12:52.307 に答える