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

 Java Discussion :

JPanel mal dimensionnés


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 165
    Par défaut JPanel problème de LayOut
    Bonsoir tout le monde

    Je voulais tester l'organisation d'affichage des Jpanels à l'intérieur d'un Jframe, j'ai dessiné un jframe ''JframePrincipal'' destiné à accueillir un jpanel parent ''PanelParent'' qui accueillera un jpanel fils ''PanelFils'' le tout exécuté par la classe ''Program'' contenant la méthode main.

    Ce qui me chiffonne c'est que j'ai mis tout les paramètres (à ma connaissance limitée) pour bien afficher le bazar pourtant j'ai un jpaenl ridiculement petit qui s'affiche, pouvez me dire ce qui ne va pas dans mon code et comment y remédier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import javax.swing.*;
    import java.awt.*;
     
    public class JFramePrincipal extends JFrame{
    	public JFramePrincipal(){
    		setTitle("Simulation écluse");
    		setSize(1024,768);
    		setVisible(true);
    		//pack(); Pouvez vous me dire à quoi ça sert
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import javax.swing.* ;
    import java.awt.* ;
     
    public class PanelParent extends JPanel{
    	public PanelParent(){
    	setSize(400,400);
    	setVisible(true);
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import javax.swing.* ;
    import java.awt.* ;
     
    public class PanelFils extends JPanel{
    	public PanelFils(){
    	setSize(300,300);
    	setVisible(true);
    	setBackground(Color.blue);
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import javax.swing.* ;
    import java.awt.* ;
     
    public class Program {
    	public static void main(String args[]){
    	JFramePrincipal Principal = new JFramePrincipal();
    	PanelParent Papa = new PanelParent();
    	PanelFils Fils = new PanelFils();
    	Papa.add(Fils);
    	Principal.getContentPane().add(Papa);
    	//Principal.pack;
    	}
    }
    En vous remerciant d'avance

    Bonsoir.

  2. #2
    Membre expérimenté Avatar de DarkMolo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Maroc

    Informations forums :
    Inscription : Juillet 2006
    Messages : 207
    Par défaut
    Salut,


    Premièrement, si j'ai bien compris ce qui est dit sur la doc :
    pack()
    Causes this Window to be sized to fit the preferred size and layouts of its subcomponents.
    Tu n'a pas à utiliser de pack, pack redimensionne tes composants pour qu'ils soient conforme au preferredSize(getPreferredSize, setPreferredSize), pas au size que tu as définit.


    Deuxièmement, si tu veux tranquillement jouer avec les positions et les tailles de tes composants, tu devrais toujours remettre les layout du conteneur à null, dans ton cas, même si tu as mis, setSize(400,400); pour le panel père, il prendra toute la surface sur ta JFrame(Si tu lui mets aussi un setBackground(Color.uneCouleur) tu remarqueras).

    Alors, je disais, il suffit de :
    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
     
    import javax.swing.* ;
    import java.awt.* ;
    public class Program {
    	public static void main(String args[]){
    	JFramePrincipal Principal = new JFramePrincipal();
    	PanelParent Papa = new PanelParent();
    	PanelFils Fils = new PanelFils();
     
    	Principal.setLayout(null);      //<------
    	Papa.setLayout(null);          //<------
     
    	Papa.add(Fils);
    	Principal.getContentPane().add(Papa);
    	}
    }
    Si tu veux en savoir plus sur les layout, gestionnaire de mise en forme, regarde dans la FAQ GUI.

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 165
    Par défaut
    Merci pour ta réponse ça résout mon problème, franchement on ne peut aborder java à tâtons.

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 165
    Par défaut
    Rebonjour

    Voulant tester le gestionnaire BorderLayout/FlowLayout j'ai changé la classe Program contenant le main :

    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
    import javax.swing.* ;
    import java.awt.* ;
     
    public class Program {
    	public static void main(String args[]){
     
    	JFramePrincipal Principal = new JFramePrincipal();
    	PanelParent Papa = new PanelParent();
    	PanelFils Fils = new PanelFils();
     
    	Principal.setLayout(new BorderLayout ());
    	Principal.add(Fils);
    	Principal.add(Papa);
     
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import javax.swing.* ;
    import java.awt.* ;
     
    public class PanelParent extends JPanel{
    	public PanelParent(){
    	setSize(340,340);
    	setVisible(true);
    	setBackground(Color.red);
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import javax.swing.* ;
    import java.awt.* ;
     
    public class PanelFils extends JPanel{
    	public PanelFils(){
    	setSize(340,340);
    	setVisible(true);
    	setBackground(Color.yellow);
    	}
    }
    Le problème c'est que le nouveau layout n'apparait même pas, j'ai bien lu dans la doc mais je tends à croire que la gestion des layout est parfois anecdotique.

    Merci d'avance pour votre aide.

  5. #5
    Membre Expert 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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	Principal.setLayout(new BorderLayout ());
    	Principal.add(Fils);
    	Principal.add(Papa);
    Tu n'as pas dû lire la Javadoc de BorderLayout en intégralité !
    Là, tu ajoutes Fils et Papa et tu les mets au même emplacement, i.e. BorderLayout.CENTER.
    Essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	Principal.setLayout(new BorderLayout ());
    	Principal.add(Fils, BorderLayout.SOUTH);
    	Principal.add(Papa);
    tu verras la différence.
    NB : conventionnellement, les variables en Java commencent par une minuscule.

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 165
    Par défaut
    Merci Hervé, une fois de retour je vais tester Inchallah , j'ai déjà un début de réponse en remplaçant borderlayout par flowlaout, encore merci.

Discussions similaires

  1. [IText] Image mal dimensionnée
    Par Narah dans le forum Documents
    Réponses: 11
    Dernier message: 27/07/2010, 12h52
  2. Origine d'un JPanel mal positionnée ?
    Par Virgile le chat dans le forum 2D
    Réponses: 11
    Dernier message: 13/08/2009, 14h29
  3. Comment dimensionner JFrame ou JPanel en fonction de leur contenu
    Par L4BiN dans le forum Agents de placement/Fenêtres
    Réponses: 7
    Dernier message: 15/02/2007, 14h49
  4. Réponses: 3
    Dernier message: 06/03/2006, 18h08
  5. [Debutant]Probleme dimensionnement JPanel dans CardLayout
    Par etiennegaloup dans le forum Agents de placement/Fenêtres
    Réponses: 9
    Dernier message: 22/12/2005, 19h08

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