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

Agents de placement/Fenêtres Java Discussion :

Aide sur placement dans un gridbaglayout


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 287
    Par défaut Aide sur placement dans un gridbaglayout
    Bonjour,

    J'ai une fenêtre dans laquelle je souhaiterais afficher 2 panels : panelHaut et panelCentre. Comme leur nom l'indique, je souhaite les afficher l'un en dessous de l'autre. Jusqu'a là pas de problème (via un BorderLayout pour ma fenetre principale).

    Mon panelHaut, étant plus complexe, j'utilse le GridBagLayout pour placer mes composants. Pour mieux visualiser la chose, voilà un petit schéma :


    Pour l'instant, je n'arrive déjà pas à placer ma barre bleu et mon personnage sur la même ligne. Ma barre est toujours centrée et mon personnage se place toujours en dessous (lui aussi centré). Pourtant sur la droite de la barre bleue la place est disponible.

    Voilà comme j'ai procédé
    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
     
    public void init(){
    		this.setOpaque(true);
    		this.setBackground(Color.WHITE);
     
    		/* configuration du panel principal */
    		setLayout(new BorderLayout());
     
    		/* configuration du panel contenant images et textes */
    		JPanel panelHaut = new JPanel();
    		panelHaut.setLayout(new GridBagLayout());
    		GridBagConstraints gbc = new GridBagConstraints();
    		gbc.fill = GridBagConstraints.HORIZONTAL;
     
    		/* Initialisation des images */
    		_bandeColoree = new JLabel(Constantes.IMAGE_BARRE_COLOREE);
    		//Récupération de la largeur de la fenetre principale pour modifier la largeur de la bande colorée en conséquence
        Double widthEcranPrincipal = MainFrame.getSize().getWidth();
    		Dimension dimension = new Dimension((widthEcranPrincipal.intValue()-500),50);
    		_bandeColoree.setPreferredSize(dimension);
    		_bandeColoree.setAlignmentY(Component.LEFT_ALIGNMENT);
     
    		_logoAgri = new JLabel(Constantes.IMAGE_AGRI);
    		_logoAgri.setAlignmentY(Component.RIGHT_ALIGNMENT);
     
                          /* bandeColoree */
    		gbc.gridx=0; //Ligne de départ
    		gbc.gridy=0; //Colonne de départ
    		gbc.gridheight=2; //Nombre de Colonne
    		gbc.gridwidth=1; //Nombre de ligne
    		panelHaut.add(_bandeColoree,gbc);
     
                           /* logo agri */
    		gbc.gridx=0; //Ligne de départ
    		gbc.gridy=2; //Colonne de départ
    		gbc.gridheight=1; //Nombre de colonne
    		gbc.gridwidth=4; //Nombre de ligne;
    		panelHaut.add(_logoAgri,gbc);
     
    		add(panelHaut,BorderLayout.NORTH);
    }
    J'avoue être un peu perdu donc si quelqu'un est un pro du layout, qu'il n'hésite pas

    Merci.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 287
    Par défaut
    ça ira déjà mieux lorsque je ne confondrais plus gridx/gridy et gridheight/gridwidth

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 287
    Par défaut
    J'ai à peu prés réussi ce que je voulais mais cela ne fonctionne que pour ma résolution. En effet, si je passe à une résolution plus petite, certains éléments disparaissent. J'aimerais donc savoir s'il était possible de définir une taille auto, plus particuliérement pour ma barre bleue.

    Et pour ceux que ça interrese voilà la code que j'ai pondu
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
    public void init(){
    		this.setOpaque(true);
    		this.setBackground(Color.WHITE);
     
    		/* configuration du panel principal */
    		setLayout(new BorderLayout());
     
    		/* configuration du panel contenant images et textes */
    		JPanel panelHaut = new JPanel();
    		panelHaut.setLayout(new GridBagLayout());
    		GridBagConstraints gbc = new GridBagConstraints();
    		gbc.insets = new Insets(0, 0, 0, 0);
    		panelHaut.setBackground(Color.WHITE);
     
     
    		/* Initialisation des images */
    		_bandeColoree = new JLabel(Constantes.IMAGE_BARRE_COLOREE);
    		Double widthEcranPrincipal = MainFrame.getSize().getWidth();
    		Dimension dimension = new Dimension((widthEcranPrincipal.intValue()-400),50);
    		_bandeColoree.setPreferredSize(dimension);
     
     
    		_logoAgri = new JLabel(Constantes.IMAGE_AGRI);
    		_logoMi = new JLabel(Constantes.IMAGE_LOGO_PETIT_FORMAT);
     
    		/* Initialisation des textes */
    		_titre = new JLabel(BundleManager.getInstance().getMessage(this.getClass(), "titre"));
    		_titre.setFont(Constantes.POLICE_TITRE_NEW_CAMPAGNE);
    		_titre.setForeground(Constantes.COULEUR_BGBOUTONS_VERT);
     
    		_sousTitre = new JLabel(BundleManager.getInstance().getMessage(this.getClass(), "sousTitre"));
    		_sousTitre.setFont(Constantes.POLICE_SOUS_TITRE_NEW_CAMPAGNE);
     
    		/* bandeColoree */
    		gbc.gridx=0; //Colonne de départ
    		gbc.gridy=0; //Ligne de départ
    		gbc.gridheight=1; //Nombre de Ligne
    		gbc.gridwidth=2; //Nombre de Colonne
    		gbc.anchor = GridBagConstraints.FIRST_LINE_START; //Emplacement en haut à gauche de la case
    		gbc.insets = new Insets(0, 0, 0, 0); //Marge
    		panelHaut.add(_bandeColoree,gbc);
     
    		/* logo */
    		gbc.gridx=0; //Colonne de départ
    		gbc.gridy=1; //Ligne de départ
    		gbc.gridheight=1; //Nombre de ligne
    		gbc.gridwidth=1; //Nombre de Colonne
    		gbc.anchor = GridBagConstraints.FIRST_LINE_START; 
    		gbc.insets = new Insets(0, 0, 0, 0); //Marge
    		panelHaut.add(_logo,gbc);
     
    		/* logo agri */
    		gbc.gridx=2; //Colonne de départ
    		gbc.gridy=0; //Ligne de départ
    		gbc.gridheight=GridBagConstraints.REMAINDER; //Dernier de sa ligne
    		gbc.gridwidth=GridBagConstraints.REMAINDER; //Dernier de colonne
    		gbc.anchor = GridBagConstraints.LAST_LINE_END; 
    		gbc.insets = new Insets(0, 0, 0, 0); //Marge
    		panelHaut.add(_logoAgri,gbc);
     
    		/* titre */
    		gbc.gridx=1; //Colonne de départ
    		gbc.gridy=2; //Ligne de départ
    		gbc.gridheight=1; //Dernier de sa ligne
    		gbc.gridwidth=1; //Dernier de colonne
    		gbc.anchor = GridBagConstraints.CENTER; 
    		gbc.insets = new Insets(0, 0, 0, 0); //Marge
    		panelHaut.add(_titre,gbc);
     
    		/* soustitre */
    		gbc.gridx=1; //Colonne de départ
    		gbc.gridy=3; //Ligne de départ
    		gbc.gridheight=1; //Nombre de lignes
    		gbc.gridwidth=1; //Nombre de colonnes
    		gbc.anchor = GridBagConstraints.CENTER; 
    		gbc.insets = new Insets(0, 0, 0, 0); //Marge
    		panelHaut.add(_sousTitre,gbc);
     
     
    		add(panelHaut,BorderLayout.NORTH);
     
     
    	}
    Merci

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 70
    Par défaut
    le probleme du GridbagLayout est (il me semble) qu'il fixe les valeurs de taille et position (?)

    du coup en agrandissant la fenetre plus rien n'est au bon endroit

    dans ton cas je créerai ton panel "haut" en BorderLayout et j'insérerai d'autres panels avec des contraintes verticales ou horizontales dans les différentes possibilités de placement

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    		Container contentPane = getContentPane();
    		contentPane.add(PaneNord, BorderLayout.PAGE_START);
    		contentPane.add(PaneCentre, BorderLayout.CENTER);
    		contentPane.add(PaneSud, BorderLayout.PAGE_END);
    		contentPane.add(PaneDroit, BorderLayout.LINE_END);
    		contentPane.add(PaneGauche, BorderLayout.LINE_START);
                   ...............................
                   JPanel PaneStart = new JPanel();
                   JPanel PaneEnd = new JPanel();
     
                   paneNord.add(PaneStart, BorderLayout.PAGE_START);
                   paneNord.add(PaneEnd, BorderLayout.LINE_END);
    et ensuite tu places des objets dedans comme tu veux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    		PaneStart.setLayout(new BoxLayout(PaneStart, BoxLayout.X_AXIS));
                    paneStart.add(Bouton1);
                    paneStart.add(JTextField1);
                    ....................................
    du coup sans contraintes meme en agrandissant ta fenetre les objets s'agrandissent et se placent au bon endroit


  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 287
    Par défaut
    Salut quadra38,

    Je te remercie pour ta réponse, mais j'ai un peu de mal à comprendre sa logique . Pourrais-tu être un peu plus précis STP?

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    le probleme du GridbagLayout est (il me semble) qu'il fixe les valeurs de taille et position (?)
    Faux. Le GridbagLayout permet de faire pas mal de choses qui nécessiterait l'utilisation simultanée de plusieurs autres layout.
    Il faut juste passer un peu de temps pour le maîtriser.

Discussions similaires

  1. [XL-2010] Aide sur graph dans excel
    Par jessfranzle dans le forum Excel
    Réponses: 1
    Dernier message: 01/08/2013, 09h14
  2. Aide sur VLOOKUP dans vba
    Par Mag555 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/08/2011, 14h35
  3. Aide sur gchar* dans GList
    Par Moravski dans le forum GTK+ avec C & C++
    Réponses: 18
    Dernier message: 14/04/2010, 14h41
  4. Aide sur datagrid dans VB6/Mysql
    Par scm10 dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 14/03/2009, 15h12
  5. [UI]Aide sur les GridBagLayout
    Par leup dans le forum Agents de placement/Fenêtres
    Réponses: 8
    Dernier message: 19/05/2005, 17h35

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