2012-02-05 46 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