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 :

Carré gris au milieu du JPanel


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 252
    Par défaut Carré gris au milieu du JPanel
    Bonsoir!!! Je vous demande de l'aide pour un petit problème d'affichage; Je simule dans un JPanel un décor et un avion; à la fin de la simulation (elle se fait cycle après cycle), apparaît un étrange rectangle gris au milieu!! voici mes méthodes:

    paintComponent:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    protected void paintComponent(Graphics g){
      if(zoneGauche!=null){
       try{
        super.paint(g);
        simu.getLaGrille().paint(zoneGauche.getGraphics());
       }
     
       catch(NullPointerException npe){ }
       }
      }
    update:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void update(Graphics g){
      simu.getLaGrille().update(zoneGauche.getGraphics());
     }
    et la méthode de simulation:

    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
     
    public void simuCompleteGraphique (int nbCycle, SimulationGraphique simu){
     
      if (nbCycle==0){
       System.out.println("Pas de simulation");
       this.repaint();
      }
      else{
       this.paintComponent(zoneGauche.getGraphics());
       for (int i=1; i<=nbCycle; i++){
        simu.getSimu().uncycle();
        temporisation();
        this.update(zoneGauche.getGraphics());
       }
      }
     }
    où zoneGauche est mon Jpanel; quelqu'un a t-il une idée d'où pourrait provenir ce désagrément??
    D'avance merci

  2. #2
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    Faudrait pas mettre dans ton void SimuCompleteGraphique à la place de Essai et regarde le résultat
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  3. #3
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    N'appelle pas paint*(zoneGauche.getGraphics()) mais surcharge la methode paintComponent() de zoneGauche. Swing est malin et ne demande pas à tous les composants de se redessiner s'il n'en a pas besoin. Du coup, ton composant contenant le code qui appelle zoneGauche.getGraphics() n'est pas exécuté parfois, et ta zoneGauche se redessine en faisant ce qu'elle sait faire : un carré gris.

  4. #4
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 252
    Par défaut
    J'ai essayé mais ca ne marche pas.... simu.getLagrille() renvoie un type Canvas pour lequel la méthode paintComponent n'est pas défini!!

    voici mes méthodes pour le type Canvas:
    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
     
    public void affichageDecorDeFond(Graphics g){
     
      Graphics2D comp2D= (Graphics2D)g;
        for(int i=0 ; i < this.hauteurDecor ; i++){
       for(int j=0 ; j < this.longueurDecor ; j++){
     
        this.tableauDeBase[i][j].affichageEcran(comp2D,i,j);
     
       }
      }
     }
     public void affichageAvion(Graphics g){
     
      Graphics2D comp2D= (Graphics2D)g;
      for(int i=0 ; i < this.hauteurCarlingue ; i++){
       for(int j=0 ; j < this.longueurCarlingue ; j++){
     
        this.carlingueAvion[i][j].affichageEcran(comp2D,i,j);
     
       }
      }
     }
     public void paint(Graphics g)
     {
      this.affichageDecorDeFond(g);
      this.affichageAvion(g);
     }
     
     public void update(Graphics g)
     {
      this.affichageAvion(g);
     }
    A moins que je n'ai rien compris....

  5. #5
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 252
    Par défaut
    A présent j'ai transformé ma méthode paint du canvas en méthode paintComponent, et j'ai fait de même dans le code précédemment écrit.... Rien à faire, le rectangle gris apparait toujours à l'issu du dernier tour de simulation ......

  6. #6
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Non tu n'as pas compris. Ce n'est pas grille.paint(zoneGauche.getGraphics()) qu'il faut faire. Le problème est dans le getGraphics(). Soi tu déplaces le code de dessin de la grille dans zoneGauche, soit tu mets directement la grille à la place de zoneGauche et tu te débarasses de zoneGauche. Encore une fois, un composant n'a pas une zone de dessin persistante. L'écran doit être rafraîchi et quand cela arrive la méthode paint() du composant est appelée... donc ici zoneGauche.paint(). Le résultat est donc un rectangle gris (un Jpanel est un rectangle gris).

    Au fait, c'est une mauvaise idée de mélanger AWT (classe Canvas) et Swing.

  7. #7
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 252
    Par défaut
    Personne n'a d'idée, vraiment??

  8. #8
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 252
    Par défaut
    Bon ben, toujours au secours:

    1/ J'ai transformé mon Canvas en JPanel
    2/ voici mon code pour l'affichage de la simulation:
    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
     
    public void simuCompleteGraphique (int nbCycle, SimulationGraphique simu){
     
      if (nbCycle==0){
       System.out.println("Pas de simulation");
       zoneGauche.repaint();
      }
      else{
     
       zoneGauche=simu.getLaGrille();
       jContentPane.add(zoneGauche, null);
       zoneGauche.setVisible(true);
     
       for (int i=1; i<=nbCycle; i++){
        simu.getSimu().uncycle();
        zoneGauche.repaint();
     
     
       }
      }
     }
    Et ca n'affiche toujours rien..... Je me demande vraiment ou ca cloche; Lorsque j'essaie juste d'afficher mon JPanel dans une JFrame, ca se passe bien, mais je ne comprends vraiement pas pourquoi ca ne marche pas... La méthode repaint() ne s'applique pas, et lorsque je force l'affichage avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    simu.getLaGrille().update(simu.getLaGrille().getGraphics();
    ou n'importe quoi d'autre, ca ne fonctionne pas....

Discussions similaires

  1. Rendre le milieu d'une image couleur en gris
    Par nouha_79 dans le forum Images
    Réponses: 2
    Dernier message: 16/11/2007, 19h20
  2. niveau de gris en niveau de couleur
    Par corey_jx dans le forum MFC
    Réponses: 2
    Dernier message: 11/06/2003, 22h36
  3. JPanel et Border
    Par titoine dans le forum Débuter
    Réponses: 3
    Dernier message: 22/04/2003, 15h58
  4. Tracer un carré de X cm
    Par mdel dans le forum Composants VCL
    Réponses: 6
    Dernier message: 06/01/2003, 16h17
  5. Racine carrée
    Par SteelBox dans le forum Mathématiques
    Réponses: 5
    Dernier message: 23/11/2002, 17h15

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