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 :

[GridLayout/JPanel]affichage et redimensionnement


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 27
    Par défaut [GridLayout/JPanel]affichage et redimensionnement
    Bonjour à tous,
    Je souhaite afficher dans une fenêtre graphique un tableau de case qui dispose de bordures "variables" (parfois à gauche, parfois tout autour, parfois seulement en bas...).

    J'ai donc une JFrame dont le constructeur ressemble à ça:
    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
     
            this.lesCasesGraphics = new ArrayList();
            LayoutManager layout2 = new BorderLayout();
            JPanel mainPanel = new JPanel();
            LayoutManager layout = new GridLayout(longueur,hauteur);
            this.getContentPane().setLayout(layout2);
            mainPanel.setLayout(layout);
            this.getContentPane().add(mainPanel, BorderLayout.CENTER);
            this.getContentPane().add(new JPanel(), BorderLayout.NORTH);
            this.getContentPane().add(new JPanel(), BorderLayout.SOUTH);
            this.getContentPane().add(new JPanel(), BorderLayout.EAST);
            this.getContentPane().add(new JPanel(), BorderLayout.WEST);
            for (int i = 0;i<this.longueur*this.hauteur;i++){
                CaseGraphic cg = new CaseGraphic();
                this.lesCasesGraphics.add(cg);
                mainPanel.add(cg);
            }
            this.setSize(400,400);
    La méthode permettant de réactualiser le tableau est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
         public void affiche() {
             Iterator it = this.lesCasesGraphics.iterator();
             for (int i = 0;i<this.hauteur;i++){
                 for (int j = 0; j<this.longueur;j++){
                     CaseGraphic casegraph = (CaseGraphic) it.next();
                     casegraph.update();
                 }
             }
    Je me suis servi d'un tuto pour dessiner à l'intérieur d'une JPanel, en redéfinnissant notamment la méthode paint(Graphics g).
    Mon objet CaseGraphic se présente donc comme ça:
    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
     
        private class CaseGraphic extends JPanel {
     
            private List drawables = new ArrayList();
     
     
            public void update(){
                this.clear();
    //ici chaque JPanel aura une bordure sur chaque coté
                    this.addDrawable(new Line(0,0,this.getHeight(),0));
                    this.addDrawable(new
                           Line(0,this.getWidth(),this.getHeight(),this.getWidth()));
                    this.addDrawable(new Line(this.getHeight(),0,this.getHeight(),this.getWidth()));
                    this.addDrawable(new Line(0,0,0,this.getWidth()));
                this.repaint();
            }
     
            public void paint(Graphics g) {
                for (Iterator iter = drawables.iterator(); iter.hasNext();) {
                    IDrawable d = (IDrawable) iter.next();
                    d.draw(g);    
                }
            }
     
            public void addDrawable(IDrawable d) {
                drawables.add(d);
                repaint();
            }
     
            public void removeDrawable(IDrawable d) {
                drawables.remove(d);
                repaint();
            }
     
            public void clear() {
                drawables.clear();
                repaint();
            }
     
        }
    Il y a quelques problème dans l'affichage:
    1) il ya un espace entre les éléments d'une même ligne
    2) la ligne en bas de chaque case n'est pas visible

    Voici le résultat que j'obtiens:



    En redimensionnant manuellement la fenêtre, j'arrive à obtenir le résultat voulu. Cela témoigne également d'un soucis, car lorsque ma fenêtre est redimensionnée, mes Jpanel ne sont pas redimensionnées en conséquence.

    voila le résultat attendu:



    Merci d'avance pour votre aide.

  2. #2
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 27
    Par défaut
    Personne ne peux m'aider? J'ai essayer plusieurs changements mais rien ne fonctionne...

  3. #3
    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
    ta essayé un TaFenetre.pack() pour que la fenetre au contenu (pas besoin de la dimensionner toi meme
    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

  4. #4
    Membre averti Avatar de matzeus
    Inscrit en
    Avril 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 52
    Par défaut
    as tu essaye egalement de rajouter des arguments a ton GridLayout?
    exple
    ... new GridLayout(longueur,hauteur,int a ,int b)
    a et b representant respectivement(si je me rappelle bien) l'espace a gauche et droite du composant et l'espace en haut et en bas du composant

  5. #5
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 27
    Par défaut
    Alors oui j'ai essayé le pack mais ça ne fonctionne pas, j'obtiens une toute petite fenêtre, ou les case du tableau ne possède toujours pas de lignes en bas.

    Pour ce qui est des arguments du constructeur de GridLayout, jai essayé de mettre des valeurs, mais ça correspond si jai bien compris aux espacements (verticaux et horizontaux) entre chaque case. Le problème c'est que ces valeurs n'influent en rien sur l'affichage final.

    Je pense que j'ai un problème de conception et d'intégration du GridLayout à la frame, car le redimensionnement de la fenêtre devrait théoriquement se répercuter sur chaque case du tableau, ce qui n'est pas du tout le cas...
    Qu'en pensez-vous?

Discussions similaires

  1. [JPanel] Affichage - superposition
    Par Alphonse87 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 08/08/2008, 10h11
  2. BorderLayout GridLayout JPanel ? redim 1 seule ligne GridLayout?
    Par aurore22 dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 26/05/2008, 14h17
  3. Réponses: 10
    Dernier message: 07/06/2006, 11h12
  4. [JPanel] Affichage d'une image et scrolling
    Par unknown4 dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 15/09/2005, 00h09
  5. [JPanel] Affichage en premier plan
    Par Snowballz dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 21/07/2004, 16h07

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