2010-12-06 9 views
1
class AngleSlider implements ChangeListener { 
     public void stateChanged(ChangeEvent e) { 
     JSlider source = (JSlider) e.getSource(); 
     if (!source.getValueIsAdjusting()) { 

      double dAngle = (double)source.getValue(); 
      pnlCannon.dCannonAngle=Math.toRadians(dAngle); 
      pnlCannon.repaint(); 

     } 
    } 
} 

Ceci est notre écouteur d'événement actuel. Y at-il un auditeur différent requis pour faire ce que je veux?Comment appeler un actionlistener pendant que le curseur bouge, pas seulement quand je lâche la souris?

Répondre

2

Non, vous devrez seulement supprimer la vérification getValueIsAdjusting(). Donc, cela va repeindre votre canon lorsque vous déplacez votre souris:

class AngleSlider implements ChangeListener { 
    public void stateChanged(ChangeEvent e) { 
     JSlider source = (JSlider) e.getSource(); 

     double dAngle = (double)source.getValue(); 
     pnlCannon.dCannonAngle=Math.toRadians(dAngle); 
     pnlCannon.repaint(); 
    } 
} 

Ceci est un autre exemple qui montre le même, il imprime la valeur du curseur que vous déplacez:

public static void main(String[] args) { 

    JFrame frame = new JFrame("Test"); 

    JSlider slider = new JSlider(); 

    slider.addChangeListener(new ChangeListener() { 
     @Override 
     public void stateChanged(ChangeEvent ce) { 
      System.out.println(((JSlider) ce.getSource()).getValue()); 
     } 
    }); 

    frame.add(slider); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(400, 300); 
    frame.setVisible(true); 
} 
+0

MERCI! Votre premier code a parfaitement fonctionné! Nous nous sentons comme des idiots implémentant if (! Source.getValueIsAdjusting()) en premier lieu! – user525479

0

Le !source.getValueIsAdjusting() empêche l'exécution de la forme de code de mise à jour.

Pourquoi pensez-vous que cette condition est nécessaire?