【问题标题】:ListSelectionEvent, firing an event when clicking the currently selected item in JListListSelectionEvent,点击JList中当前选中的项目时触发事件
【发布时间】:2014-04-10 01:54:35
【问题描述】:

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

}

【问题讨论】:

  • 您可以添加MouseListener 并观察点击。请注意,更改选择的单击将触发MouseListener 和您的ListSelectionListener。但是,将重要性分配给单击列表中已选择的项目似乎是一种不寻常的用户体验决策。你想做什么?
  • “我怎样才能从'x'重复触发事件..” ..为什么需要重复触发它?这似乎是一个经典的XY problem。您想实现什么实际功能
  • 我正在创建用户输入的命令的 JList。 JList 跟踪用户以前的命令,因此如果用户想要重复命令,他们应该能够从 JList 中单击它。 @JasonC​​pan>
  • @user3184240 这是有道理的。那么你最好的选择是添加一个MouseListener;尽管我建议在单击要执行某个操作时寻找双击而不是单击(特别是如果该操作更改数据并且不可撤消)。另请注意,您的ListSelectionListener 将在您使用键盘浏览列表时执行操作,这可能不是您想要的。
  • suggestion as answers here come wrong way,小心因为通过使用MosueWhatever你失去了与KeyEvents的交互,然后你失去了这些事件,没有问题可以测试值是否改变了,如你的代码中显示的那样(这个监听器触发两次 - 总是)

标签: java swing jlist listselectionlistener


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可以添加MouseListener 并观察点击。请注意,更改选择的单击将触发MouseListener 和您的ListSelectionListener

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

    不过,将重要性赋予对列表中已选择项目的点击似乎是一种不寻常的用户体验决策。

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

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

    【讨论】:

      猜你喜欢
      • 2011-02-13
      • 2016-10-24
      • 1970-01-01
      • 2016-09-19
      • 2016-12-30
      • 2018-07-23
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      相关资源
      最近更新 更多