web-dev-qa-db-ja.com

ListSelectionListenerが2回呼び出されました

class MyListListener implements ListSelectionListener {

      public void valueChanged (ListSelectionEvent e) {
           JList source = (JList) e.getSource();
           // do something
      }
}

JList myList = new JList (myModel);  
myList.addListSelectionListener (new MyListListener());

私はとても簡単なことをしています。 JListを持っています。リストの項目が選択されると、ハンドラーが呼び出されます。問題は、あるアイテムから別のアイテムに移動するときにハンドラーが2回呼び出されることです。最初のトリガーが元の選択されたアイテムを通過し、2番目のトリガーが新しいアイテムを通過する場合の使用法を確認できます。ただし、どちらの場合も、同じ新しいアイテムが渡されます。そのポイントは何ですか?ハンドラーが2回呼び出されないようにする方法はありますか?

25
tadpole

e.getValueIsAdjusting はあなたが探しているものです。そのメソッドのjavadocに記載されているように

これが一連の複数のイベントの1つであり、変更がまだ行われているかどうかを返します

33
Robin

これは通常の方法です。 getValueIsAdjusting() メソッドでフィルタリングする必要があります。

6
Aubin