2012-02-05 45 views
3

我有一个JSlider,设置我的节拍器的速度,从40 - 200,其中120是默认值,在中间。Java:双击一个JSlider重置

当用户单击节拍器按钮时,节拍器以JSlider上显示的速度播放 - 用户将滑块向右拖动,节拍器的速度增加,如果向左滑动,速度会降低。

如何添加功能,以便如果用户双击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); 
    } 
} 

在此先感谢!

回答

1

即使我没有看到一个问题,我的感觉是你正在寻找MouseListener

+0

谢谢@stryba,但我将如何实现它? – 2012-02-05 15:17:49

+1

查看m92的答案,请不要使用涉及定时器的答案之一。 – stryba 2012-02-05 16:53:15

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 */ 
     } 
    } 
} 
+1

请不要。 'getClickCount()'是你的朋友。 – stryba 2012-02-05 16:51:33

+0

@stryba没错,尽管getClickCount()每次双击都会返回两次单击,所以我需要区分这两次单击和“实际”单击。 – c24w 2012-02-07 17:02:52

+0

你是对的,在这种情况下,你不得不涉及一个'Timer',尽管我认为这应该以某种方式被'Swing'抽象/抽象。 – stryba 2012-02-07 20:13:31