Taille d'un JPanel

Th1b4ult Messages postés 6 Date d'inscription vendredi 1 octobre 2010 Statut Membre Dernière intervention 23 octobre 2010 - 18 oct. 2010 à 14:05
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 18 oct. 2010 à 17:26
Bonjour,
je code depuis peu en Java, et j'essaie une interface graphique. Voila mon problème :
je crée un cadre de taille fixe, et je veux que le JPanel à l'intérieur de mon JFrame prenne toute la place et fasse exactement 600*600 pixels. J'ai donc commencé par créer un JFrame de taille 600*600, en pensant que c'était bon. Mais apparemment, le contenu de mon cadre, à savoir mon JPanel ne fait pas la taille que je voulais.

Donc pour "bidouiller" un peu et récupérer la taille de mon JPanel, j'ai tenté d'afficher la taille de mon JPanel dans un JLabel appelé "info", dans la classe P_aide :

import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.awt.event.*;
//import java.awt.event.ActionEvent;
//import java.awt.event.ActionListener;
//import javax.swing.JFrame;


public class jeu {
    public static void main (String[] args) {
        cadre nc = new cadre ("Casse-brique",600, 600);
    }//fin classe main
}//fin classe jeu

    class cadre extends JFrame implements ActionListener {
        
        //Composants Communs
        private JButton retour_menu = new JButton("Menu");         //A changer en graphique
        private Font police = new Font("Arial", Font.PLAIN, 10);
        private JLabel info = new JLabel ();
        
        //Composants du Menu
        private ImageIcon nj = new ImageIcon("nj.PNG");   // associe à chaque bouton du
        private JButton nouveaujeu = new JButton (nj);      // menu un icone, et l'ajoute
        private ImageIcon opt = new ImageIcon("opt.PNG"); // dans le panneau menu
        private JButton option = new JButton (opt);
        private ImageIcon ad = new ImageIcon("ad.PNG");
        private JButton aide = new JButton (ad);
        private ImageIcon cred = new ImageIcon("cred.PNG");
        private JButton crédits = new JButton (cred);
        private ImageIcon quit = new ImageIcon("quit.PNG");
        private JButton quitter = new JButton (quit);        
        
        //Composants de l'Aide
        private P_aide panneau_aide = new P_aide();
        private P_menu panneau_menu = new P_menu();
        
        //Création du panneau Menu :    
        class P_menu extends JPanel { 
            public P_menu () {
                this.setLayout(null);
                this.setBackground(Color.black);
                
                nouveaujeu.setBounds(new Rectangle(200,100, 200, 50));
                this.add(nouveaujeu);
                option.setBounds(new Rectangle(200,170, 200, 50));
                this.add(option);
                aide.setBounds(new Rectangle(200,240, 200, 50));
                aide.addActionListener(new AideListener());
                this.add(aide);
                crédits.setBounds(new Rectangle(200,310, 200, 50));
                this.add(crédits);
                quitter.setBounds(new Rectangle(200,380, 200, 50));
                quitter.addActionListener(new QuitterListener());
                this.add(quitter);
            }
        public void paintComponent (Graphics g) {
            super.paintComponent (g);
            Image fond = getToolkit().getImage("fond_menu.PNG");
            g.drawImage(fond, 0,0, this);
        }
        
        }// fin de classe P_menu        
        

        
        //Création du panneau Aide :
        class P_aide extends JPanel { 
            public P_aide() {
                this.setLayout(null);
                this.setBackground(Color.black);
                retour_menu.setBounds(new Rectangle (520, 540, 70, 20));
                retour_menu.setFont(police);
                this.add(retour_menu);            
                info.setBounds(20,20,300,200);
                info.setText(getPreferredSize().toString() ); // C'est ici que je veux voir la taille de mon JPanel
                info.setForeground(Color.white);
                this.add(info);
            }
        }//fin de classe P_aide
        
        public cadre (String nom, int largeur, int hauteur) {
            super (nom);
            this.setSize (largeur, hauteur);
            this.setDefaultCloseOperation (EXIT_ON_CLOSE);
            this.setVisible(true);
            this.setResizable(false);                
            this.getContentPane().add(panneau_menu);
        }

        class AideListener implements ActionListener {
            public void actionPerformed(ActionEvent event) {
                getContentPane().setVisible(false);
                getContentPane().remove(panneau_menu); // cache le menu, l'enlève et le remplace par l'Aide
                getContentPane().add(panneau_aide);
                getContentPane().setVisible(true);
                }
            
        }

        class QuitterListener implements ActionListener {
            public void actionPerformed (ActionEvent event) {
                int confirm = JOptionPane.showConfirmDialog(getContentPane(), "Voulez vous vraiment quitter ?",
                "Fermeture de l'application", JOptionPane.YES_NO_OPTION); //affichage d'un pop-up demandant confirmation de sortie
            if (confirm == 0) {System.exit(0);} //quitte le programme si l'option "oui" est choisie
            }
        }
        
    }//fin classe cadre


Cela m'affiche 0 0, et j'ai vu qu'il fallait utiliser la méthode getPreferredSize().width et .height. Mais cela me donne pourtant le même résultat.
Auriez-vous une solution?

Si il manque quelque chose ou si c'est trop brouillon, n'hésitez pas à me le dire.

1 réponse

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
18 oct. 2010 à 17:26
Je pense que le problème vient du Layout de ta JFrame qui n'est pas à null par défaut. Modifie ton code, remplace ton consructeur par ca :

        public cadre (String nom, int largeur, int hauteur) {
            super (nom);
            //Il faut setter ton Layout à null
            this.setLayout(null);
            this.setSize (largeur, hauteur);
            this.setDefaultCloseOperation (EXIT_ON_CLOSE);
            this.setVisible(true);
            this.setResizable(false);                
            this.getContentPane().add(panneau_menu);
        }


sinon, tu peux directement écrire this.setContentPane(panel); et il prendra toute la place disponible dans la fenêtre
Rejoignez-nous