ListSelectionListener 调用了两次

Posted

技术标签:

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

所以我并没有发疯。感谢您的回答。【参考方案2】:

这是正常的方法,你必须用getValueIsAdjusting()方法过滤

【讨论】:

【参考方案3】:

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

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

【讨论】:

以上是关于ListSelectionListener 调用了两次的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在java swing中从ListSelectionEvents中提取字符串?

tomcat服务器启动,Filter 的构造函数被调用了两次,doFilter函数调用了一次,

调用的目标发生了异常这个异常怎么处理

未调用 UIcollectionView 的 didDeselectItemAt 但调用了 didSelectItemAt?

未调用 didEnterRegion 但在目标 C 中调用了 didExitRegion

为啥我的列表项调用了它不应该调用的函数?