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

AWT/Swing Java Discussion :

[GridBagLayout] Suppression d'espace inutile


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut [GridBagLayout] Suppression d'espace inutile
    Bonjour à toutes et à tous,

    en fait je dispose des composants dans une JFrame grâce au GridBagLayout, c'est la première fois que j'utilise et c'est un peu la lutte

    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
    getContentPane().setLayout(new GridBagLayout());
    GridBagConstraints gbc= new GridBagConstraints();
            gbc.weightx= 1;
            gbc.weighty= 1;
     
            /** LABEL NORD **/
            gbc.anchor= GridBagConstraints.PAGE_START;
            gbc.fill = GridBagConstraints.NONE;
            gbc.gridx= 1;
            gbc.gridy= 0;
            gbc.gridwidth=2;
            gbc.gridheight= 1;
            getContentPane().add(jl_texte, gbc);
     
            /** TEXTAREA **/
            gbc.anchor= GridBagConstraints.CENTER;
            gbc.fill = GridBagConstraints.BOTH;
            gbc.gridx= 2;
            gbc.gridy= 1;
            gbc.gridwidth= 3;
            gbc.gridheight= 3;
            getContentPane().add(js_texte, gbc);
     
            /** BOUTONS SUD **/
            gbc.anchor= GridBagConstraints.PAGE_END;
            gbc.fill= GridBagConstraints.NONE;
            gbc.gridx= 0;
            gbc.gridy= 8;
            gbc.gridwidth= 2;
            gbc.gridheight= 1;
            getContentPane().add(jb_stats, gbc);
     
            gbc.gridx= 2;
            gbc.gridwidth= 2;
            getContentPane().add(jb_parcourir, gbc);
     
            gbc.gridx=4;
            gbc.gridwidth= 2;
            getContentPane().add(jb_valider, gbc);
    Voici en PJ ce que j'ai et ce que je voudrai obtenir. En fait, je cherche à réduire l'espace vertical entre ma TextArea et le label au nord et les boutons au sud... Bref que la TextArea prennent tout pleins de place,

    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  2. #2
    pom
    pom est déconnecté
    Membre éprouvé
    Inscrit en
    Février 2003
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 120
    Par défaut
    Content de voir que je ne suis pas le seul à morfler sur le GridBagLayout

    A mon avis, ça vient de tes ancres (PAGE_START, CENTER...). Tu travailles avec un éditeur ou à la mano?

  3. #3
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    Non, tu es loin d'être le seul

    Sinon, je bosse avec Eclipse

    J'ai lu pleins de tutos sur Sun et dans la FAQ, mais c'est bien galère à gérer
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 19
    Par défaut
    Moi j'utilise Matisse de NetBeans et ca a complétement changer ma vie

    Tu peux utiliser plusieurs Layout, et faire ce que tu veux.

  5. #5
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    Oui, peut-être lol, mais je vais pas changer d'IDE en plein milieu du projet... Et puis j'ai pas l'éditeur visuel pour placer les composants, je code à la mano plus ou moins quoi. J'utilise juste Eclipse pour les correctifs rapides ( qui évite des milliers de compilation inutiles ).

    Faut bien que je me fasses les dents
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  6. #6
    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
    Pour l'alignement des JButton et de la JTextArea le problème vient du gridWidth:

    chaque bouton a un gridWidth de 2, d'où 3* 2 = 6 cases
    Or ta JtextArea a un GridWdth de 3 donc problème.
    Passes le gridWidth de ta JTextArea à 6, il y aura un problème de moins.

    Ensuite pour l'espace occupé, ton problème vient des weightx et weigth y

    Dans ton cas le weightx doit toujours être à un
    Par contre le weigthy doit varier en fonction de l'occupation voulue de l'écran

    Donc dans ton cas weighty à 0 pour le titre et les boutons et weighty à 1 pour la JtextArea.

    Celà vient du fait que le weigthy et le weigthx correspondent au proportions de redimensionnement des cases dans lesquels sont les composants et non les proportions de redimensionnement des composants.

    ++

  7. #7
    Membre chevronné Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Par défaut
    Salut buchs,

    Je te conseille de diviser ta fenêtre en 3 parties :
    - 1 JPanel pour le titre
    - 1 JPanel pour les TextArea
    - 1 JPanel pour les boutons du sud

    Ainsi, il te sera plus facile à les agencer comme tu le souhaites

    Whichever method you use, take advantage of nested panels to group the components. Use panels to define the major areas of the GridBagLayout container. This greatly simplifies your GridBagLayout design, giving you fewer cells in the grid and fewer components that need GridBagConstraints.
    http://info.borland.com/techpubs/jbu...out/part1.html


    Sinon, personnellement, en plus de cette "technique", j'utilise une classe que j'ai développée au fil du temps (et que j'utilise tout le temps... - voir la pièce jointe) .

    Certes, elle limite les possibilités du GridBagLayout, mais en utilisant et les JPanel imbriqués, et les struts, j'ai toujours réussis à obtenir ce que je souhaitais... (attention, les commentaires en anglais ne sont pas parfait )

    EDIT : voila ce que j'obtiens vite fait avec ce bout de 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
            getContentPane().setLayout(new GridBagLayout());
            MyGridBagConstraints gbc= new MyGridBagConstraints();
     
            /** LABEL NORD => premiere ligne **/
            gbc.addTo(getContentPane(), Box.createHorizontalStrut(STRUT_LENGTH), true); // ajout d'une marge à gauche
            gbc.addTo(getContentPane(), jl_texte, false);
            gbc.addToTheEnd(getContentPane(), Box.createHorizontalStrut(STRUT_LENGTH), true); // ajout d'une marge à droite
            // Les 2 marges étant 'xextendable' => le jl_texte se trouvera toujours au milieu de son container...
     
            /** TEXTAREA => deuxième ligne 'yextendable' **/
            gbc.addToTheEnd(getContentPane(), js_texte, true, true); // ajout du text area qui prend toute la largeur et toute la hauteur autorisée
     
            /** BOUTONS SUD => 3 ème ligne **/
            // les boutons doivent se trouver sous le textarea => l'ensemble des boutons ne doit prendre qu'une "case" du gridBagLayout => Création d'un JPanel interne
            JPanel jp_boutons = new JPanel();
            jp_boutons.setLayout(new GridBagLayout());
     
            gbc.addTo(jp_boutons, Box.createHorizontalStrut(STRUT_LENGTH), true); // ajout d'une marge à gauche pour prendre l'éventuelle place vide entre le bord gauche du text area et le premier bouton
            gbc.addTo(jp_boutons, jb_stats, false);
            gbc.addTo(jp_boutons, jb_parcourir, false);
            gbc.addTo(jp_boutons, jb_valider, false);
            gbc.addToTheEnd(jp_boutons, Box.createHorizontalStrut(STRUT_LENGTH), true); // ajout d'une marge à droite pour prendre l'éventuelle place vide entre le bord droit du text area et le dernier bouton
     
            gbc.addTo(getContentPane(), Box.createHorizontalStrut(STRUT_LENGTH), true); // ajout d'une marge à gauche pour prendre l'éventuelle place vide entre le bord gauche de la fenêtre et le bord du text area
            gbc.addTo(getContentPane(), jp_boutons, true); // xetendable => pour autoriser le text area a etre aussi xextendable... L'expace en plus sera consommé par les éléments xextendable du jpanel boutons => les struts
            gbc.addToTheEnd(getContentPane(), Box.createHorizontalStrut(STRUT_LENGTH), true); // ajout d'une marge à droite pour prendre l'éventuelle place vide entre le bord droit de la fenêtre et le bord du text area
    (voir l'image en PJ)
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Suppression des espaces
    Par mcdelay dans le forum Access
    Réponses: 4
    Dernier message: 18/10/2005, 08h39
  2. Réponses: 2
    Dernier message: 01/07/2005, 10h56
  3. Enlever les espaces inutiles d'un AnsiString
    Par jamesb dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/01/2005, 12h40
  4. [Tomcat] Suppression des espaces
    Par bluefox_du_974 dans le forum Tomcat et TomEE
    Réponses: 5
    Dernier message: 16/12/2004, 21h54
  5. [LG]elimination d'espace inutile
    Par mister_dsg dans le forum Langage
    Réponses: 3
    Dernier message: 14/12/2003, 11h47

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