OVH Cloud OVH Cloud

meilleur moyen?

8 réponses
Avatar
no.bcausse.spam
salut

Avec une interface graphique (bouton awt) j'augmente un compteur 1 clic
= +1 (basic), mais si je laisse le bouton enfoncé j'aimerai que le
compteur defile 2,3,4,5,6 .....
jusqu'au relachement du bouton.

connaissez vous un moyen simple?

lancer un thread au declenchement de MOUSE_PRESSED et le killer avec
MOUSE_RELEASED me parais disproportionné.

vos conseil?

--
bruno Causse
http://perso.wanadoo.fr/othello

8 réponses

Avatar
Phildes
voir classes Timer et TimerTask, elles peuvent peut-être t'aider.







Causse Bruno a écrit dans le message :
1gi20mo.j7z5fqiyoq68N%
salut

Avec une interface graphique (bouton awt) j'augmente un compteur 1 clic
= +1 (basic), mais si je laisse le bouton enfoncé j'aimerai que le
compteur defile 2,3,4,5,6 .....
jusqu'au relachement du bouton.

connaissez vous un moyen simple?

lancer un thread au declenchement de MOUSE_PRESSED et le killer avec
MOUSE_RELEASED me parais disproportionné.

vos conseil?

--
bruno Causse
http://perso.wanadoo.fr/othello


Avatar
Vincent Wiencek
Dans tes évènements de souris ... lors du clique (mouseClick) , tu lance un
Thread qui s'occupe d'incrémenter toues les 500 milli secondes par exemple
... (avec la méthode Thread.sleep)

Et lorsque tu relache la souris (mouseRelease) tu arrete le Thread ...

Ca devrait marcher

Vincent

"Causse Bruno" a écrit dans le message de
news:1gi20mo.j7z5fqiyoq68N%
salut

Avec une interface graphique (bouton awt) j'augmente un compteur 1 clic
= +1 (basic), mais si je laisse le bouton enfoncé j'aimerai que le
compteur defile 2,3,4,5,6 .....
jusqu'au relachement du bouton.

connaissez vous un moyen simple?

lancer un thread au declenchement de MOUSE_PRESSED et le killer avec
MOUSE_RELEASED me parais disproportionné.

vos conseil?

--
bruno Causse
http://perso.wanadoo.fr/othello


Avatar
no.bcausse.spam
Vincent Wiencek wrote:

Dans tes évènements de souris ... lors du clique (mouseClick)


mousePressed,

, tu lance un
Thread qui s'occupe d'incrémenter toues les 500 milli secondes par exemple
... (avec la méthode Thread.sleep)

Et lorsque tu relache la souris (mouseRelease) tu arrete le Thread ...

Ca devrait marcher

Vincent

"Causse Bruno" a écrit dans le message de
news:1gi20mo.j7z5fqiyoq68N%


