[英]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
并观察点击次数。 请注意,更改选择的单击将同时触发MouseListener
和ListSelectionListener
。
另一种选择是立即清除ListSelectionListener
的选择; 这样,下一次点击将重新选择并重新触发,但您将无法使用键盘浏览项目。
但是,这似乎是一种不寻常的用户体验决定,用于为列表中已选择项目的点击指定重要性。
根据您的问题评论添加:如果您使用MouseListener
路径,如果单击将执行操作(特别是如果操作更改数据且不可撤消),我建议您查找双击而不是单击。 另请注意,当您使用键盘在列表中导航时, ListSelectionListener
将执行操作,这可能不是您想要的。
如果键入历史列表中的命令,则还可以考虑对命令条目和历史列表使用下拉组合框,其中历史记录中的选择填充命令文本但不执行。 您还有机会从命令历史记录添加自动完成功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.