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. #21
    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
    Je recommande vraiment de voir Box. Quelque chose comme (pas teste):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       Box box = Box.createVerticalBox();
       panelResultat.add(box);
       box.add(getLblResultat());
       box.add(Box.createVerticalStrut(4));
       box.add(getTxtResultat());

  2. #22
    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
    Bon je crois que je vais laisser tomber... je perds trop de temps la dessus et rien ne marche comme je veux. Que ce soit avex box, borderlayout, gridbag, gridbaglayout...

    Est ce que vous connaissez un plug in pour eclipse permettant de placer les composants simplement sans devoir y passer des jours? Merci d'avance

  3. #23
    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
    Moi je me rends compte que j'étais pas très clair.

    Fais moi ça plutôt
    Le panel1, c'est ton carré avec "Texte à modifier", ect
    Le panel2, c'est ton "Résultat", ect

    Insère ça dans ta classe qui hérite de JFrame :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            JPanel mainPanel = new JPanel(new BorderLayout());
            this.mainPanel.add(BorderLayout.RIGHT, panel1);
            this.mainPanel.add(BorderLayout.LEFT, panel2);
            //Définir le mainPanel comme le panel de ta fenêtre.
            this.setContentPane(mainPanel);
    Après c'est pareil pour tes panel1 et panel2, il faut que tu aies plusieurs panels à l'intérieur. Tu te serviras des RIGHT, LEFT, NORTH, SOUTH et CENTER pour bien agencer tes composants.

    Le tout est de bien comprendre le truc ^^

  4. #24
    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
    Je suis tout à fait d'accord avec Larger. La gestion des layout est relativement simple, mais il faut prendre le temps de bien réfléchir la disposition des différents éléments et ne pas hésiter à imbriquer de multiples panels.

    Reprenons et complétons un peu l'exemple de Larger... (j'ai d'ailleurs corrigé une petite coquille qu'il avait fait sur le constructeur JPanel... )
    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
    JPanel mainPanel = new JPanel(new BorderLayout());
            this.mainPanel.add(getPanelOutput(), BorderLayout.RIGHT);
            this.mainPanel.add(getPanelInput(), BorderLayout.LEFT);
            //Définir le mainPanel comme le panel de ta fenêtre.
            this.setContentPane(mainPanel);
    [...]
        private JPanel getOutputanel()
        {
            JPanel panelOutput = new JPanel(new BorderLayout());
            panelOutput.add(new JLabel("Résultat"), BorderLayout.NORTH);
            panelOutput.add(getResultPanel(), BorderLayout.CENTER);
    
            return panelOutput;
        }
    
        private JPanel getResultPanel()
        {
            JPanel panelResults = new JPanel(new BorderLayout());
            JTextArea myJTextArea = new JTextArea();
            myJTextArea.setPreferredSize(new Dimension(50, 50));
            panelResults.add(myJTextArea, BorderLayout.NORTH);
    
            return panelResults;
        }
    Voilà, avec ça tu devrais déjà avoir quelque chose qui ressemble à ce que tu attends du côté droit. De la même façon, tu peux dessiner le côté gauche. Je te laisse après adapter le tout pour garder une référence vers ton JTextArea pour pourvoir remplacer le texte quand tu cliqueras sur ton bouton...

  5. #25
    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
    Citation Envoyé par leminipouce Voir le message
    Reprenons et complétons un peu l'exemple de Larger... (j'ai d'ailleurs corrigé une petite coquille qu'il avait fait sur le constructeur JPanel... )

    Autant pour moi


    Ce qui est surtout cocasse, c'est que j'ai tiré ça d'un de mes codes ... qui marche !

  6. #26
    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
    Citation Envoyé par Hell Voir le message
    Bon je crois que je vais laisser tomber... je perds trop de temps la dessus et rien ne marche comme je veux. Que ce soit avex box, borderlayout, gridbag, gridbaglayout...

    Est ce que vous connaissez un plug in pour eclipse permettant de placer les composants simplement sans devoir y passer des jours? Merci d'avance
    Qu'est-ce qui ne convient pas avec Box?
    J'ai essaye, ca a l'air de marcher. Le seul truc c'est que le Label est pas completement a gauche. Un petit coup de BorderLayout arrange ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
       Box box = Box.createVerticalBox();
       panelResultat.add(box);
       JPanel aligneLabel = new JPanel(new BorderLayout());
       aligneLabel.add(getLblResultat(), BorderLayout.WEST);
       box.add(aligneLabel);
       box.add(Box.createVerticalStrut(4));
       box.add(getTxtResultat());
    En imbriquant des Box et des JPanel avec BorderLayout comme il faut, tu devrais avoir exactement ce que tu veux.

    Tu es sous quel systeme d'exploitation pour Eclipse?

  7. #27
    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.

    Citation Envoyé par leminipouce Voir le message
    Voilà, avec ça tu devrais déjà avoir quelque chose qui ressemble à ce que tu attends du côté droit. De la même façon, tu peux dessiner le côté gauche. Je te laisse après adapter le tout pour garder une référence vers ton JTextArea pour pourvoir remplacer le texte quand tu cliqueras sur ton bouton...
    Ca marche mais moi c'est un JTextField que j'aimerai utiliser. Et problème, ce composant prend toute la place réservée et "devient" donc un textarea J'ai l'impression qu'on est pas aussi libre que dans delphi par exemple ou tu dessines vraiment ce que tu veux niveau interface. Si je fais une grande fenêtre, j'ai pas mon composant qui s'élargit automatiquement.

    Qu'est-ce qui ne convient pas avec Box?
    J'ai essaye, ca a l'air de marcher. Le seul truc c'est que le Label est pas completement a gauche. Un petit coup de BorderLayout arrange ca
    Ouais c'est un problème de ce genre la que j'avais Je vais réessayer encore une fois merci ^^

    Pour eclipse j'utilise la version 3.4 sous Windows xp.

  8. #28
    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 Larger Voir le message
    Autant pour moi


    Ce qui est surtout cocasse, c'est que j'ai tiré ça d'un de mes codes ... qui marche !

    Allons, allons, ne sois pas trop dur avec toi


    Citation Envoyé par Hell Voir le message
    Est ce que vous connaissez un plug in pour eclipse permettant de placer les composants simplement sans devoir y passer des jours? Merci d'avance
    VisualEditor ou GEF entre autres. Perso j'aime bien maitriser mes interfaces, car tu verras que les editeurs graphiques ont souvent tendances à faire du code bien dégueulasse et le jour ou tu veux faire de la maintenance, ça peut être cauchemardesque. C'est bien pour développer très vite, mais pas pour maintenir ni comprendre ce qui se passe

    http://eclipse.developpez.com/faq/?p...echargerPlugin
    http://www.eclipseplugincentral.com/
    http://eclipse-plugins.2y.net/eclipse/index.jsp

  9. #29
    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
    Citation Envoyé par leminipouce Voir le message
    VisualEditor ou GEF entre autres. Perso j'aime bien maitriser mes interfaces, car tu verras que les editeurs graphiques ont souvent tendances à faire du code bien dégueulasse et le jour ou tu veux faire de la maintenance, ça peut être cauchemardesque. C'est bien pour développer très vite, mais pas pour maintenir ni comprendre ce qui se passe [/URL]
    Alors là je suis entièrement d'accord ! Je suis sous NetBeans où on peut utiliser un Form qui te permet d'agencer tes composants. J'ai récupéré les classes faites par ce biais. J'essaye juste de changer un JScrollPane en JPanel. Ben j'y arrive pas

    Je déconseille ...

  10. #30
    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. Enfin c'est surtout pour apprendre comment ça marche, parceque pour l'instant j'ai du mal à comprendre la logique.

    Si je comprends bien,
    - les borderLayout élargissent les composants pour qu'ils prennent toute la place possible
    - la taille des cellules d'un gridbadlayout dépend de la taille du layout donc dans mon cas c'est normal que mes champs soient si espacés puisque chaque ligne fait 50% de la taille du container.

    Je vais retenter avec une box

  11. #31
    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
    En fait, je trouvais ca curieux de devoir avoir recours a un JPanel pour aligner comme il faut. Eh bien, on dirait que c'etait prevu et il y a une solution simple:

    http://java.sun.com/docs/books/tutor...html#alignment

    Le probleme dans notre cas est que JTextField n'a pas un alignement gauche par defaut. Il faut donc faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
       Box box = Box.createVerticalBox();
       panelResultat.add(box);
       box.add(getLblResultat());
       box.add(Box.createVerticalStrut(4));
       JTextField saisie = getTxtResultat();
       saisie.setAlignmentX(box.LEFT_ALIGNMENT);
       box.add(saisie);

  12. #32
    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 viens de tester, ça a l'air plus simple de passer par des box
    Pour ce que je veux faire, est ce qu'utilise un BoxLayout est recommandé? C'est le seul container que j'arrive à utiliser correctement pour l'instant En plus toutes ces options pour ajouter des espaces entre les composants, miam ça me plait j'ai l'impression qu'on peut faire plus de choses avec ça.

  13. #33
    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
    C'est clair, c'est 100x plus simple que GridbagLayout.

    Assure-toi juste que tous ceux qui accedent ton appli l'ont bien (ca existait deja dans Java 1.3 donc a priori pas de souci)

  14. #34
    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 en tout cas ^^

    Question bête mais j'utilise un BoxLayout, est ce que je suis obligé d'utiliser un Box.createVerticalBox() ?

    Sans ça fonctionne mais mes composants ne sont pas alignés tout à gauche. Par contre si j'utilise une Box (avec createVerticalBox), ça s'aligne bien.

    Edit : arf le problème vient de moi en fait, c'est mon createRigidArea qui m'ajoute cette bordure vu que je lui ai mis une dimension de 50 X 50

  15. #35
    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
    Rebonjour
    J'aimerai faire en sorte que mes deux cadres aient la même taille car actuellement, mon layout principal est un FlowLayout.


    J'ai tenté avec un BorderLayout mais mes composants s'agrandissent, ça va pas du tout


    Je tiens à préciser que mes deux cadres sont des panels à base de BoxLayout. Quelle solution pour que mes deux cadres aient la même taille et qu'ils soient à la même hauteur sans que mes composants soient déformés?

    Merci d'avance

  16. #36
    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
    T'as essaye setPreferredSize?

  17. #37
    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
    Non mais si je donne la même preferedSize aux deux panels, les composants de mon deuxième cadre ne conservent pas leur taille d'origine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    panelResultat.setPreferredSize(new Dimension(205,94));
    panelBouton.setPreferredSize(new Dimension(205,94));
    Ce qui donne avec un flowlayout :

  18. #38
    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
    Il te faut un peu de "glue" pour occuper l'espace en-dessous du champ de saisie

    Essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    panelResultat.add(Box.createVerticalGlue());

  19. #39
    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 c'est fait. Par contre glue ou pas glue, je vois pas la différence avec mon flowlayout.



    Le code de mon panel:
    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
     
    	private JPanel getPanelResultat() {
    		// création d'un panel
    		if (panelResultat == null) {
    			panelResultat = new JPanel();
    			panelResultat.setBackground(Color.WHITE);
    			panelResultat.setPreferredSize(new Dimension(205,94));
    			panelResultat.setLayout(new BoxLayout(panelResultat,
    					BoxLayout.Y_AXIS));
     
    			// création d'une box
    			Box box = Box.createVerticalBox();
     
    			// crée une séparation horizontale de 10
    			box.add(Box.createRigidArea(new Dimension(10, 0)));
     
    			// ajoute les champs
    			box.add(getLblResultat());			
    			box.add(getTxtResultat());
    			box.add(Box.createVerticalGlue());
     
     
    			// ajoute la box au panel
    			panelResultat.add(box);
     
    		}
    Par contre avec un filler, j'obtiens quelque chose de pas mal:

  20. #40
    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
    C'est curieux. Peut-etre que la Glue ne marche que s'il y a un element apres, par exemple un VerticalStrut. Faut tester.
    Modif: Bien le Filler!

    Tu n'as pas besoin d'avoir a la fois un BoxLayout et un Box a priori.

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, 18h03
  2. [CSS]Problème de positionnement avec div
    Par Tueur_a_gage dans le forum Mise en page CSS
    Réponses: 11
    Dernier message: 26/10/2005, 00h48
  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, 12h58
  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, 17h53
  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, 02h05

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