如您所知,当您在jtable中选择一行(通过单击)时,不使用!getValueIsAdjusting
选择更改事件两次。如果使用键盘箭头选择行,则不会发生这种情况。要解决此问题,请检查getValueIsAdjusting
是否返回false。
我的问题是,如果我通过点击选择一行,但是在使用键盘箭头时不会触发两次事件? getValueIsAdjusting做了什么来解决它?
答案 0 :(得分:12)
作为JB Nizet链接到状态的javadoc,getValueIsAdjusting()
检查特定事件(更改)是否是链的一部分,如果是,它将返回true
。只有当指定的事件是链中的最后一个事件时,它才会返回false
。
在您的情况下,通过单击选择行实际触发两个事件:mouseDown
和mouseUp
事件,并且两者都发送到您的事件侦听器。如果您正确地实现了getValueIsAdjusting()
,只要值为true
就会返回,那么您只会对链中的最终事件采取行动,这是mouseUp
事件,当您放开鼠标左键。
Java教程包括捕获事件的an example,您可以使用它来记录选择事件并自己进行实验。删除event.getValueIsAdjusting()
检查中的返回以记录每个被触发的事件。
答案 1 :(得分:0)
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
带循环: AAAAAAA