getValueIsAdjusting究竟做了什么?

时间:2012-06-02 06:46:43

标签: java swing jtable

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

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

2 个答案:

答案 0 :(得分:12)

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

在您的情况下,通过单击选择行实际触发两个事件:mouseDownmouseUp事件,并且两者都发送到您的事件侦听器。如果您正确地实现了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