2012-02-05 2 views
3

J'ai un JSlider qui définit la vitesse de mon métronome, de 40 à 200, où 120 est la valeur par défaut, au milieu. Lorsque l'utilisateur clique sur le bouton de métronome, le métronome joue à la vitesse affichée sur le JSlider: l'utilisateur fait glisser le curseur vers la droite, la vitesse du métronome augmente et diminue si vous le faites glisser vers la gauche.Java: Double-cliquez sur un JSlider pour réinitialiser

Comment ajouter des fonctionnalités de sorte que si l'utilisateur double-clique sur le bouton JSlider, il revient par défaut à 120 - au milieu?

Voici mon code:

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); 
    } 
} 

merci à l'avance!

Répondre

3

Cela devrait vous aider: http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html

Vous devez lire à ce sujet et mettre en œuvre MouseListener. Vous pouvez utiliser int getClickCount() pour compter combien de fois l'utilisateur a cliqué, ce qui vous aidera à lire les doubles-clics.

Espérons que cela aide!

+1

merci, c'était beaucoup plus facile que je pensais! –

1

Même si je ne vois pas une question, mon gues est que vous recherchez MouseListener.

+0

merci @stryba mais comment l'implémenterais-je? –

+1

Voir la réponse de m92, et s'il vous plaît ne pas utiliser l'une des réponses impliquant des minuteries. – stryba

0

j'ai écrit récemment quelque chose de similaire pour que je puisse faire la différence entre simple et double gauche clics-bouton de la souris:

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

S'il vous plaît non. 'getClickCount()' est votre ami. – stryba

+0

@stryba c'est vrai, bien que getClickCount() retournera toujours deux clics simples pour chaque double-clic, donc j'ai dû faire la différence entre ces deux clics simples et un simple clic «réel». – c24w

+0

vous avez raison, dans ce cas, vous devriez impliquer un 'Timer', même si je pense que cela devrait être en quelque sorte abstrait/abstrait par' Swing'. – stryba

Questions connexes