0

例如,我有一个名为 cross_list 的 JList,其中包含一个项目列表,现在我将 ListSelectionListener 添加到该 JList

考虑这些代码行:

class AcrossListHandler implements ListSelectionListener {
    @Override
    public void valueChanged(ListSelectionEvent e) {
        JList lsm = (JList) e.getSource();
        int selected_index = lsm.getMaxSelectionIndex();            
            if (selected_index >= 0){
                System.out.println(selected_index);
            }
        }  
     }       
}

我有一个问题:为什么“System.out.println()”行打印 2 个 selected_value 值,而我只是在 JList 中的索引上单击 1 次???

4

1 回答 1

2

由 ui-delegate 注册的 listSelectionListener 将选择更改标记为在 mousePressed 上进行中,并在 mouseReleased 中重置该标志,使其成为最终状态。如果您只想对最终确定的更改做出反应,您可以查询 valueIsAdjusting 属性,如果为 true,则不执行任何操作:

class AcrossListHandler implements ListSelectionListener {

    @Override
    public void valueChanged(ListSelectionEvent e) {
        if (e.getValueIsAdjusting()) return;
        // do stuff
    }
}
于 2013-04-19T15:22:38.853 回答