IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Java Discussion :

Animation d'un JLabel contenant une image


Sujet :

Java

  1. #21
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    méthode qui tourne en boucle en dehors de l'EDT, d'où ton problème de clignotement.

  2. #22
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Pif_Paf_Pouf Voir le message
    @Joel//

    1-


    Non je l'ai fait le plus simple possible.Enfin j'ai essayé.
    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 !

    Citation Envoyé par Pif_Paf_Pouf Voir le message
    En fait dans ma fonction mouvement obstacle.
    Je souhaite "effacer" l'avion précédent puis je le redessine à nouveau sur ses positions différentes.
    C'est ce qu'on t'a dit de faire, oui...

    Dans ton code, par contre :

    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);
    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.

    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.

  3. #23
    Membre actif
    Homme Profil pro
    :-)
    Inscrit en
    Mars 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : :-)
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2014
    Messages : 194
    Points : 204
    Points
    204
    Par défaut
    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 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 !
    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.

    @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...

  4. #24
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fctDessinerObstacle(fenPrincipale, panPrincipale, posXo, posYo);
    		panPrincipale.remove(labImgObst);
    Fait :

    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);
    Ce que j'ai déjà dit !

    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.

  5. #25
    Membre actif
    Homme Profil pro
    :-)
    Inscrit en
    Mars 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : :-)
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2014
    Messages : 194
    Points : 204
    Points
    204
    Par défaut
    Mon code qui laisse une trainée....(l'avion avance)

    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);
    }
    PS:si il y a qq chose de pas claire dans ma logique je peux l'expliquer.

  6. #26
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    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.

Discussions similaires

  1. Récupérer la cellule contenant une image
    Par phpphp dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/05/2007, 16h45
  2. Comment mettre en place un Jlabel avec une image de fond?
    Par jlassiramzy dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 08/05/2007, 18h52
  3. Jlabel sur une image de fond est ce possible?
    Par jlassiramzy dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 04/05/2007, 13h29
  4. [JavaMail] recevoir un mail contenant une image
    Par nicotine002 dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 26/08/2006, 13h38
  5. [JLabel] changer une image
    Par dadg dans le forum Composants
    Réponses: 5
    Dernier message: 28/09/2004, 11h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo