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。如果选择了列表中的项目,则调用处理程序。问题是当我从一个项目转到另一个项目时,处理程序被调用了两次。如果第一个触发器传递原始选定项目,而第二个触发器传递新项目,我可以看到它的用途。但两次都通过了相同的新项目。那有什么意义呢?有没有办法防止处理程序被调用两次?

4

3 回答 3

36

e.getValueIsAdjusting就是你要找的。如该方法的javadoc中所述

返回这是否是一系列多个事件中的一个,其中仍在进行更改

于 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 回答