Problème avec des listeners qui se superposent

ldumont Messages postés 53 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 5 mars 2008 - 27 févr. 2008 à 17:15
ldumont Messages postés 53 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 5 mars 2008 - 28 févr. 2008 à 14:15
Bonjour,

j'ai crée un MouseListener de telle façon que lorsque je relache le curseur de mon JSlider, grâce à un Timer, le curseur redescende.
Le problème c'est que si je fais cette opération plusieurs fois de suite, les listener se superposent et du coup le curseur redescend de plus en plus vite.

Voici mon code :


final estaca.util.Timer horloge = new estaca.util.Timer(500) ;
horloge.launch();

final JSlider pedale_frein = new JSlider(JSlider.VERTICAL,MIN,MAX,2);

pedale_frein.setMajorTickSpacing(25);
pedale_frein.setMinorTickSpacing(5);
pedale_frein.setPaintTicks(true);
pedale_frein.setPaintLabels(true);
pedale_frein.setValue(0);
pedale_frein.setBorder(BorderFactory.createEmptyBorder(0,0,0,0));

pedale_frein.addMouseListener(new MouseListener()
{
public void mousePressed(MouseEvent e) { }
public void mouseClicked(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {

JSlider source = (JSlider)e.getSource();
Integer valeur = (Integer)source.getValue();
int v = valeur.intValue();
//System.out.println("valeur: "+v);

horloge.addTimerListener(new TimerListener()
{ public void periodPerformed(TimerEvent e)
{
int v = pedale_frein.getValue();
v=v-1;
pedale_frein.setValue(v);
System.out.println("valeur: "+v);

}

});
//horloge.removeListener(this);
}
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
});


Je vois pas comment faire pour éviter ça, jai cherché à détruire le listener après chaque utilisation mais je n'ai pas réussi.
A voir également:

2 réponses

Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
27 févr. 2008 à 21:48
Salut:

Pour supprimer un écouteur d'événements il faut utiliser la méthode remove<TypeListener>Listener().

Il ne faut pas placer cette méthode n'importe comment comme tu l'avais fait.

Ou bien pour ne pas utiliser cette méthode, il faut définir une condition pour exécuter une méthode d'un listener.

<hr size="2" width="100%" />[Félicité de Lamennais] Le plus puissant de tous les leviers, c'est la volonté.
0
ldumont Messages postés 53 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 5 mars 2008
28 févr. 2008 à 14:15
Je ne comprends pas très bien ce que tu veux dire...
Je ne vois vraiment pas comment faire :(
Jai essayé de mettre des conditions mais ça ne marche toujours pas.
0
Rejoignez-nous