我在滑块上有一个简单的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);
答案 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个事件作为链的一部分,即mouseDown
,mouseUp
以及更改本身。
使用getValueIsAdjusting
:
JSlider source = (JSlider)e.getSource();
if (!source.getValueIsAdjusting()) {
...
}