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 :

graphics : paintcomponents appelé sans arret


Sujet :

AWT/Swing Java

  1. #1
    Membre actif Avatar de vasilov
    Inscrit en
    Juillet 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 306
    Points : 249
    Points
    249
    Par défaut graphics : paintcomponents appelé sans arret
    Bonjour,

    J'ai fait une frame avec divers composant notament en son centre (CENTER du border layout) un graphique (pour l'instant vide)

    Mon probleme est que la méthode paintComponent est appelée sans arret (et non pas uniquement lorsque je redimensionne la fenetre). Ce qui prend toutes les ressources.

    Pour résoudre ce problème, j'ai mit un wait de 100ms dans la méthode PaintComponent.

    Mais ce n'est pas terrible comme solution.

    Savez vous pourquoi cette méthode est appelée sans arret??
    Merci pour vos réponses.

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par vasilov
    Pour résoudre ce problème, j'ai mit un wait de 100ms dans la méthode PaintComponent.

    Mais ce n'est pas terrible comme solution.
    En effet c'est à éviter à tout prix : tu bloques le thread d'affichage ce qui pourrait provoquer des bugs pas beau...

    Citation Envoyé par vasilov
    Savez vous pourquoi cette méthode est appelée sans arret??
    Elle est appellé lorsqu'il y a besoin de mettre à jours l'affichage de la fenêtre...


    Mais la question est : Pourquoi est-ce que tu redéfini cette méthode (et comment) ?

    a++

  3. #3
    Membre actif Avatar de vasilov
    Inscrit en
    Juillet 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 306
    Points : 249
    Points
    249
    Par défaut
    Merci pour cette réponse aussi rapide

    c'étais une erreur de débutant : je refaisais appel à la methode dans cette methode.

    Mais maintenant on ne fait pas appel assez souvent à cette méthode :
    en effet j'ai un bug graphique (une partie de ma fenetre est recopiée dans le graphique) dès que je clique sur un bouton de la fenetre ou meme sur le graph.

    Alors ma nouvelle question est : comment éviter ce bug??

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par vasilov
    Alors ma nouvelle question est : comment éviter ce bug??
    Et ma question est toujours la même :
    Citation Envoyé par adiGuba
    Pourquoi est-ce que tu redéfini cette méthode (et comment) ?
    a++

  5. #5
    Membre actif Avatar de vasilov
    Inscrit en
    Juillet 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 306
    Points : 249
    Points
    249
    Par défaut
    Pourquoi la redéfinir :
    pour pouvoir déssiner un graphique!! (y a t il une autre méthode)


    Le code donnant le bug est celui ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        public void paintComponent(Graphics g) {        
            g.setColor(Color.RED);
            g.fillRect(10,10,80,80);
            g.setColor(Color.BLUE);
            g.fillOval(150,50,80,80);
        }
    Et voici l'amélioration qui empeiche le bug : j'utilise Graphics2D et super.paintComponent. Mais je ne sais pas pourquoi ca résout le probleme.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        public void paintComponent(Graphics g) {
            Graphics2D g2d = (Graphics2D) g;
            super.paintComponent(g2d);
     
            g2d.setColor(Color.RED);
            g2d.fillRect(10,10,80,80);
            g2d.setColor(Color.BLUE);
            g2d.fillOval(150,50,80,80);
        }

  6. #6
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par vasilov
    Et voici l'amélioration qui empeiche le bug : j'utilise Graphics2D et super.paintComponent. Mais je ne sais pas pourquoi ca résout le probleme.
    Surement parce que tu appelles super.painComponent() qui efface le composant...

    a++

  7. #7
    Membre actif Avatar de vasilov
    Inscrit en
    Juillet 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 306
    Points : 249
    Points
    249
    Par défaut
    ok,

    merci beaucoup adiGuba

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

Discussions similaires

  1. Macro répéter une Actualisation sans arret
    Par loic.logidis dans le forum IHM
    Réponses: 4
    Dernier message: 23/05/2008, 15h37
  2. Réponses: 3
    Dernier message: 22/05/2007, 14h52
  3. [debutant]getListCellRendererComponent appelé sans raison
    Par Romain93 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 02/02/2007, 17h40
  4. [WD 10]Mon image s'annime sans arret. pourquoi ?
    Par Cazaux-Moutou-Philippe dans le forum WinDev
    Réponses: 3
    Dernier message: 14/12/2006, 11h16
  5. Ordi qui redemarre sans arret
    Par c+cool dans le forum Windows XP
    Réponses: 3
    Dernier message: 28/05/2006, 15h57

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