我有一个JSlider设置我的节拍器的速度,从40 - 200,默认120是中间。
当用户点击节拍器按钮时,节拍器以JSlider上显示的速度播放 - 用户将滑块向右拖动,节拍器的速度增加,如果它们向左滑动则减小。< / p>
如何添加功能,以便用户双击JSlider按钮时,默认返回120 - 中间?
这是我的代码:
public Metronome() {
tempoChooser = new JSlider();
metronomeButton = new JToggleButton();
JLabel metText = new JLabel("Metronome:");
add(metText);
...
tempoChooser.setMaximum(200);
tempoChooser.setMinimum(40);
tempoChooser.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
tempoChooserStateChanged(evt);
}
});
add(tempoChooser);
...
}
private void tempoChooserStateChanged(javax.swing.event.ChangeEvent evt) {
final int tempo = tempoChooser.getValue();
if (((JSlider) evt.getSource()).getValueIsAdjusting()) {
setMetronomeButtonText(tempo);
} else {
processTempoChange(tempo);
}
}
提前感谢!
答案 0 :(得分:3)
这可以帮助你:http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html
您需要阅读并实现MouseListener。您可以使用int getClickCount()
来计算用户点击的次数,这有助于您阅读双击。
希望这有帮助!
答案 1 :(得分:1)
即使我没有看到问题,我猜您正在寻找MouseListener
。
答案 2 :(得分:0)
不是简单的工作,你必须添加javax.swing.Timer并在监听期间听老鼠一次或两次犯罪,for example
答案 3 :(得分:0)
我最近写了类似的东西,所以我可以区分单键和双键鼠标按钮:
private Timer timer;
@Override
public void mouseClicked(MouseEvent e) {
if(e.getButton() == MouseEvent.BUTTON1){
if (timer == null) {
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() { // timer expired before another click received, therefore = single click
this.cancel();
timer = null;
/* single-click actions in here */
}
}, (Integer) Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval"));
}
else { // received another click before previous click (timer) expired, therefore = double click
timer.cancel();
timer = null;
/* double-click actions in here */
}
}
}