如您所知,!getValueIsAdjusting
当您选择 jtable 中的一行(通过单击)时,不使用选择更改事件会触发两次。如果您使用键盘箭头选择一行,则不会发生这种情况。要解决它,请检查是否getValueIsAdjusting
返回 false。
我的问题是,如果我通过单击选择一行,为什么事件会触发两次,但在使用键盘箭头时不会触发?getValueIsAdjusting 做什么来解决它?
正如JB Nizet 链接到的javadocgetValueIsAdjusting()
所指出的,检查特定事件(更改)是否是链的一部分,如果是,它将返回true
. false
只有当指定的事件是链中的最后一个时,它才会返回。
在您的情况下,通过单击选择一行实际上会触发两个事件: amouseDown
和mouseUp
event 并且两者都被发送到您的事件侦听器。如果您正确实现getValueIsAdjusting()
了在值为 时返回true
,您将只对链中的最后一个事件采取行动,这是mouseUp
当您松开鼠标左键时触发的事件。
Java 教程包含一个捕获事件的示例,您可以使用它来记录选择事件并自己进行试验。删除event.getValueIsAdjusting()
检查的返回以记录每个触发的事件。
String interessen[]= {"aaaaaaa", "bbbbbbbb", "ccccccccc", "ddddddd"};
myList = new JList<>(interessen);
myList.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
if(!e.getValueIsAdjusting())
System.out.println(myList.getSelectedValue());
}
});
上面的代码显示了 getValueIsAdjusting 的作用,如果没有这些方法,可能会调用事件,例如。两次(取决于事件)。
单击 JList 的某些元素后没有 getValueIsAdjusting 循环的输出: aaaaaaa aaaaaaa
带循环:aaaaaa