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 :

GridBagLayout : problème de positionnement


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre actif

    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 310
    Points : 208
    Points
    208
    Par défaut GridBagLayout : problème de positionnement
    Bonjour

    Désolé me revoila avec mes problèmes d'interfaces, je passe plus de temps sur les interfaces que sur le code...

    J'aimerai faire ceci:

    Une simple fenêtre avec une zone blanche contenant un label et un champ texte. Donc pour ça j'utilise un FlowLayout dans lequel j'ai un JPanel avec pour layout un GridBagLayout. J'ai donné une taille préférée à mon JPanel de 200 * 200.

    Or j'arrive qu'à faire ça:

    Je n'arrive pas à faire en sorte que mon champ texte soit juste en dessous de mon label.

    Est ce que c'est possible au moins avec un GridBagLayout?

    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	private JPanel getPanelGeneral() {
    		if (panelGeneral == null) {
    			panelGeneral = new JPanel();
     
    			FlowLayout flow1 = new FlowLayout();
    			panelGeneral.setLayout(flow1);
    			panelGeneral.add(getPanelResultat(), BorderLayout.NORTH);
     
    		}
    		return panelGeneral;
    	}
    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
    	protected JPanel getPanelResultat() {
    		if (panelResultat == null) {
    			panelResultat = new JPanel();
    			panelResultat.setName("panelResultat");
    			panelResultat.setLayout(new GridBagLayout());
    			panelResultat.setBackground(Color.WHITE);
    			panelResultat.setPreferredSize(new Dimension(200,200));
     
    			// Place le label du champ texte
    			GridBagConstraints gridBagLabel2 = new GridBagConstraints();
    			gridBagLabel2.gridx = 0;
    			gridBagLabel2.gridy = 0;
    			gridBagLabel2.insets = new Insets(5, 5, 5, 5);
    			gridBagLabel2.gridwidth = 1;
    			gridBagLabel2.gridheight = 1;
    			gridBagLabel2.weightx = 1;
    			gridBagLabel2.weighty = 1;
    			gridBagLabel2.anchor = GridBagConstraints.NORTHWEST;
    			panelResultat.add(getLblResultat(),gridBagLabel2);
     
     
    			GridBagConstraints gridBagChampTexte2 = new GridBagConstraints();
    			gridBagChampTexte2.gridx = 0;
    			gridBagChampTexte2.gridy = 1;
    			gridBagChampTexte2.insets = new Insets(5, 5, 5, 5);
    			gridBagChampTexte2.gridwidth = 1;
    			gridBagChampTexte2.gridheight = 1;
    			gridBagChampTexte2.weightx = 1;
    			gridBagChampTexte2.weighty = 1;
    			gridBagChampTexte2.anchor = GridBagConstraints.NORTHWEST;
    			panelResultat.add(getTxtResultat(),gridBagChampTexte2);
     
    		}
     
    		return panelResultat;
    	}
    Merci d'avance pour votre aide, je sais plus quoi faire la.

  2. #2
    Membre régulier
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Points : 88
    Points
    88
    Par défaut
    Bonjour

    mois toujours je prefere panelGeneral.setLayout(null);

    comme ça je peut preciser la position et la taillle de n'importe quel composant

    par



    - label.setBounds(10,20,50,20);
    - textField.setBounds(10,50,50,20);

    -setBounds(x,y,largeur,hauteur)

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Août 2008
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 265
    Points : 230
    Points
    230
    Par défaut
    Je dirais que tu as deux cellules dans ton GridBagLayout. Ton panel est donc divisé en deux. Faudrait que tu créés un peu plus de cellules.


    Essaye en utilisant le GridLayout tout simple. Tu lui donnes 2 colonne et 4 lignes. Ainsi tu places ton premier élément dans la première colonne et la première ligne. Ensuite tu places ton deuxième éléments dans la deuxième ligne de la première colonne.


    Je sais pas si c'est "propre" et je sais même pas si ça marche mais c'est pas long d'essayer ^^

  4. #4
    Membre actif

    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 310
    Points : 208
    Points
    208
    Par défaut
    Bonjour

    mois toujours je prefere panelGeneral.setLayout(null);

    comme ça je peut preciser la position et la taillle de n'importe quel composant

    par



    - label.setBounds(10,20,50,20);
    - textField.setBounds(10,50,50,20);

    -setBounds(x,y,largeur,hauteur)
    Merci
    Perso je serai bien tenté de faire ça, ça m'éviterai de perdre des heures et des heures sur les interfaces. Pour l'instant on va dire que j'ai du passer grand maximum 30 minutes sur le code et une dizaine d'heure sur l'interface :/
    Mais d'après ce que j'avais lu, c'est pas portable d'utiliser cette méthode

  5. #5
    Membre actif

    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 310
    Points : 208
    Points
    208
    Par défaut
    Citation Envoyé par Larger Voir le message
    Je dirais que tu as deux cellules dans ton GridBagLayout. Ton panel est donc divisé en deux. Faudrait que tu créés un peu plus de cellules.


    Essaye en utilisant le GridLayout tout simple. Tu lui donnes 2 colonne et 4 lignes. Ainsi tu places ton premier élément dans la première colonne et la première ligne. Ensuite tu places ton deuxième éléments dans la deuxième ligne de la première colonne.


    Je sais pas si c'est "propre" et je sais même pas si ça marche mais c'est pas long d'essayer ^^
    Je vais essayer ça, merci

  6. #6
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gridBagLabel2.weighty = 0;
    Si tu le met à 1.0, alors le composant dispose d'un espace en plus si la cellule est plus grande que le composant. En le mettant à 0, tu dit à la cellule de ne pas se redimensionner avec plus d'espace même si elle peut en disposer.

  7. #7
    Membre éclairé

    Inscrit en
    Juillet 2008
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 232
    Points : 837
    Points
    837
    Par défaut
    Utiliser null comme LayoutManager n'est jamais conseille si ta fenetre est redimensionnable, ou la police peut changer, ou ton texte peut etre internationalise. Le probleme est que ca ne rearrange pas les composants dans ces cas.

    Ne peux-tu utiliser javax.swing.Box au lieu de GridBagLayout?

    Sinon pour ton probleme essaie d'ajouter un troisieme composant qui occupe le reste de la place:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	GridBagConstraints gridBagFiller = new GridBagConstraints();
    	gridBagFiller.gridx = 0;
    	gridBagFiller.gridy = 2;
    	gridBagFiller.weighty = 100;
    	panelResultat.add(new JPanel(),gridBagFiller);

  8. #8
    Membre régulier
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Points : 88
    Points
    88
    Par défaut
    merci bredelet pour cette remarque c'est trés importante

  9. #9
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 251
    Points
    1 251
    Par défaut
    Citation Envoyé par bredelet Voir le message
    Utiliser null comme LayoutManager n'est jamais conseille si ta fenetre est redimensionnable, ou la police peut changer, ou ton texte peut etre internationalise. Le probleme est que ca ne rearrange pas les composants dans ces cas.
    Exactement. C'est un façon "pas très propre" de coder. Les layout managers sont là pour t'aider, tout faire à la mano c'est pas génial du tout ! M'enfin...

    Sinon, j'ai la ague impression que tu es débutant sur Swing. Pourquoi ne pas commencer avec des layout plus simple que le GridBag ? C'est un des layout les plus compliqué, commence avec plus simple. Ta zone blanche, si c'est une BorderLayout, tu mets un composant au North, en l'occurence ton label "Résultat : " et un autre au Center. Le composant au Center occupe tout l'espace qui n'est pas utilisé par les 4 autres (North, South, East and West).
    Il devrait donc en toute logique est positionnée là où tu veux.

  10. #10
    Membre actif

    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 310
    Points : 208
    Points
    208
    Par défaut
    Disons que ça fait un moment que j'essaye de m'y mettre... c'est pas la première fois que je bloque dessus et pourtant j'en ai lu des tutoriels.
    Je vais essayer avec box et borderlayout, je vous tiens au courant.

    Edit : essai avec borderlayout:

    => mon champ texte prend toute la place restante, pourtant je lui ai donné une preferedsize.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    txtResultat.setPreferredSize(new Dimension(100, 20));
    C'est normal? Merci d'avance

  11. #11
    Membre éclairé

    Inscrit en
    Juillet 2008
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 232
    Points : 837
    Points
    837
    Par défaut
    Oui c'est normal avec BorderLayout (note que c'est la taille préférée pas la taille garantie....)

  12. #12
    Membre actif

    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 310
    Points : 208
    Points
    208
    Par défaut
    D'accord merci. Comment je peux faire si je veux pas que mon composant prenne tout l'espace disponible? Mon champ texte est beaucoup trop grand comme ça et même en mettant une taille maximale ça ne passe pas.

  13. #13
    Membre régulier
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Points : 88
    Points
    88
    Par défaut
    setLayout(null)
    setBounds(10,10,10,10)

  14. #14
    Membre actif

    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 310
    Points : 208
    Points
    208
    Par défaut
    Merci mais comme dit plus haut, il vaut mieux éviter ça en cas de changement de police ou autre.

  15. #15
    Membre régulier
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Points : 88
    Points
    88
    Par défaut
    mais si ta fenetre est pas redimensionnable, ou vous allez pas changer la police pourqoi pas utiliser ça

  16. #16
    Membre actif

    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 310
    Points : 208
    Points
    208
    Par défaut
    Bah je préfère apprendre à bien coder mes interfaces java dès le début Et puis si jamais je publie mon application et qu'une personne mal voyante utilise des options pour agrandir les polices sous windows, mes composants risquent d'être disposés n'importe comment

    Je dis pas que cette solution est mauvaise, j'aurai tendance à faire comme toi tellement ça me gonfle de pas y arriver

  17. #17
    Membre actif
    Profil pro
    Inscrit en
    Août 2008
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 265
    Points : 230
    Points
    230
    Par défaut
    Hum, c'est peut-être bête comme question, mais pourquoi mettre autant de vide dans ta fenêtre ?

    Si tu veux positionner d'autres éléments, pour moi il est plus simple de les agencer tous dès le départ. Après il te suffit d'imbriquer des JPanels dans d'autres JPanels, d'y insérer tes éléments dedans.

    Avec cette méthode, des simples BorderLayout te permettrait de faire pas mal de trucs.

  18. #18
    Membre actif

    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 310
    Points : 208
    Points
    208
    Par défaut
    C'est simple c'est parceque j'ai un autre panel juste à coté qui fait cette grandeur donc j'ai voulu que mes deux panels aient la même taille.

    Bon c'est un projet à la con, c'est surtout histoire de m'entrainer un peu avec les interfaces.


  19. #19
    Membre actif
    Profil pro
    Inscrit en
    Août 2008
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 265
    Points : 230
    Points
    230
    Par défaut
    Ben voilà,

    Pour moi tes objets doivent remplir ta fenêtre. Y a des grands espaces vides !


    Créé deux JPanels à l'intérieur d'un seul. Y en a un que tu mets à RIGHT et l'autre à LEFT. Ils auront la même taille.

    Ensuite tu fais pareil pour tes autres composants. Genre pour ton panel contenant le texte à modifier, tu le scindes à nouveau en panels où tu disposes tes éléments.

    C'est comme ça que je fais et je trouve ça simple et intuitif. Après c'est sûr, c'est pas avec un BorderLayout que je vais disposer mes éléments au pixel près.
    Mais je pense que ça un autre avantage, c'est que si tu agrandis ou rétrécis ta fenêtre, la disposition doit être mieux conservée.

  20. #20
    Membre actif

    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 310
    Points : 208
    Points
    208
    Par défaut
    Je vais essayer, merci J'espère que j'y passerai pas la journée encore une fois

Discussions similaires

  1. [CSS] Problème de positionnement de DIV
    Par Oberown dans le forum Mise en page CSS
    Réponses: 11
    Dernier message: 31/01/2006, 17h03
  2. [CSS]Problème de positionnement avec div
    Par Tueur_a_gage dans le forum Mise en page CSS
    Réponses: 11
    Dernier message: 25/10/2005, 23h48
  3. [GridBagLayout] Problème de dimension pour un JScrollPane
    Par cmoa59 dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 26/07/2005, 11h58
  4. [Jtree][JScrollPane] problème de positionnement
    Par billynirvana dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 07/07/2005, 16h53
  5. Problème pour positionner une liste déroulante
    Par ouckileou dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 30/09/2004, 01h05

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