我有一個簡單的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