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

Interfaces Graphiques en Java Discussion :

[JPanel] quel méthode appelé lors du rafraichissement...


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Points : 288
    Points
    288
    Par défaut [JPanel] quel méthode appelé lors du rafraichissement...
    Bonjour la question est simple, explication :
    Je dessine sur un panel différents composants des gros comme des images et des 'petits' qui peuvent être superposés aux gros (ligne, rectangle, text...)
    Bref, pour l'affichage j'ai surgargé toutes les méthodes possibles pour moi pour voir mes lignes(traits) s'afficher sur mon panel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      public void repaint() {
        super.repaint();
        refreshComponents();
      }
      public void paint(Graphics g) {
        super.paint(g);
        refreshComponents();
      }
      protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        refreshComponents();
      }
    La méthode refreshCOmponent, permet de trier les composants du panel et d'effectuer en dernier le repaint des 'petits' éléments.
    Le truc marche bien si je bouge la fenêtre...
    Par contre si je sélectionne une autre application (InternetExplorer par ex), et qu'ensuite je resélectionne mon appli, mes 'petits' composants on disparu... pour temps ils sont dessinés mais invisible.

    La question est : quel est la méthode appelée dans ce cas là ?

  2. #2
    Membre éprouvé
    Avatar de c-top
    Profil pro
    Turu
    Inscrit en
    Septembre 2003
    Messages
    972
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Turu

    Informations forums :
    Inscription : Septembre 2003
    Messages : 972
    Points : 1 246
    Points
    1 246
    Par défaut
    As-tu essayé un panel.revalidate(); au moment de la mise à jour. Cela permet d'encrer définitivement tes modifications.

  3. #3
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      public void repaint() { 
        super.repaint(); 
        refreshComponents(); 
      } 
      public void paint(Graphics g) { 
        super.paint(g); 
        refreshComponents(); 
      } 
      protected void paintComponent(Graphics g) { 
        super.paintComponent(g); 
        refreshComponents(); 
      }
    A mon avis, il n'y a pas nécessité d'appeler la méthode refreshComponents() à chaque fois. repaint() ne faisant que déferrer l'appel à la méthode paint(), et paint() appelant paintComponent().

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Points : 288
    Points
    288
    Par défaut
    A mon avis, il n'y a pas nécessité d'appeler la méthode refreshComponents() à chaque fois. repaint() ne faisant que déferrer l'appel à la méthode paint(), et paint() appelant paintComponent().]
    -> effectivement j'ai seulement laissé le PaintComponent et cela marche tout aussi mal lol, mais cela n'a rien changer.


    As-tu essayé un panel.revalidate();
    Je faisait déjà un validate lorsque j'ajoutait mon petit composant au panel, j'ai donc essayé aussi le revalidate mais rien ne change.

    Car vraiment si la méthode RefreshCOmponent n'est pas appelé, je ne vois pas petits composants, tandis q dès que j'y fais appel ils sont bien affiché.
    Je vous joins le code du refreshCOmponent, si cela peut vous aider... et m'aider par la même occasion.
    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
     
      private void refreshComponents() {
        int count = getComponentCount();
        Component[] pacComponents = new Component[count];
        Component[] petitComponents = new Component[count];
        Component[] other = new Component[count];
        int j = 0;
        int k = 0;
        int l = 0;
        for (int i = 0; i < count; i++) {
          Component component = getComponent(i);
          if (component instanceof PacComponent) {
            pacComponents[j] = component;
            j++;
          } else if (component instanceof PetitComponent ) {
            petitComponents[k] = component;
            k++;
          } else {
            other[l] = component;
            l++;
          }
        }
        // On commence par dessiner les others.
        for (int m = 0; m < l; m++) {
          other[m].repaint();
        }
        // Ensuite on dessine les pacComponents.
        for (int m = 0; m < j; m++) {
          pacComponents[m].repaint();
        }
        // EnFin, dessine les formes spéciales.
        for (int m = 0; m < k; m++) {
          Graphics graphics = getGraphics();
          //petitComponents[m].repaint();
          petitComponents[m].paint(graphics);
        }
      }

  5. #5
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Ca ne peut pas marcher car tu appelles repaint() sur certains composants, ils seront donc peints après les autres et non pas avant. Et il faut redéfinir la méthode paintChildren() pour qu'elle ne fasse rien car c'est refreshComponents() qui peint les fils du composant.
    Essaie comme ceci :
    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
    protected void paintComponent(Graphics g) { 
        super.paintComponent(g); 
        refreshComponents(g); 
    } 
     
    protected void paintChildren(Graphics g) {
    }
     
    private void refreshComponents(Graphics g) { 
        int count = getComponentCount(); 
        Component[] pacComponents = new Component[count]; 
        Component[] petitComponents = new Component[count]; 
        Component[] other = new Component[count]; 
        int j = 0; 
        int k = 0; 
        int l = 0; 
        for (int i = 0; i < count; i++) { 
          Component component = getComponent(i); 
          if (component instanceof PacComponent) { 
            pacComponents[j] = component; 
            j++; 
          } else if (component instanceof PetitComponent ) { 
            petitComponents[k] = component; 
            k++; 
          } else { 
            other[l] = component; 
            l++; 
          } 
        } 
        // On commence par dessiner les others. 
        for (int m = 0; m < l; m++) { 
          other[m].paint(g); 
        } 
        // Ensuite on dessine les pacComponents. 
        for (int m = 0; m < j; m++) { 
          pacComponents[m].paint(g); 
        } 
        // EnFin, dessine les formes spéciales. 
        for (int m = 0; m < k; m++) { 
          petitComponents[m].paint(g); 
        } 
    }

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Points : 288
    Points
    288
    Par défaut
    c trop fort, j'ai remixer un peu ta solution et cela marche, merci beaucouppppp !!!!!
    c trop fort....
    merci encore

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 19/01/2011, 09h03
  2. Réponses: 5
    Dernier message: 04/07/2006, 10h17
  3. Réponses: 1
    Dernier message: 10/05/2006, 22h07
  4. Affichage de la pile d'appel lors d'une exception
    Par damien.yep dans le forum Langage
    Réponses: 1
    Dernier message: 14/09/2005, 16h42
  5. [Cryptage] Quel méthode utiliser ?
    Par Wookai dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 12/09/2005, 16h54

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