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

时间:2014-03-07 04:09:30

标签: java swing jlist listselectionlistener

让'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();

}

2 个答案:

答案 0 :(得分:3)

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);

答案 1 :(得分:1)

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

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

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

根据您的问题评论添加:如果您转到MouseListener路线,如果点击要执行操作,我建议您查找双击而不是单击(特别是如果操作更改数据和是不可撤销的)。另请注意,当您使用键盘浏览列表时,ListSelectionListener将执行操作,这可能不是您想要的。

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