Java ChangeListener多次触发

时间:2013-01-02 18:41:07

标签: java swing jslider changelistener

我在滑块上有一个简单的changelistener。任何人都可以解释为什么当我点击一个新位置时它被解雇了3次。在我编写代码以保存某个地方的先前值以查看它是否真的发生变化之前,我想知道是否有其他方法可以解决这个问题。第一个跳跳器显示它是什么,下一个显示最后一个重复新值的新值。

        slider_1 = new JSlider();
    slider_1.addChangeListener(new ChangeListener() {
        public void stateChanged(ChangeEvent arg0) {
            if (fullyInitialized == 1) {
                if (comboBox_1.getSelectedIndex() < 1) {
                    SendData2Device(1);     
                }       
            }
        }
    });
    slider_1.setOrientation(SwingConstants.VERTICAL);

2 个答案:

答案 0 :(得分:5)

您需要检查更改是否为值调整。

链接到完整教程: http://docs.oracle.com/javase/tutorial/uiswing/components/slider.html

但这是重要的一点:

public void stateChanged(ChangeEvent e) {
    JSlider source = (JSlider)e.getSource();
    if (!source.getValueIsAdjusting()) {
        // Do what needs to occur here.
    }
}

基本上当getValueIsAdjusting()返回false时,用户已停止移动滑块。

答案 1 :(得分:2)

ChangeListener中有3个事件作为链的一部分,即mouseDownmouseUp以及更改本身。

使用getValueIsAdjusting

,您可以在更改完成后对事件采取行动
JSlider source = (JSlider)e.getSource();
if (!source.getValueIsAdjusting()) {
   ...
} 

请参阅:How to Write a Change Listener