6

如您所知,!getValueIsAdjusting当您选择 jtable 中的一行(通过单击)时,不使用选择更改事件会触发两次。如果您使用键盘箭头选择一行,则不会发生这种情况。要解决它,请检查是否getValueIsAdjusting返回 false。

我的问题是,如果我通过单击选择一行,为什么事件会触发两次,但在使用键盘箭头时不会触发?getValueIsAdjusting 做什么来解决它?

4

2 回答 2

13

正如JB Nizet 链接到的javadocgetValueIsAdjusting()所指出的,检查特定事件(更改)是否是链的一部分,如果是,它将返回true. false只有当指定的事件是链中的最后一个时,它才会返回。

在您的情况下,通过单击选择一行实际上会触发两个事件: amouseDownmouseUpevent 并且两者都被发送到您的事件侦听器。如果您正确实现getValueIsAdjusting()了在值为 时返回true,您将只对链中的最后一个事件采取行动,这是mouseUp当您松开鼠标左键时触发的事件。

Java 教程包含一个捕获事件的示例,您可以使用它来记录选择事件并自己进行试验。删除event.getValueIsAdjusting()检查的返回以记录每个触发的事件。

于 2012-06-02T08:58:39.707 回答
1
    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

于 2013-10-10T08:29:46.760 回答