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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 310
    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 confirmé
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    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 éclairé

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 310
    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

  4. #4
    Membre très 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
    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 ^^

  5. #5
    Membre éclairé

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 310
    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 Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    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 chevronné

    Inscrit en
    Juillet 2008
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 232
    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 confirmé
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

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

  9. #9
    Membre éclairé 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 : 42
    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
    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 éclairé

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 310
    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

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