ListSelectionListener被调用两次

时间:2012-10-19 13:37:15

标签: java swing jlist listselectionlistener

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

3 个答案:

答案 0 :(得分:29)

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

  

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

答案 1 :(得分:6)

这是常规方式,您必须使用getValueIsAdjusting()方法

进行过滤

答案 2 :(得分:0)

如果你真的想防止这种情况发生,试试这个:

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