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 :

Problème d'affichage du contenu de JPanel


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Mic75
    Homme Profil pro
    Développeur Frontend
    Inscrit en
    Janvier 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Frontend
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 143
    Par défaut Problème d'affichage du contenu de JPanel
    Bonjour,

    Je rencontre actuellement un problème que je n'arrive pas à résoudre malgré mes recherches. Je précise que je développe sous l'IDE netbeans 6, sous linux.
    L'application à réaliser est un simulateur de vivarium.

    Le problème est le suivant :
    Le cadre de mon application est une JFrame, qui elle même contient un JPanel qui sera utiliser pour visualiser le vivarium. Ce JPanel contient à son tour un JPanel qui est un attribut d'une classe que j'ai appelé GTerrain.
    Enfin, le JPanel de la classe GTerrain, contient des cases qui sont représentées graphiquement par des JButton, j'ajoute donc ces JButon au JPanel de GTerrain.

    Quand je lance mon projet je m'attends donc à ce que ma JFrame contienne un quadrillage de boutons, mais malheureusement ils n'apparaissent pas.

    Au niveau du code ça donne :
    Dans ma JFrame (code généré par Netbeans) :
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    public class JFramarium extends javax.swing.JFrame {
     
        /** Creates new form JFramarium */
        public JFramarium() {
            initComponents();
        }
     
        /** This method is called from within the constructor to
         * initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is
         * always regenerated by the Form Editor.
         */
        // <editor-fold defaultstate="collapsed" desc="Generated Code">
        private void initComponents() {
     
            GTerrain terrain ;
            viewer = new javax.swing.JPanel();
     
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
            setTitle("La guerre des mondes");
            setResizable(false);
     
            terrain = new GTerrain(viewer) ;
            viewer.add(terrain.getJPTerrain()) ;
     
            org.jdesktop.layout.GroupLayout viewerLayout = new org.jdesktop.layout.GroupLayout(viewer);
            viewer.setLayout(viewerLayout);
            viewerLayout.setHorizontalGroup(
                viewerLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(0, 400, Short.MAX_VALUE)
            );
            viewerLayout.setVerticalGroup(
                viewerLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(0, 468, Short.MAX_VALUE)
            );
     
            org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(viewer, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(layout.createSequentialGroup()
                    .add(viewer, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(102, Short.MAX_VALUE))
            );
     
            java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
            setBounds((screenSize.width-410)/2, (screenSize.height-600)/2, 410, 600);
        }// </editor-fold>
     
     
        // Variables declaration - do not modify
        private javax.swing.JPanel viewer;
        // End of variables declaration
     
    }
    Dans ma classe GTerrain :
    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
    public class GTerrain extends Terrain {
     
        JPanel jpTerrain ; //Le JPanel ajouté au JPanel de la JFrame
     
        GTerrain(JPanel viewer)
        {
            super((int) viewer.getHeight()/GCase.hauteur, 
                  (int) viewer.getWidth()/GCase.largeur ) ;
     
            jpTerrain = new JPanel() ;
            for(int i=0;i<getHauteur();i++)
            {
                for(int j=0;j<getLargeur();j++)
                {
                    GCase tmpGC = new GCase(getCase(i,j)) ;
                    jpTerrain.add(tmpGC.getJBCase()) ; //Ici j'ajoute les boutons qui représentent des cases
                }
            }
        }
     
        public JPanel getJPTerrain(){
            return jpTerrain ;
        }
    }
    Enfin dans ma classe GCase :
    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
    public class GCase extends Case {
        private JButton jbCase ; //on utilise le composant jpanel pour representer une case
        static int hauteur = 10 ;         //hauteur en pixel
        static int largeur = 10 ;         //largeur en pixel
     
        public GCase(Case c){
            super(c.getX(),c.getY()) ;
            jbCase = new JButton() ;
            jbCase.setSize(hauteur,largeur) ;
        }
     
        public JButton getJBCase()
        {
            return jbCase ;
        }
     
    }
    Désolé pour la taille du code, mais je pense que tout ce que j'ai affiché peut s'avérer utile pour comprendre mon erreur.

    Merci d'avance pour vos réponses

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Si tu positionnes toi-meme les boutons, il faut mettre le layout du panel à null.

  3. #3
    Membre confirmé Avatar de Mic75
    Homme Profil pro
    Développeur Frontend
    Inscrit en
    Janvier 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Frontend
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 143
    Par défaut
    Bonjour.

    Merci pour ta réponse. Mais en fait je ne voit pas pourquoi je devrais mettre le layout du Panel (lequel au fait ?) à NULL, parce qu'il me semble que par défaut c'est le LayoutManager qui est utilisé, ce qui dans mon cas convient.

    Merci d'avance pour les précisions.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Le layoutmanager par defaut d'un panel est un FlowLayout.

    A partir du moment ou tu donnes une position et une dimension fixe à un component, il faut, pour que tes valeurs ne soient pas ecrasées, que le layout du container parent soit null.

    Dans ton cas, il y a je crois au moins le jpanel qui contient les cases.

  5. #5
    Membre confirmé Avatar de Mic75
    Homme Profil pro
    Développeur Frontend
    Inscrit en
    Janvier 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Frontend
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 143
    Par défaut
    qu'il me semble que par défaut c'est le LayoutManager qui est utilisé, ce qui dans mon cas convient
    Désolé, je suis pas réveillé aujourd'hui, je voulais dire que par défaut le LayoutManager utilisé était le FlowLayout . Par contre je ne savais pas qu'il écrasait les composants si on les fixait. Je vais essayé de ce pas .

  6. #6
    Membre confirmé Avatar de Mic75
    Homme Profil pro
    Développeur Frontend
    Inscrit en
    Janvier 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Frontend
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 143
    Par défaut
    Bon alors, j'ai bien défini le LayoutManager du JPanel de GTerrain qui contient les cases à null, malheureusement cela reste sans effet. J'ai simplement rajouter la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jpTerrain.setLayout(null)
    dans le constructeur de la classe GTerrain (cf plus haut pour le code).

    Y a-t-il quelque chose d'autre à faire ?

Discussions similaires

  1. [eZ Publish] Problème d'affichage de contenu Bloc XML
    Par M1000 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 09/03/2010, 16h57
  2. Problème d'affichage de contenu sur site fullflash
    Par XSphreak dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 25/10/2009, 03h59
  3. affichage du contenu de JPanel
    Par sky88 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 25/03/2008, 01h41
  4. Réponses: 2
    Dernier message: 14/01/2008, 17h32
  5. probléme d'affichage du contenu d'un fichier
    Par developppez dans le forum C
    Réponses: 2
    Dernier message: 20/04/2006, 19h16

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