méthode qui tourne en boucle en dehors de l'EDT, d'où ton problème de clignotement.
méthode qui tourne en boucle en dehors de l'EDT, d'où ton problème de clignotement.
Mais tu as jeté un coup d'oeil au moins à AbsoluteImagePanel : je n'ai pas de méthode a qui tu passes des panels et qui te fabriquent des panels que tu ajoutes ensuite au panel que tu as précédemment passé en paramètre à la méthode fabrication. Si tu appelles ça simple !
C'est ce qu'on t'a dit de faire, oui...
Dans ton code, par contre :
On voit que tu ajoutes labImgObstacle et que tu l'enlèves juste après : ça me semble logique que si on l'ajoute puis on l'enlève, qu'il soit à un moment, puis qu'il n'y soit plus au final. En plus, je ne sais pas ce que fait fctFond, mais si le but est de passer le fond au dessus de l'avion, donc d'afficher le ciel au dessus de l'avion, juste pour qu'on ne voit jamais l'avion, c'est bien ce qu'il faut faire, cependant ce n'est pas utile, puisque tu l'enlèves juste après l'avion.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 panPrincipale.add(labImgObstacle); panPrincipale.setComponentZOrder(labImgObstacle, 0); principale.fctFond(panPrincipale); panPrincipale.remove(labImgObstacle);
Pourquoi ne reprends tu pas simplement mon code ?
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
1-
Dsl à tt le monde j'ai Edit mon dernier message ... je ne savais pas que vs l'aviez lu
2-
Je me ss rendu compte d'un probléme.
Donc voila j'essaye en utilisant "remove" pour effacer le dessin que je vien de dessiner.Mais j'ai toujours cette trainée derrière l'avion pk?
Voici mon code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 //Image Obstacle private Image imgObstacle =new Image("C:\\Users\\antoine\\Desktop\\imgProjetObstacle.JPG"); private JLabel labImgObst =null;private JLabel labImgObstTmp =null;//Obs=obstacle private int i=0;//pour que le tirage au sort ne se fasse qu'une fois public int[] fctDessinerObstacle(JFrame fenPrincipale, JPanel panPrincipale,int posX,int posY) { if(i==0){//position de depart de l'img int posXDepart=fctHasard(0,fenPrincipale.getWidth()); int posYDepart=82; posX=posXDepart;posY=posYDepart; i++; } labImgObst=imgObstacle.fctAfficherImg(panPrincipale, posX,posY,50, 82); panPrincipale.add(labImgObst); panPrincipale.setComponentZOrder(labImgObst, 0); int tabPos[]=new int [2]; tabPos[0]=posX;tabPos[1]=posY; return tabPos; } //Mouvement Obstacle public void fctMouvement(ActionEvent e ,JFrame fenPrincipale, JPanel panPrincipale) { int tabPos []=fctDessinerObstacle(fenPrincipale, panPrincipale, posXo, posYo); posXo=tabPos[0];posYo=tabPos[1]; int continuer = 0;//boolean continuer=true; System.out.println("indice tabPos[0]:"+tabPos[0]+" ,tabPos[1]:"+tabPos[1]+" -PosXo="+posXo+" posYo="+posYo);//controle posYo++; System.out.println("-coordonnees X:"+posXo+" ,y:"+posYo + " -Compteur="+continuer);//controle if(posYo==fenPrincipale.getHeight()){ System.out.println("**************ALERTE! posYo=Hauteur du Label qui le limite**************");//controle posYo=82; posXo=fctHasard(0,fenPrincipale.getWidth()); } fctDessinerObstacle(fenPrincipale, panPrincipale, posXo, posYo); panPrincipale.remove(labImgObst); } public void fctMouvement1(JFrame fenPrincipale, JPanel panPrincipale){ int delay = -100; new Timer(delay, e-> this.fctMouvement(e, fenPrincipale, panPrincipale)).start(); }
3-
Je n'ai jamais voulu faire ça.Il n'y a qu'un seul panel sur lequel on place plusieurs JLabel.C'est ça le principe.je n'ai pas de méthode a qui tu passes des panels et qui te fabriquent des panels que tu ajoutes ensuite au panel que tu as précédemment passé en paramètre à la méthode fabrication. Si tu appelles ça simple !
@Tchize//
Oui tu as raison à force on ne voit presque plus l'image car elle apparait 1/100second et plus le programme avance plus c'est pire...
Au lieu de :
Fait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 fctDessinerObstacle(fenPrincipale, panPrincipale, posXo, posYo); panPrincipale.remove(labImgObst);
Ce que j'ai déjà dit !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 if ( labImgObst!=null ) { panPrincipale.remove(labImgObst); } fctDessinerObstacle(fenPrincipale, panPrincipale, posXo, posYo);
Je ne vois pas pourquoi le code exécuté par le Timer Swing s'exécuterait en dehors de l'EDT
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Mon code qui laisse une trainée....(l'avion avance)
PS:si il y a qq chose de pas claire dans ma logique je peux l'expliquer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 public int[] fctDessinerObstacle(JFrame fenPrincipale, JPanel panPrincipale,int posX,int posY) { if(i==0){//position de depart de l'img int posXDepart=fctHasard(0,fenPrincipale.getWidth()); int posYDepart=82; posX=posXDepart;posY=posYDepart; i++; } labImgObst=imgObstacle.fctAfficherImg(panPrincipale, posX,posY,50, 82); panPrincipale.add(labImgObst); panPrincipale.setComponentZOrder(labImgObst, 0); int tabPos[]=new int [2]; tabPos[0]=posX;tabPos[1]=posY; return tabPos; } //Mouvement Obstacle public void fctMouvement(ActionEvent e ,JFrame fenPrincipale, JPanel panPrincipale) { int tabPos []=fctDessinerObstacle(fenPrincipale, panPrincipale, posXo, posYo); posXo=tabPos[0];posYo=tabPos[1]; int continuer = 0;//boolean continuer=true; System.out.println("indice tabPos[0]:"+tabPos[0]+" ,tabPos[1]:"+tabPos[1]+" -PosXo="+posXo+" posYo="+posYo);//controle posYo++; System.out.println("-coordonnees X:"+posXo+" ,y:"+posYo + " -Compteur="+continuer);//controle if(posYo==fenPrincipale.getHeight()){ System.out.println("**************ALERTE! posYo=Hauteur du Label qui le limite**************");//controle posYo=82; posXo=fctHasard(0,fenPrincipale.getWidth()); } if ( labImgObst!=null ) { panPrincipale.remove(labImgObst); } fctDessinerObstacle(fenPrincipale, panPrincipale, posXo, posYo); }
Ta méthode fctMouvement(ActionEvent e ,JFrame fenPrincipale, JPanel panPrincipale) appelle 2 fois fctDessinerObstacle(fenPrincipale, panPrincipale, posXo, posYo) (qui fait l'ajout du panel), donc il faut faire le truc qui supprime pour les 2... par contre, oui, j'aimerais savoir pourquoi l'appeler 2 fois à chaque action du timer ? Parce que ta méthode sert à la fois à positionner et à ajouter le panel : donc à chaque action :
- tu l'appelles : la première fois (i==0) ça initialise les coordonnées, puis ça AJOUTE un nouveau panel à un container
- tu incrémentes une coordonnée pour que ça bouge
- tu enlèves (enfin) le dernier panel ajouté
- tu la rappelles la méthode, donc ça AJOUTE un nouveau panel à un container
Résultat à chaque action : 1 panel reste. Donc à la deuxième action : 2 panels restent. A la troisième : 3 d'où traînée.
Pourquoi ne pas faire l'initialisation au début, genre avant de démarrer le timer par exemple ! Ce que je fais d'ailleurs dans AbsoluteImagePanel Je n'ai pas besoin d'explications sur ta logique : je dis simplement que si elle était plus simple, tu n'aurais pas tous ces problèmes.
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager