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 :

Problème de placement avec un GridBagLayout


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 152
    Billets dans le blog
    5
    Par défaut Problème de placement avec un GridBagLayout
    Salut à tous et bonne année par la même occasion

    Je suis en train de faire des modifications sur une application Java écrite par d'autres personnes et j'ai des souci avec le GidBagLayout.
    Mon problème est le suivant:
    Je veux afficher sur la partie gauche de mon écran un JLabel avec en dessous un JTree et sur la partie droite différents label, champs de saisie et checkbox sur 2 colonnes
    Ca marche relativement bien sauf que j'ai un énorme espace entre ma partie gauche et ma partie droite. J'aimerais plutôt que cet espace se situe à la fin de la partie droite de mon JPanel.

    Voici comment sont définis les GridBagConstraints pour chaque composant
    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
     
    // ---------------------------------------------
    	// Grid bag constraints des éléments du panneau aérosol
    	// --------------------------------------------
    	// Colonne gauche
    	GridBagConstraints gbc_TypeAerosolsLabel = new GridBagConstraints(0, 0,
    		1, 1, 0.0, 0.0, GridBagConstraints.WEST,
    		GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0);
     
    	GridBagConstraints gbc_TypeAerosolsTree = new GridBagConstraints(0, 1,
    		1, GridBagConstraints.REMAINDER, 0.8, 1.0,
    		GridBagConstraints.LINE_START, GridBagConstraints.VERTICAL,
    		new Insets(20, 20, 20, 20), 0, 0);
    	// Colone droite
    	GridBagConstraints gbc_StratoLabel = new GridBagConstraints(1, 0, 1, 1,
    		0.2, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.NONE,
    		new Insets(5, 5, 5, 5), 0, 0);
    	GridBagConstraints gbc_StratoCombo = new GridBagConstraints(1, 1, 2, 1,
    		0.2, 0.0, GridBagConstraints.WEST,
    		GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0);
    	GridBagConstraints gbc_VisibiliteLabel = new GridBagConstraints(1, 2,
    		1, 1, 0.2, 0.0, GridBagConstraints.WEST,
    		GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0);
    	GridBagConstraints gbc_VisibiliteField = new GridBagConstraints(1, 3,
    		1, 1, 0.2, 0.0, GridBagConstraints.WEST,
    		GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0);
    	GridBagConstraints gbc_VisibiliteUnite = new GridBagConstraints(2, 3,
    		1, 1, 0.2, 0.0, GridBagConstraints.WEST,
    		GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0);
    	GridBagConstraints gbc_VisibiliteCB = new GridBagConstraints(1, 4, 1,
    		1, 0.2, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE,
    		new Insets(5, 5, 5, 5), 0, 0);
     
    	GridBagConstraints gbc_ConcentrationLabel = new GridBagConstraints(1,
    		5, 1, 1, 0.2, 0.0, GridBagConstraints.WEST,
    		GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0);
    	GridBagConstraints gbc_ConcentrationField = new GridBagConstraints(1,
    		6, 1, 1, 0.2, 0.0, GridBagConstraints.WEST,
    		GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0);
    	GridBagConstraints gbc_ConcentrationUnite = new GridBagConstraints(2,
    		6, 1, 1, 0.2, 0.0, GridBagConstraints.WEST,
    		GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0);
    	GridBagConstraints gbc_ConcVisButton = new GridBagConstraints(1, 7, 1,
    		1, 0.2, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE,
    		new Insets(5, 5, 5, 5), 0, 0);
    Si quelqu'un a une idée??

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    J'aurais surtout tendance à séparer physiquement les deux parties dans deux JPanel séparés. (genre en les mettant dans un JSplitPane).

    Puis de faire que sur ton JPanel de droite, le dernier champ soit en fill Horizontal, avec un weightx approprié

  3. #3
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 152
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par sinok Voir le message
    J'aurais surtout tendance à séparer physiquement les deux parties dans deux JPanel séparés. (genre en les mettant dans un JSplitPane).
    Je préfrèrerais utiliser cette solution en dernier recours car elle risque de me pose des problèmes par ailleurs.

    Citation Envoyé par sinok Voir le message
    Puis de faire que sur ton JPanel de droite, le dernier champ soit en fill Horizontal, avec un weightx approprié
    Justement qu'est ce un weightx approprié car dans les tutoriels et les divers aide c'est pas très explicite.

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765

  5. #5
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 152
    Billets dans le blog
    5
    Par défaut
    Oui je connais bien ce tutoriel et il m'a bien aidé mais je dois avouer qu'il n'indique pas de règle précise ni ne décrit exactement comment fonctionne ces propriétés. L'auteur en convient lui même je cite:
    Ces deux propriétés sont très subtiles et, mal utilisées, peuvent provoquer des désastres au niveau de l'interface que nous développons.

  6. #6
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 152
    Billets dans le blog
    5
    Par défaut
    Bon après une relecture plus attentive du tutoriel. J'ai partiellement résolu mon problème. J'ai réussi à supprimer l'espace entre mon arbre et les autres composant de la colonne de droite en mettant le weightx de tous les éléments de chaque ligne à 0 sauf le dernier qui est mis à 1.
    Par contre en fonction de ce qui est sélectionné dans l'arbre, j'ai certains éléments de la colonne de droite qui ne sont pas affiché. Dans certain cas il y en a même aucun. Du coups dans ce cas là mon arbre se retrouve au milieu du panel au lieu d'être à gauche. Est il possible de récupérer le GridBagConstraints à partir du JTree de le modifier pour que mon arbre reprenne sa position à gauche.

  7. #7
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Sépare ton interface en deux panels, un pour l'arbre, l'autre pour le formulaire.

    Et place ces deux panels dans un JPanel en BorderLayout ou un JSplitPane.

  8. #8
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 152
    Billets dans le blog
    5
    Par défaut
    Je vais essayer ça

  9. #9
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 152
    Billets dans le blog
    5
    Par défaut
    Finalement j'ai résolu le problème autrement. A savoir que j'ai créé un GridBagConstraints dont le weightx est à 1.0 et à la fin de ma première ligne je place un JLabel vide. Ce qui fait que quand mes autres composant ne sont pas affiché ce "JLabel vide" prend toute la place qui reste est mon arbre ne va plus s'afficher au centre de la fenêtre.
    C'est l'astuce que les concepteurs originaux de l'application ont utilisé. Je ne trouve pas ça super propre mais ça marche bien alors j'utilise

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 48
    Par défaut
    Tu peux éviter d'utiliser un label pour rien.
    Le label au dessus de ton arbre, donne lui une largeur de 2 colonnes.
    Tu aura donc le label positionné en (0,0) avec gridwidth à 2.

    Concernant ton arbre tu lui donne une largeur de 1 colonne:
    Tu aura donc un arbre positionné en (0,1) avec gridwidth à 1.

    Ensuite, tu fais entrer en jeux les weightx.

    Tu veux que la partie de droite soit redimensionnable mais pas la gauche, mais que si plus rien à droite, il n'y ai que le label qui s'élargisse, et pas l'arbre.

    Alors il faut que tu donne un trés fort weightx à tes composants de droite, genre 0.99.
    Tu donne un weigthx de 0 à ton arbre et de 0.01 à ton label en haut à gauche.

    Le gridbaglayout interprétera comme ça:
    -> colonne 0 pas redimensionnable
    -> colonne 1 redimensionnable mais que si rien à droite (donc ne redimensionnera que le label en haut à gauche)
    -> colonne 2 redimensionnable et prioritaire pour le redimmensionnement.

    En gros les valeurs de weightx fournies sont des pourcentages.
    Imaginons un truc avec 2 colonnes: si tu met la première avec weightx à 0.33 et la 2eme avec 0.67 alors tu aura la première qui prendra 1/3 de l'espace et la deuxième 2/3.
    Mais les valeurs fournies sont surtout importantes de par leurs valeurs relatives.
    Si tu met ta 1ere colonne à 0.6 et ta deuxième à 0.9, il verra que la première colonne doit être plus petite d'un tiers à la 2eme (0.6=(2/3)*0.9).

  11. #11
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 152
    Billets dans le blog
    5
    Par défaut
    Pas évident à mettre en place car ce ne sont pas toujours les mêmes éléments qui sont affiché ou non.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 48
    Par défaut
    Perso, je fais généralement comme sinok, des sous panels...
    Je trouve ça plus clair pour s'y retrouver dans les layout.

  13. #13
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 152
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par kaoualeo Voir le message
    Perso, je fais généralement comme sinok, des sous panels...
    Je trouve ça plus clair pour s'y retrouver dans les layout.
    C'est vrai mais là je part d'un existant relativement complexe et j'ai peu de libertés et pas des masses de temps non plus

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de placement avec balise "object"
    Par qwertz1 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 0
    Dernier message: 10/11/2012, 10h45
  2. Problèmes d'agencement avec GridBagLayout
    Par -The_Reaper- dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 02/08/2010, 14h17
  3. placement d'objet graphique avec un gridbaglayout
    Par illegalsene dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 09/08/2006, 14h36
  4. [Swing] Problème avec les GridBagLayout
    Par CrazySeb dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 28/04/2006, 15h47
  5. problème de placement avec IE
    Par Invité dans le forum Langage
    Réponses: 2
    Dernier message: 20/12/2005, 00h46

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