2

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

2 回答 2

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 时,用户已经停止移动滑块。

于 2013-01-02T18:52:36.083 回答
2

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

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

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

请参阅:如何编写更改侦听器

于 2013-01-02T18:56:06.747 回答