繁体   English   中英

ListSelectionEvent,单击JList中当前选定的项时触发事件

[英]ListSelectionEvent, firing an event when clicking the currently selected item in JList

设'x'为JList中的项。 当我第一次点击它时,事件会触发,当我再次单击它时,事件不会触发。 我必须点击其他项目,然后回到'x'。

如何从'x'重复发射事件而不必处理其他项目。

这是我的代码:

public void valueChanged(ListSelectionEvent e) {

    if (e.getValueIsAdjusting() == false) {

       if (list.getSelectedIndex() == -1) {} else {
            String clicked = (String)list.getSelectedValue();



            //method to fire is here

        }
    }
    updateDisplays();

}

ListSelectionListener反映了对列表选择的更改,您可以使用MouseListener代替......

例如...

MouseListener ml = new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent evt) {
        if (SwingUtilities.isLeftMouseButton(evt) && evt.getClickCount() == 1) {
            if (list.getSelectedIndex() != -1) {
                int index = list.locationToIndex(evt.getPoint());
                System.out.println("You clicked item  @ " + index);
            }
        }
    }
}

list.addMouseListener(ml);

您可以添加MouseListener并观察点击次数。 请注意,更改选择的单击将同时触发MouseListenerListSelectionListener

另一种选择是立即清除ListSelectionListener的选择; 这样,下一次点击将重新选择并重新触发,但您将无法使用键盘浏览项目。

但是,这似乎是一种不寻常的用户体验决定,用于为列表中已选择项目的点击指定重要性。

根据您的问题评论添加:如果您使用MouseListener路径,如果单击将执行操作(特别是如果操作更改数据且不可撤消),我建议您查找双击而不是单击。 另请注意,当您使用键盘在列表中导航时, ListSelectionListener将执行操作,这可能不是您想要的。

如果键入历史列表中的命令,则还可以考虑对命令条目历史列表使用下拉组合框,其中历史记录中的选择填充命令文本但不执行。 您还有机会从命令历史记录添加自动完成功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM