【问题标题】:Java ChangeListener firing multiple timesJava ChangeListener 多次触发
【发布时间】:2013-01-02 18:41:06
【问题描述】:

我在滑块上有一个简单的更改监听器。谁能解释为什么当我点击一个新位置时它会被触发 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);

【问题讨论】:

  • JSlider knob not updating (basic Java) 的可能副本。在ChangeListener 里面你必须检查if (!slider.getValueIsAdjusting()),因为这个方法在值改变时被调用,因此如果值改变10 次,它将被调用10 次

标签: java swing jslider changelistener


【解决方案1】:

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

完整教程的链接: 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 时,用户已经停止移动滑块。

【讨论】:

  • 在 if 里面,你说过我把需要做的事情放在那里。我有System.out.println(sliderValue);,但它打印了两次。我只希望它打印一次!我该怎么做?
【解决方案2】:

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

更改完成后,您可以使用 getValueIsAdjusting 对事件采取行动:

JSlider source = (JSlider)e.getSource();
if (!source.getValueIsAdjusting()) {
   ...
} 

见:How to Write a Change Listener

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 2018-12-16
    相关资源
    最近更新 更多