我有一个简单的JSlider,附带ChangeListerner。下面的代码:JSlider事件触发两次
JSlider slider = new JSlider();
slider.setMinorTickSpacing(2);
slider.setMajorTickSpacing(20);
slider.setPaintLabels(true);
slider.setPaintTicks(true);
slider.setSnapToTicks(true);
slider.setOrientation(SwingConstants.VERTICAL);
contentPane.add(slider, BorderLayout.CENTER);
slider.addChangeListener(new SliderListener());
class SliderListener implements ChangeListener {
public void stateChanged(ChangeEvent e) {
JSlider source = (JSlider)e.getSource();
if (!source.getValueIsAdjusting()) {
System.out.println("boo");
}
}
}
正如你看到的,代码没有做多少,我要现在做的是确保事件只发射一次,因此我的事件仅仅是打印的东西到Eclipse中的控制台。
但上面的代码每次更换滑块时都会打印两次“boo”。我猜这与滑鼠上的鼠标释放有关,但无论如何,我希望它只触发一次事件,因此只打印一次。
我该如何做到这一点?
谢谢
您是否尝试过创建基本上只具有此滑块的程序,并查看是否可以重现该问题? – 2013-04-05 17:52:32
如果你把你的整个代码放在这里,理解你的代码会好很多。 – 2013-04-05 18:24:22
@ PM77-1我的整个程序就是这样!基本上是一个JSlider。我已经想出了一些更具体的行为信息。它只会这样做,如果我将滑块移动到刻度标签之间的位置。代码已更新。 – Ciwan 2013-04-05 18:46:32