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 :

pb avec GridBagLayout


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut pb avec GridBagLayout
    Bonjour,
    Ayant lu un peu partout que le GridBagLayout, c'est le top, je m'y suis mis. J'ai réussi globalement à faire des trucs qui tenaient la route, mais voilà, il me reste un pb que j'ai isolé dans un cas simple.

    J'aimerai faire deux lignes de composants.
    Sur la première ligne, 3 composants de largeur identique.
    Sur la seconde, 2 composants de largeur identique.

    Voilà comment je procède, je les places dans le sens de la lecture, sans toucher au gridx et gridy, je ne joue que sur les gridheight et gridwidth (dans cet exemple, je n'utilise que gridwidth). Je ne pense pas que les anchor, weight et filll jouent un role important dans cet exemple.

    Pour réaliser cet exemple, je donne pour gridwidth les valeurs suivantes :
    1, 2, REMAINDER, 2, REMAINDER

    et j'obtiens une truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    -------------
    |   |   |   |
    -------------
    |   |       |
    -------------
    alors que j'aimerais avoir un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    -------------
    |   |   |   |
    -------------
    |     |     |
    -------------

  2. #2
    Membre Expert Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Par défaut
    et si tu essayait de mettre weightx=2 pour la 1 ere ligne et weightx=3 pour la seconde ?

  3. #3
    Membre éclairé Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Par défaut
    salut,

    a priori il faut que tu definisses le plus petit composant (ppc):

    pour faire ce que tu veux je dirai qu'il faut 6 ppc / ligne

    sur la premiere ligne tu auras 3 x2ppc composants
    sur la deuxieme ligne tu auras 2 x 3ppc et la ton index en x fonctionnera correctement

    -------------
    | . | . | . |
    -------------
    | . . | . . |
    -------------

  4. #4
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Alors, pour les poids, ça n'arrange pas les choses, ça ne sert qu'à la redistribution de l'espace libre. J'ai quand même testé, mais le résultat est le même

    Pour le coup des 6 composants, j'avais essayé, mais ça ne change rien. C'est assez rageant.

    D'autres idées?

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Avril 2005
    Messages : 277
    Par défaut
    Ben alors la ...

    Je viens de tester ... Je pensais que ca allait rouler ...

    Impossible effectivement ...

    Je ne vois pas de solution a part scinder chaque ligne en un container indépendant ...

    Dsl ^^

    PS : je file mon source au cas ou ca fasse gagner du temps a ceux qui chercherons ...

    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
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.HeadlessException;
    import java.awt.Insets;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    public class test_gridbaglayout extends JFrame
    {
     
      public static GridBagLayout      gbl_tpc = new GridBagLayout();
      public static GridBagConstraints gbc_tpc = new GridBagConstraints();
     
      public JButton                   a1      = new JButton("a1");
      public JButton                   a2      = new JButton("a2");
      public JButton                   a3      = new JButton("a3");
      public JButton                   b1      = new JButton("b1");
      public JButton                   b2      = new JButton("b2");
     
      public test_gridbaglayout() throws HeadlessException {
        super();
     
        getContentPane().setLayout(gbl_tpc);
     
        positionner(gbc_tpc, 0, 0, 2, 1, 0, 0, GridBagConstraints.BOTH, GridBagConstraints.CENTER);
        gbl_tpc.setConstraints(a1, gbc_tpc);
        add(a1);
     
        positionner(gbc_tpc, 2, 0, 2, 1, 0, 0, GridBagConstraints.BOTH, GridBagConstraints.CENTER);
        gbl_tpc.setConstraints(a2, gbc_tpc);
        add(a2);
     
        positionner(gbc_tpc, 4, 0, 2, 1, 0, 0, GridBagConstraints.BOTH, GridBagConstraints.CENTER);
        gbl_tpc.setConstraints(a3, gbc_tpc);
        add(a3);
     
        positionner(gbc_tpc, 0, 1, 3, 1, 50, 0, GridBagConstraints.NONE, GridBagConstraints.CENTER);
        gbl_tpc.setConstraints(b1, gbc_tpc);
        add(b1);
     
        positionner(gbc_tpc, 3, 1, 3, 1, 50, 0, GridBagConstraints.NONE, GridBagConstraints.CENTER);
        gbl_tpc.setConstraints(b2, gbc_tpc);
        add(b2);
     
        setVisible(true);
        pack();
      }
     
      private void positionner(GridBagConstraints gbc,
                               int gx,
                               int gy,
                               int gw,
                               int gh,
                               int wx,
                               int wy,
                               int remplir,
                               int aligner) {
     
        gbc.gridx = gx;
        gbc.gridy = gy;
        gbc.gridwidth = gw;
        gbc.gridheight = gh;
        gbc.weightx = wx;
        gbc.weighty = wy;
        gbc.fill = remplir;
        gbc.anchor = aligner;
      }
     
      public static void main(String[] args) {
     
        new test_gridbaglayout();
     
      }
     
    }

  6. #6
    Membre éclairé Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Par défaut
    Citation Envoyé par Deaf
    Pour le coup des 6 composants, j'avais essayé, mais ça ne change rien. C'est assez rageant.
    bizarre ....

    va voir ici , grace a ce tuto j'ai toujours reussi a faire ce que je voulais , meme les schémas les plus tordus, donc si tu appliques ca à la lettre tu devrais arriver à tes fins ....

    http://www.developpez.net/forums/sho...=gridbaglayout

  7. #7
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    vi, mais bon, c'est toujours le même pb.

    J'ai essayé avec la méthode du switch. voici le code:
    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
     
    private static Container p;
    	private static JFrame f;
    	public static int x[]   = { 0, 0, 2, 3, 4};
    	public static int y[]   = { 0, 1, 0, 1, 0};
    	public static int larg[]= { 2, 3, 2, 3, 2};
    	public static int haut[]= { 1, 1, 1, 1, 1};
    	public static int px[]  = {1,1,1,1,1};
    	public static int py[]  = {1,1,1,1,1};
    	public static JPanel pan1;
    	public static JPanel pan2;
    	public static JPanel pan3;
    	public static JPanel pan4;
    	public static JPanel pan5;
     
    	public static void main(String[] args) {
    		f = new JFrame();
    		f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    		p = f.getContentPane();
    		GridBagLayout gbl = new GridBagLayout();
    		p.setLayout(gbl);
     
    		GridBagConstraints c = new GridBagConstraints();
    		c.fill = GridBagConstraints.BOTH ;
    		pan1=new JPanel();
    		pan1.setBackground(Color.blue);
    		pan2=new JPanel();
    		pan2.setBackground(Color.white);
    		pan3=new JPanel();
    		pan3.setBackground(Color.red);
    		pan4=new JPanel();
    		pan4.setBackground(Color.green);
    		pan5=new JPanel();
    		pan5.setBackground(Color.black);
     
    		for (int i=0; i<x.length; i++)
    		{
    			c.gridx=x[i]; c.gridy=y[i];
    			c.gridwidth=larg[i]; c.gridheight=haut[i];
    			c.weightx=px[i]; c.weighty=py[i];
    			switch(i)
    			{
    			case 0: p.add( pan1, c ); break;
    			case 1: p.add( pan2, c ); break;
    			case 2: p.add( pan3, c ); break;
    			case 3: p.add( pan4, c ); break;
    			case 4: p.add( pan5, c ); break;
     
    			}
    		}
     
    		f.setSize(450, 450);
    		f.setVisible(true);
    	}
    Et j'ai toujours le même résultat.

    Je commence à me demander si cet exemple est vraiment réalisable avec un seul GridBagLayout. ça serait dommage en tout cas.

  8. #8
    Membre éprouvé Avatar de LeXo
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 147
    Par défaut
    GridGagLayout c vraiment super

    tu peux tout faire mais faut juste comprendre comment ça marche

    bon je te mets un lien

    Voila

    Allez Bon courage

Discussions similaires

  1. Problème avec GridBagLayout dans JPanel
    Par caneman dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 19/12/2006, 22h32
  2. Réponses: 2
    Dernier message: 04/12/2006, 20h40
  3. probleme avec GridBagLayout
    Par moi89 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 09/05/2006, 12h03
  4. [Swing]Gestion du positionnement avec GridBagLayout
    Par yoshï dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 15/04/2006, 21h14
  5. Petit soucis avec GridBagLayout ...
    Par Mike888 dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 24/03/2006, 11h33

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