OVH Cloud OVH Cloud

jspinner et mouseReleased

1 réponse
Avatar
Daniel MALIK
je souhaite qu' avec la souris je puisse incrémenter (ou décrémenter) le
jspinner et seulement après avoir relaché la souris envoyer ma méthode qui
met à jour mon dessin


voici le code


SpinnerNumberModel bandeColorSpinner=new
SpinnerNumberModel(2.1,0d,10d,0.1d);

final JSpinner spinnerBande=new JSpinner(bandeColorSpinner);
spinnerBande.addChangeListener(new ChangeListener()
{
public void stateChanged(ChangeEvent event)
{
bandeColor = ((Double)
spinnerBande.getValue()).doubleValue();
//displayFunction (lastFunction);
}
}
);

spinnerBande.addMouseListener(new MouseAdapter ()
{
public void mouseReleased(MouseEvent me)
{
displayFunction (lastFunction);
}
}
);





mouseReleased n'est pas invoqué !
c'est

displayFunction (lastFunction)

qui met à jour mon graphique .
Sans spinnerBande.addMouseListener..... et en décommentant display....
mon jspinner fonctionne bien, mais bien sûr il met à jour mon graphique à
chaque clic : ce que je ne veux pas ! car dans certaines conditions, mes
calculs sont très longs

merci de l'aide

1 réponse

Avatar
Yves Martin
"Daniel MALIK" writes:

qui met à jour mon graphique .
Sans spinnerBande.addMouseListener..... et en décommentant display....
mon jspinner fonctionne bien, mais bien sûr il met à jour mon graphique à
chaque clic : ce que je ne veux pas ! car dans certaines conditions, mes
calculs sont très longs


Pourquoi ne pas utiliser un ChangeListener au lieu du MouseListener ?

Si tes calculs de graphiques sont trop longs, il faut envisager un
modèle asynchrone avec un thread en tache de fond:

- lors d'un ChangeEvent, tu dis au Thread qu'une nouvelle valeur est
dispo - le thread se met en wait pendant 1 ou 2 secondes

- Tout nouveau ChangeEvent réveille le Thread, lui donne une nouvelle
valeur, et il dort de nouveau pour 1 ou 2 secondes

- Au bout des 1/2 secondes (sans ChangeEvent), alors le Thread
commence son travail de dessin... sans pour autant bloquer
l'interface graphique, puisque c'est en tache de fond

Comme cela, le fait de modifier plusieurs fois le JSpinner, le dessin
ne commence qu'après 1/2 secondes sans modification du JSpinner.

--
Yves Martin