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 :

utilisation du 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 confirmé
    Inscrit en
    Juin 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 98
    Par défaut utilisation du GridBagLayout
    Bonjour,
    je tente d'utiliser le GridBagLayout pour faire une fenetre swing.
    J'ai regardé la FAQ ("Comment simplifier l'utilisation du GridBagLayout ?") mais je me retrouve encore avec des résultats que j'ai bien du mal à expliquer.

    voici un peu de mon 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
     
    GridBagLayout layout = new GridBagLayout();
    p.setLayout(layout);
     
    // construction des contraintes et ajout des couples composant/contraintes
     
    GridBagConstraints c1 = new GridBagConstraints();
    c1.gridx = 0;
    c1.gridy = 0;
    c1.gridwidth = 7;
    c1.gridheight = 1;
    c1.fill = GridBagConstraints.BOTH;
    c1.anchor = GridBagConstraints.EAST;
    c1.weightx = 100;
    c1.weighty = 0;
    p.add(l1, c1);
     
    GridBagConstraints c2 = new GridBagConstraints();
    c2.gridx = 7;
    c2.gridy = 0;
    c2.gridwidth = 19;
    2.gridheight = 1;
    c2.fill = GridBagConstraints.BOTH;
    c2.weightx = 100;
    c2.weighty = 0;          
    p.add(l2, c2);
     
    GridBagConstraints c3 = new GridBagConstraints();
    c3.gridx = 0;
    c3.gridy = 1;
    c3.gridwidth = 5;
    c3.gridheight = 1;
    c3.fill = GridBagConstraints.BOTH;
    c3.anchor = GridBagConstraints.EAST;
    c3.weightx = 100;
    c3.weighty = 0;
    p.add(preseries, c3);
     
    GridBagConstraints c4 = new GridBagConstraints();
    c4.gridx = 5;
    c4.gridy = 1;
    c4.gridwidth = 8;
    c4.gridheight = 1;
    c4.fill = GridBagConstraints.BOTH;
    c4.weightx = 100;
    c4.weighty = 0;
    p.add(preseriesField, c4);
    ...
    j'ai encore plein de composant à mettre mais j'ai simplifié afin de poser ma question. Avec le code ci-dessous, je pensais avoir un truc comme l'image en pièce jointe nommée 'espere.PNG' mais je me retrouve avec l'image 'fenetre.PNG'.
    Voila je ne comprend (pourquoi les composant sont alignés alors que je voulais un décalage,...)

    merci à ceux qui auront la patience de bien vouloir répondre.
    Images attachées Images attachées   

  2. #2
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 42
    Par défaut
    Déjà un bon site

    http://louis.cova.neuf.fr/blocs-notes/page11.html

    Ensuite
    tes Gridx devraient être 0 et 1 seulement pas de 5 7 ....
    Ensuite weightxet weighty s'utilisent entre 0 et 1.

    Je suis pas un expert mais pour bien configurer son GridBagLayout il faut du temps ....

    Bon courage

  3. #3
    Membre émérite Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Par défaut
    En effet le GridBagLayout est très efficace mais assez dur à maitriser... je te conseillerais de passer par des layouts plus simple au début.
    Il y a eu création d'un topic il y'a quelques jours qui ressence les différents Layout et leur emploi jettes y un oeil


    EDIT: tu gagneras un peu de temps => Layouts

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 98
    Par défaut
    Ensuite weightxet weighty s'utilisent entre 0 et 1.
    Euh... ça contredit la FAQ
    extrait de la FAQ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    c6.weightx = 100;
    c6.weighty = 100;
    ...
    tes Gridx devraient être 0 et 1 seulement pas de 5 7 ....
    pareil, je ne comprend pas trop. Si tu as par exemple, 3 composant sur la même ligne, le 3ème sera au moins en position 3 (donc gridx=3) et encore si il a une largeur de 1 case. Et encore un problème avec la FAQ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    c7.gridx = 2;
    c7.gridy = 0;
    Dites moi si je me trompe quelque part...


    je te conseillerais de passer par des layouts plus simple au début.
    J'ai déjà vu les autres layout. Je ne m'aventure pas dans le GridBagLayout dès le début, je suis pas fou. Si je veux l'utiliser, c'est que ma fenêtre à faire est vraiment compliquée.

    Je vais lire vos liens.

  5. #5
    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
    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
     
    public class Test extends JFrame {
     
    	public static void main(String[] args) {
     
    		Test fenetre = new Test();
     
    		fenetre.getContentPane().setLayout(new GridBagLayout());
     
    		GridBagConstraints c1 = new GridBagConstraints();
    		c1.gridx = 0;
    		c1.gridy = 0;
    		c1.gridwidth = 7;
    		c1.gridheight = 1;
    		c1.fill = GridBagConstraints.BOTH;
    		c1.anchor = GridBagConstraints.EAST;
    		c1.weightx = 0;
    		c1.weighty = 0;
    		fenetre.getContentPane().add(new JTextField(10), c1);
     
    		GridBagConstraints c2 = new GridBagConstraints();
    		c2.gridx = 7;
    		c2.gridy = 0;
    		c2.gridwidth = 19;
    		c2.gridheight = 1;
    		c2.fill = GridBagConstraints.BOTH;
    		c2.weightx = 0;
    		c2.weighty = 0;
    		fenetre.getContentPane().add(new JTextField(40), c2);
     
    		GridBagConstraints c3 = new GridBagConstraints();
    		c3.gridx = 0;
    		c3.gridy = 1;
    		c3.gridwidth = 5;
    		c3.gridheight = 1;
    		c3.fill = GridBagConstraints.BOTH;
    		c3.anchor = GridBagConstraints.EAST;
    		c3.weightx = 0;
    		c3.weighty = 0;
    		fenetre.getContentPane().add(new JLabel("Preseries"), c3);
     
    		GridBagConstraints c4 = new GridBagConstraints();
    		c4.gridx = 5;
    		c4.gridy = 1;
    		c4.gridwidth = 8;
    		c4.gridheight = 1;
    		c4.fill = GridBagConstraints.BOTH;
    		c4.weightx = 0;
    		c4.weighty = 0;
    		fenetre.getContentPane().add(new JTextField(25), c4);
     
    		fenetre.setSize(600, 300);
    		fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		fenetre.setVisible(true);
     
    	}
     
    }
    Au départ, il faut mettre tout tes poids (weightx et weighty) à 0.
    J'ai juste mis un nombre de colonnes à tes JTexfields.
    Une fois que tu as ce que tu veux, tu pourras faire varier les poids pour ne pas que tes composants soient groupés au centre.

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 42
    Par défaut
    Citation Envoyé par troussepoil Voir le message
    Euh... ça contredit la FAQ
    extrait de la FAQ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    c6.weightx = 100;
    c6.weighty = 100;
    ...

    pareil, je ne comprend pas trop. Si tu as par exemple, 3 composant sur la même ligne, le 3ème sera au moins en position 3 (donc gridx=3) et encore si il a une largeur de 1 case. Et encore un problème avec la FAQ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    c7.gridx = 2;
    c7.gridy = 0;
    Dites moi si je me trompe quelque part...



    J'ai déjà vu les autres layout. Je ne m'aventure pas dans le GridBagLayout dès le début, je suis pas fou. Si je veux l'utiliser, c'est que ma fenêtre à faire est vraiment compliquée.

    Je vais lire vos liens.
    Pour les points je te cite le tutorial JAVA
    http://java.sun.com/docs/books/tutor...t/gridbag.html
    Generally weights are specified with 0.0 and 1.0 as the extremes: the numbers in between are used as necessary
    Justement pour tes Gridx Gridy je disais que dans ton cas tu ne devrais avoir que 0 et 1 à chaque ligne. Sinon évidemment les chiffres peuvent être plus grand.
    Mais tu n'as bien que 2 composants par ligne non ?
    x=0 y=0
    et
    x=0 Y=0
    Et pareil pour y=1.
    Ensuite effectivement en lisant les tutoriel et en jouant sur les poids et fill tu peux changer les tailles de tes composants sur la ligne.

    Bon courage

  7. #7
    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
    dans ton cas tu ne devrais avoir que 0 et 1 à chaque ligne
    Je ne suis pas d'accord dans la mesure où ses composants ne doivent pas avoir la même taille. Donc, comme il spécifie le gridwidth , il doit spécifier le gridx correspondant.

  8. #8
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 42
    Par défaut
    Citation Envoyé par troussepoil Voir le message
    Euh... ça contredit la FAQ

    pareil, je ne comprend pas trop. Si tu as par exemple, 3 composant sur la même ligne, le 3ème sera au moins en position 3 (donc gridx=3) et encore si il a une largeur de 1 case. Et encore un problème avec la FAQ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    c7.gridx = 2;
    c7.gridy = 0;
    Dites moi si je me trompe quelque part...
    Attention pour la largeur des cases n'utilise pas le gridx. Celui-ci est reservé pour le placement.
    Pour la taille tu as

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    gridwidth =6 (que ta cellule fasse la taille de 6 cellules sur les autres lignes)
    weightx
    fill
    Encore une fois pas de miracle seuls les docs tuto et la pratique peuvent te faire arriver au bon résultat

    Damien

Discussions similaires

  1. Utilisation du GridBagLayout
    Par Zarrok dans le forum Débuter
    Réponses: 1
    Dernier message: 29/03/2015, 21h26
  2. GridBagLayout utilisation du vide
    Par Sebeee dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 15/03/2012, 14h41
  3. [Swing] Utilisation de GridBagLayout
    Par yelbied dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 05/02/2008, 11h40
  4. utilisation du GridBagLayout
    Par franfr57 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 11/11/2006, 10h02
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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