Bonjour,
j'utilise la classe Robot pour me déplacer automatiquement sur le panel. Mais j'aimerais qu'au clic de l'utilisateur, un point soit créé.
J'ai un thread qui exécute le code du robot. Et j'appelle ce thread dans mon MouseClicked, juste avant que l'utilisateur puisse cliquer pour sélectionner son point. Seulement, le clic, ne fait rien, le robot continue à se déplacer automatiquement. Est ce que quelqu'un saurait comment je peux régler ce problème?
Voici mon code:
thread implémentant le robot
import java.awt.Robot; public class FirstThread extends Thread { PanelParallèle p; boolean actif; public FirstThread(PanelParallèle p) { this.p =p; this.actif=false; } public void run() { actif=true; while(actif==true){ try{ Robot r= new Robot(); for (int i = 0; i < 300; i++) { for (int j = 0; j < 300; j++) { if ((j - (p.coefDir2 * i) - (p.absOr2 * 20)) < 0.5f && (j - (p.coefDir2 * i) - (p.absOr2 * 20)) > -0.5f) r.mouseMove((int)(i+p.getLocationOnScreen().getX()),(int)(j+p.getLocationOnScreen().getY())); } } //Thread.yield(); } catch(Exception ex){ System.out.println("Exception :"+ex.getMessage()); } } } public void setActif(boolean a){ actif=a; } }
méthode mouseClicked qui exécute le thread
public void mouseClicked(MouseEvent e) { Graphics g = getGraphics(); if(etape==5){ System.out.println("dans 6ème étape"); thr1 = new FirstThread(this); //SwingUtilities.invokeLater(thr1); thr1.start(); System.out.println("fin thread"); } if(etape==6){ System.out.println("dernière étape"); thr1.setActif(false); System.out.println(thr1.actif); thr1=null; p4 = new MonPoint(e.getX(),e.getY()); System.out.println("p4 x" +p4.x); System.out.println("p4 y" +p4.y); p4.affiche(g); li.add(p4); forme.add(p4); Ligne l2 = new Ligne(li.size()); MonPoint[] tab = new MonPoint[li.size()]; for (int k=0; k<li.size(); k++){ tab[k]=li.get(k); l2.points=tab; } l2.affiche(g); forme.add(l2); } etape++; }
Bonjour,
je reviens sur mon problème avec la classe java.awt.Robot. Etant donné que je n'ai eu aucune réponse, je met tout mon code en espérant que quelqu'un pourra trouver ce qui ne va pas parce que ça fait plus d'une semaine que je n'y arrive pas.
Classe du thread
Classe qui définit un point
Classe qui définit une ligne
Classe geometrie
Classe qui permet de dessiner
Alors, les classes Ligne, MonPoint et Geometrie ne présentent aucun problème. Je oense que le problème doit se situer au niveau du code de mon thread ou dans la méthode mouseClicked() lorsque j'appelle le thread.
Le problème qui se pose est en fait qu'au clic après etape==5, je dois pouvoir créer mon point et arrêter le thread. Mais je n'y arrive pas, c'est après plusieurs tentatives de clics que j'arrive à créer le point et de ce fait, il n'est pas créé à l'endroit voulu parce que je ne sais pas exactement quand le clic est pris en compte.
J'explique vite fiat, une fois qu'on exécute Parallèle, il suffit juste de cliquer à chaque fois sur le panel, et à chaque clic, on passe à l'étape suivante.
Si jamais quelqu'un arrive à voir à quoi est dû mon problème, ça m'aiderait beaucoup.
Merci d'avance pour l'aide.
perluce
Bonjour Perluce
J'ai regardé ton code de façcon assez brève, je l'avoue
et je ne peux faire qu'une supposiiton sur ce qui ne va pas
à savoir le "Graphics g = getGraphics()" sur lequel tu bases
ton paint après.
Bon ceci j'ai repris une des petites applis que j'avais codé et
j'espère que tu y trouveras ce que tu veux...
Quand le curseur se met a bouger tt seul tu cliques et des points
apparaissent...
Cette appli est proche de celle dont tu as fait voir le code donc
ca devrait être ressemblant :
Bonne chance
Hmm ah ui comme jai un peu merdouillé dans les indices
ca n affichera des points qu au second/troisième clic
après le déplacement de la souris:)
Mais ca va pas arréter le valeureux guerrier que tu es :D