0

たとえば、アイテムのリストを含む across_list という名前の JList があり、その JList に ListSelectionListener を追加するとします。

次のコード行を考慮してください。

class AcrossListHandler implements ListSelectionListener {
    @Override
    public void valueChanged(ListSelectionEvent e) {
        JList lsm = (JList) e.getSource();
        int selected_index = lsm.getMaxSelectionIndex();            
            if (selected_index >= 0){
                System.out.println(selected_index);
            }
        }  
     }       
}

質問があります: JList のインデックスを 1 回クリックするだけで、「System.out.println()」行が selected_value の 2 つの値を出力するのはなぜですか ???

4

1 に答える 1

2

ui-delegate によって登録された listSelectionListener は、選択の変更を mousePressed で進行中としてマークし、mouseReleased でそのフラグをリセットして最終的なものにします。ファイナライズされた変更にのみ対応したい場合は、valueIsAdjusting プロパティをクエリし、true の場合は何もしません。

class AcrossListHandler implements ListSelectionListener {

    @Override
    public void valueChanged(ListSelectionEvent e) {
        if (e.getValueIsAdjusting()) return;
        // do stuff
    }
}
于 2013-04-19T15:22:38.853 に答える