6

ご存じのとおり!getValueIsAdjusting、jtable 内の行を (クリックして) 選択するときに使用しないと、選択変更イベントが 2 回発生します。キーボードの矢印を使用して行を選択した場合は発生しません。それを解決するには、getValueIsAdjustingfalse を返すかどうかを確認します。

私の質問は、行をクリックして選択するとイベントが 2 回発生するのに、キーボードの矢印を使用すると発生しないのはなぜですか? そして、それを解決するために getValueIsAdjusting は何をしますか?

4

2 に答える 2

13

JB Nizet がリンクしたjavadocgetValueIsAdjusting()が述べているように、特定のイベント (変更) がチェーンの一部であるかどうかをチェックし、そうであれば を返しtrueます。false指定されたイベントがチェーンの最後のイベントである場合にのみ返されます。

mouseDownあなたの場合、クリックして行を選択すると、実際には aとeventの 2 つのイベントが発生しmouseUp、両方がイベント リスナーに送信されます。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());

        }
    });

The code above shows what getValueIsAdjusting do, without these method an event may be called eg. two times (it depends of event).

Output without getValueIsAdjusting loop after clicking on some element of JList: aaaaaaa aaaaaaa

with loop: aaaaaaa

于 2013-10-10T08:29:46.760 に答える