让'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();
}
答案 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
并观看点击次数。请注意,更改选择的点击会同时触发MouseListener
和ListSelectionListener
。
另一种选择是立即清除ListSelectionListener
中的选择;这样,下一次点击将重新选择并重新触发,但您将失去使用键盘浏览项目的能力。
看起来,这似乎是一种不同寻常的用户体验决定,为列表中已选择项目的点击指定重要性。
根据您的问题评论添加:如果您转到MouseListener
路线,如果点击要执行操作,我建议您查找双击而不是单击(特别是如果操作更改数据和是不可撤销的)。另请注意,当您使用键盘浏览列表时,ListSelectionListener
将执行操作,这可能不是您想要的。
如果您的历史记录列表中的命令是键入,您还可以考虑使用下拉组合框命令输入和历史列表,其中有一个选择从历史记录填写命令文本但不执行。您还有机会从命令历史记录中添加自动完成功能。