28
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回呼び出されないようにする方法はありますか?

4

3 に答える 3

36

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

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

于 2012-10-19T13:40:10.590 に答える
6

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

于 2012-10-19T13:41:07.740 に答える
0

これを本当に防ぎたい場合は、これを試してください。

  public void valueChanged (ListSelectionEvent e) {
       JList source = (JList) e.getSource();
       if(!e.getValueIsAdjusting()){
           // do something
       }
  }
于 2021-06-23T06:20:46.130 に答える