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

【问题讨论】:

    标签: java swing jlist listselectionlistener


    【解决方案1】:

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

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

    【讨论】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2017-06-25
        • 2013-01-21
        • 2012-09-08
        • 2016-04-27
        • 2019-02-27
        • 1970-01-01
        • 2019-12-04
        • 2018-09-15
        • 1970-01-01
        相关资源
        最近更新 更多