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

AWT/Swing Java Discussion :

fonctionnement de " JPanel.repaint() "


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier Avatar de Ndugu
    Profil pro
    Inscrit en
    Août 2004
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 121
    Points : 88
    Points
    88
    Par défaut fonctionnement de " JPanel.repaint() "
    Bonjour à tous.

    Dans mon application j'ai deux boutons.

    Un qui affiche une image :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Affichage de l'image
    Graphics tempG;
    tempG = this.getGraphics();
    tempG.drawImage(Img, X , Y, this);
    "this" étant un JPanel

    Un qui efface l'image :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Effacer l'image
    this.repaint();
    Jusqu'ici tout marche parfaitement!


    Maintenant, je voudrais avoir un seul bouton qui d'abord efface la précedente image, puis affiche la nouvelle.

    Alors je met dans le bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // Effacer l'image
    this.repaint
    
    // Affichage de l'image
    Graphics tempG;
    tempG = this.getGraphics();
    tempG.drawImage(Img, X , Y, this);
    Mais mon image apparait une fraction de seconde et s'efface aussi tot!

    Merci d'avance à ceux qui pouront m'expliquer ce qui ce passe, car je ne comprend pas pourquoi mon image s'efface si je l'affiche après un "repaint()"


    Ndugu

  2. #2
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Je ne suis pas sur que l'emploi de repaint() soit nécessaire. Tu dois pouvoir mettre la nouvelle image sur l'ancienne. Au niveau des performances, ce n'est pas forcément optimal, mais essai de voir si ça fonctionne. De plus, pour plus de précision, repaint() ne fait que rappeler la méthode paintComponent(Graphics g) du composant sur lequel elle est appliquer. Bonne chance.

  3. #3
    Membre régulier Avatar de Ndugu
    Profil pro
    Inscrit en
    Août 2004
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 121
    Points : 88
    Points
    88
    Par défaut
    Merci pour ces explications, il vrai que l'emplois de repaint() ne mais pas nécessaire.

    J'ai possé cette question car lorsque les images ne sont pas de meme tailles, on peut voir les "restes" de l'ancienne image autour de la nouvelle si elle est plus petite.

    (Je veux garder la taille réelle des images, et ne pas toutes les redimenssionnées pour l'affichage.)

    Pour résoudre mon problème j'affiche désormais toujours 2 images : une première représentant le fond de ma fenêtre et la nouvelle par dessus.

  4. #4
    Membre actif Avatar de jibbi
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 165
    Points : 205
    Points
    205
    Par défaut
    Bonjour
    Mais mon image apparait une fraction de seconde et s'efface aussi tot!
    Override la méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    publiic void paintComponent(Graphics g){
     
    // faut utilier le parametre Graphics g au lieu de getGraphics()
    g.drawImage(Img, X , Y, this);
     
    }

  5. #5
    Membre régulier Avatar de Ndugu
    Profil pro
    Inscrit en
    Août 2004
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 121
    Points : 88
    Points
    88
    Par défaut
    Ma fonction d'affichage ne se trouve pas dans "paintComponent", je l'appel de différents endroits.

    Merci tout de meme.

    La méthode des deux images me convient pour le moment. je vais donc mettre résolu, je relancerais la discution si besion est.

    merci à tous.

    Ndugu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quote et double quote
    Par aktos dans le forum Langage
    Réponses: 8
    Dernier message: 05/01/2007, 19h55

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