c'est la solution a laquelle j'avais pensé. Malheureusement le demarrage
du thread ne se fait que lorsque le bouton est relaché :( (interface
bloquante?????), et donc cette solution ne donne pas le bon resultat.

je suis un peu sec sur le sujet, si vous avez d'autre idee???

PS : etre compatible avec une VM 1.1.8
--
bruno Causse
http://perso.wanadoo.fr/othello

Avatar
Christophe M
Causse Bruno wrote:
Vincent Wiencek wrote:


Dans tes évènements de souris ... lors du clique (mouseClick)



mousePressed,


, tu lance un
Thread qui s'occupe d'incrémenter toues les 500 milli secondes par exemple
... (avec la méthode Thread.sleep)

Et lorsque tu relache la souris (mouseRelease) tu arrete le Thread ...

Ca devrait marcher

Vincent

"Causse Bruno" a écrit dans le message de
news:1gi20mo.j7z5fqiyoq68N%



c'est la solution a laquelle j'avais pensé. Malheureusement le demarrage
du thread ne se fait que lorsque le bouton est relaché :( (interface
bloquante?????), et donc cette solution ne donne pas le bon resultat.

je suis un peu sec sur le sujet, si vous avez d'autre idee???

PS : etre compatible avec une VM 1.1.8


Hé bien, comme disais Phildes.
Tu lance un Timer "générique" qui à chaque déclenchement va vérifier une
variable boolean globale et incrémente si nécessaire.

Dans le moussepressed tu fixe le flag à true (éventuellement tu remets
le compteur à 0 avant)
dans le mousserelease, tu fixes à false

après le release, le compteur à été incrémenté du nombre de
(milli/centi/déci)secondes/minutes... que le boutton était "pressé"


Avatar
no.bcausse.spam
Christophe M <mccricri_at_hotmail.com> wrote:

Hé bien, comme disais Phildes.
Tu lance un Timer "générique" qui à chaque déclenchement va vérifier une
variable boolean globale et incrémente si nécessaire.

Dans le moussepressed tu fixe le flag à true (éventuellement tu remets
le compteur à 0 avant)
dans le mousserelease, tu fixes à false

après le release, le compteur à été incrémenté du nombre de
(milli/centi/déci)secondes/minutes... que le boutton était "pressé"


ca ne change pas le probleme :( le thread "compteur" m'a pas la main
tant que le bouton est enfoncé

dans la classe interface utilisateur

.../...
pred = new Button(" < ");
pred.addMouseListener(new MouseAdapter() {

public void mousePressed(MouseEvent e) {
othellier.scroling(false);
}

public void mouseReleased(MouseEvent e) {
othellier.interrupt();
}
}
.../...

dans la classe visualisation

private Thread process = new Thread(this);
private volatile boolean forward;
private volatile boolean runFlag;

public Game(){
setSize(310, 355);
process.start();
}

.../...

public void scroling(boolean f) {
forward = f;
runFlag = true;
}

public void interrupt() {
runFlag = false;
}

public void run() {

System.err.println("lancement");

while(true) {

if(runFlag)
if(forward)
doMove();
else
undoMove();

try {
Thread.sleep(200);
} catch(InterruptedException event)
{System.err.println(event.getMessage());};

}

}



--
bruno Causse
http://perso.wanadoo.fr/othello

Avatar
Christophe M
Causse Bruno wrote:

Christophe M <mccricri_at_hotmail.com> wrote:


Hé bien, comme disais Phildes.
Tu lance un Timer "générique" qui à chaque déclenchement va vérifier une
variable boolean globale et incrémente si nécessaire.

Dans le moussepressed tu fixe le flag à true (éventuellement tu remets
le compteur à 0 avant)
dans le mousserelease, tu fixes à false

après le release, le compteur à été incrémenté du nombre de
(milli/centi/déci)secondes/minutes... que le boutton était "pressé"



ca ne change pas le probleme :( le thread "compteur" m'a pas la main
tant que le bouton est enfoncé





ça m'a tout de même l'air bizarre ce truc, un thread c'est un processus
qui tourne à côté, il devrait pas être bloqué par autre chose.
Déjà j'utiliserai des synchronized() pour les modifications des
variables booleans.

Et pq les mettre volatile ? ça sert à quoi ?


Avatar
no.bcausse.spam
Christophe M <mccricri_at_hotmail.com> wrote:

ça m'a tout de même l'air bizarre ce truc, un thread c'est un processus
qui tourne à côté, il devrait pas être bloqué par autre chose.


ok, mais bon

il doit bien etre possible de realiser ce truc (genre avance
rapide/retour rapide d'un magnetoscope)

par ex: regardes mon applet

http://perso.wanadoo.fr/othello/applet.html

tu bloques les pendules pendant que tu maintiens appuyé un bouton.
alors que les deux action n'ont rien a voir.

pour info la pendule est un demon.


Déjà j'utiliserai des synchronized() pour les modifications des
variables booleans.

Et pq les mettre volatile ? ça sert à quoi


chaque thread peut faire une copie de ses propres variables
(optimisation) le modificateur volatile force la vm a utiliser une seule
copie (l'originale) de la variable. un peu comme un synchronised.




--
bruno Causse
http://perso.wanadoo.fr/othello

Avatar
Christophe M
Causse Bruno wrote:
Christophe M <mccricri_at_hotmail.com> wrote:


ça m'a tout de même l'air bizarre ce truc, un thread c'est un processus
qui tourne à côté, il devrait pas être bloqué par autre chose.



ok, mais bon

il doit bien etre possible de realiser ce truc (genre avance
rapide/retour rapide d'un magnetoscope)

par ex: regardes mon applet

http://perso.wanadoo.fr/othello/applet.html

tu bloques les pendules pendant que tu maintiens appuyé un bouton.
alors que les deux action n'ont rien a voir.


Et pourtant, non.
Chez moi, si je reste appuyé sur le boutton annuler, le pendule continue
son décompte du temps.

Le problème vient peut-être de la version de la JVM.
Moi j'utilise la 1.4.02 de Sun


pour info la pendule est un demon.




Déjà j'utiliserai des synchronized() pour les modifications des
variables booleans.

Et pq les mettre volatile ? ça sert à quoi



chaque thread peut faire une copie de ses propres variables
(optimisation) le modificateur volatile force la vm a utiliser une seule
copie (l'originale) de la variable. un peu comme un synchronised.

Ben merci, j'en apprends encore un peu chaque jour :-)

C'est nouveau avec la version 1.5 ou ça existait déjà ?
(Oui, je sais, je vais chercher sur le net ;-)