【问题标题】:How to distinguish between user selecting an item and getSelectedValue()?如何区分用户选择项目和 getSelectedValue()?
【发布时间】:2012-01-23 14:53:10
【问题描述】:

在执行ListSelectionListenervalueChanged 方法期间,有什么方法可以判断用户是否点击了JList 或setSelectedIndex 是否被其他代码调用?

【问题讨论】:

  • 摇摆?如果是,也将摇摆添加到标签中
  • 没办法。如果您觉得需要区分,通常视图和数据之间的连接逻辑不够丰富

标签: java swing list listener


【解决方案1】:

AFAIK,不。但是,如果目标是仅在选择来自用户的情况下执行某些操作,您可以在选择代码中的索引之前设置一个标志以表明选择不是来自用户,或者删除侦听器并在之后添加它:

private void selectIndexInList(int index) {
    this.selectionComesFromTheCode = true;
    try {
        list.setSelectedIndex(index);
    }
    finally {
        this.selectionComesFromTheCode = false;
    }
}

@Override
public void valueChanged(ListSelectionEvent e) {
    if (!this.selectionComesFromTheCode) {
        ...
    }
}

【讨论】:

  • 谢谢,这行得通。我会留一点时间让其他人提出其他解决方案。当答案如此简单时,简直不敢相信希望我花了这么长时间。 +1
  • @JB Nizet 我认为您可以确定选择是来自键盘还是鼠标,我看到了 JTable 的简单代码,可以从 ListSelection 中获取
猜你喜欢
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
  • 2013-06-21
  • 1970-01-01
  • 1970-01-01
  • 2012-04-06
  • 1970-01-01
  • 2014-01-22
相关资源
最近更新 更多