【发布时间】: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 中单击它。 @JasonCpan>
-
@user3184240 这是有道理的。那么你最好的选择是添加一个
MouseListener;尽管我建议在单击要执行某个操作时寻找双击而不是单击(特别是如果该操作更改数据并且不可撤消)。另请注意,您的ListSelectionListener将在您使用键盘浏览列表时执行操作,这可能不是您想要的。 -
suggestion as answers here come wrong way,小心因为通过使用MosueWhatever你失去了与KeyEvents的交互,然后你失去了这些事件,没有问题可以测试值是否改变了,如你的代码中显示的那样(这个监听器触发两次 - 总是)
标签: java swing jlist listselectionlistener