Java 如何区分用户选择项目和getSelectedValue()?

Java 如何区分用户选择项目和getSelectedValue()?,java,swing,list,listener,Java,Swing,List,Listener,在执行ListSelectionListener的valueChanged方法的过程中,是否有任何方法可以判断用户是否单击了JList,或者setSelectedIndex是否被其他代码调用?AFAIK,否。但是如果目标是仅在选择来自用户时执行某项操作,您可以在代码中选择索引之前设置一个标志,以表示选择不是来自用户,或者删除侦听器,然后添加它: private void selectIndexInList(int index) { this.selectionComesFromTheCo

在执行
ListSelectionListener
valueChanged
方法的过程中,是否有任何方法可以判断用户是否单击了JList,或者
setSelectedIndex
是否被其他代码调用?

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) {
        ...
    }
}

摆动如果是,则将swing添加到标记中。如果您觉得需要区分,通常视图和数据之间的连接逻辑并不丰富。谢谢,这是可行的。我会留一点时间让其他人提出其他解决方案。真不敢相信我在这个问题上花了这么长时间,而答案却这么简单+1@JB尽管我认为你们可以确定选择是来自键盘还是鼠标,但我看到了JTable的简单代码,可以从ListSelection中得到