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 [Trucs & Astuces]


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Par défaut GridBagLayout
    Bonjour,
    Voilà j'ai testé a peu près tout les lyaout de l'api et c'est donc celui ci qui me pose problème

    Par exemple pour placer un composant, on utilise gridx(le numéro de ligne) et gridy(le numéro de colonne), bah en fait pour que ca marche, moi je dois faire l'inverse(j'ai surement loupé qulque chose mais bon), c'est à dire que pour moi le numéro de ligne c'est gridy et gridx pour le numéro de colonne O_o

    Ensuite, est-il possible de modifier la largeur d'une colonne?(ou d'une ligne)

    J'aurais également voulu des précision sur weigthx, weigthy, ces méthode jouent-elle juste sur le redimensionnement?

    Voilà, j'ai un peu de mal à comprendre ce layout malgrès la faq et autres recherche, merci d'avance.

  2. #2
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2003
    Messages : 608
    Par défaut
    Tu trouveras dans ce post un exemple de GridBagLayout :

    post

    C'est une méthode simple proposée par Delannoy dans son ouvrage : méthode que je trouve fantastique, rapide et facile à maintenir. Disposer les paramètres des différents composants dans des tableaux, et un petit switch pour placer le tout.
    (Peut-être que cette méthode ne sera pas appréciée de tout le monde...)

    Avec cette méthode, tu peux :
    - te passer d'éditeur visuel de GUI
    - faire des interfaces aussi compliquées que celle-là :
    image

    Salut.

  3. #3
    Membre éclairé Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Par défaut
    Merci pour ta réponse; en effet ca m'a l'air pas mal, mais j'ai quelque petites questions:
    1. Dans le post,pour placer le 2nd panel, les coordonnées utilisées sont bien x=0 et y=1(pourquoi pas l'inverse?, le numéro de ligne est bien 1 et colonne 0, c'est ça que j'ai du mal à piger)
    2.Pourrais tu m'expliquer à quoi sert le weigth stp?

    Sinon ca m'a l'air pas mal comme méthode, je l'essaierai tout à l'heure car la je manque de temps.
    Encore merci

  4. #4
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2003
    Messages : 608
    Par défaut
    Dans le post,pour placer le 2nd panel, les coordonnées utilisées sont bien x=0 et y=1(pourquoi pas l'inverse?, le numéro de ligne est bien 1 et colonne 0, c'est ça que j'ai du mal à piger)
    C'est le coin supérieur gauche du composant qui est référencé par ce x et y.

    Mais oui, tu as raison, j'ai pas donné assez d'explications :

    Je recolle tout les morceaux de code ici, pour rendre ce post complet :

    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
    46
    47
    import javax.swing.*;
    import java.awt.*;
     
    class MaFenetre extends JFrame
    {
    public static int x[]   = { 0, 0, 1};
    public static int y[]   = { 0, 1, 0};
    public static int larg[]= { 1, 1, 3};
    public static int haut[]= { 1, 2, 3};
    public static int px[]  = {20,20,60};
    public static int py[]  = {20,40,60};
    public static JPanel pan1;
    public static JPanel pan2;
    public static JPanel pan3;
     
    public MaFenetre()
      {
      setTitle("Exemple");
      setSize(800,500);
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      Container contenu = getContentPane();
      GridBagLayout g = new GridBagLayout();
      contenu.setLayout(g);
      GridBagConstraints c = new GridBagConstraints();
                         c.fill = GridBagConstraints.BOTH ;
     
         pan1=new JPanel();
         pan1.setBackground(Color.blue);
         pan2=new JPanel();
         pan2.setBackground(Color.white);
         pan3=new JPanel();
         pan3.setBackground(Color.red);
     
      for (int i=0; i<x.length; i++)
          {
            c.gridx=x[i]; c.gridy=y[i];
            c.gridwidth=larg[i]; c.gridheight=haut[i];
            c.weightx=px[i]; c.weighty=py[i];
            switch(i)
              {
              case 0: contenu.add( pan1, c ); break;
              case 1: contenu.add( pan2, c ); break;
              case 2: contenu.add( pan3, c ); break;
              }
          }
      }
    }
    Et ceci encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class GUI_01
    {
    public static void main (String args[])
       {
       MaFenetre fen = new MaFenetre();
       fen.setVisible(true);
       }
    }
    L'image que tu verras ci-dessous devrait t'éclaircir sur les raisons d'exister des weightx et weigthy.

    Cela permet en fait d'avoir une pondération par rapport aux autres composants.

    Un exemple : le pan1 fait 20 en weightx, et le pan3 fait 60 en weightx.
    Donc la largeur de pan1 sera de 20/(20+60) % par rapport à la largeur de pan3 qui sera de 60/(20+60) %.

    20 et 60 sont choisi arbitrairement. Tu peux mettre n'importe quelle valeur qui t'arrange. Le gestionnaire de GridBagLayout se chargera de faire la somme des poids pour en apprécier le % par rapport au total...

    En réalité, pour plus de compréhension, (mais quand c'est trop facile, c'est pas rigolo), j'aurai pu donner à pan1 : 25 de poids x et à pan3 : 75 de poids x. Ce qui aurait donné : pan1 prends 25% de la largeur totale, pan3 prends 75% de la largeur totale.

    pan1 : 25/(25+75) % et pan3: 75/(25+75) %

    Pigé l'astuce ?



    Plus besoin d'éditeur visuel, quand t'as pigé tout ça, ton code est alors intégralement fait par tes petites mains de programmeur dans les nuages...

  5. #5
    Membre éclairé Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Par défaut
    Ok un grand merci pour ton explication, à mon avis quand je te parlais des gridx et gridy, je devais un peux avoir la tête à l'envers.
    Pour l'histoire des weight, tout pigé
    Je laisse le post ouvert car je vais tester çà avec mes paramètres et je te dirais si oui ou non j'ai des problèmes.
    En tout cas grand bravo et grand merci à toi

  6. #6
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2003
    Messages : 608
    Par défaut
    Pour t'encourager, et pour te convaincre que c'est possible : le screenshot de mon programme de gestion de cochons (que j'ai mis au début de cette discussion) a été fait intégralement avec cette méthode, càd des JPanels imbriqués (en gridbaglayout), et géré à la manière de Delannoy.

    Cela dit : cette méthode comporte un seul gros inconvénient : c'est qu'il faut bien savoir à l'avance ce que l'on veut.

    Cela implique (et c'est comme ça que je travaille) de devoir dessiner en vitesse sur un bout de papier ton interface, de tracer un cadrillage, et d'y repérer les positions des composants qui vont entrer dans le paramétrage du GridBagLayout.

    Mais le gros avantage : tu es le maître absolu de ton code, avec la satisfaction d'avoir tout codé toi-même sans logiciel extérieur...

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

Discussions similaires

  1. [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
  2. GridBagLayout, JTextField ou Choice,je ne sais pa
    Par tck-lt dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 20/07/2005, 18h24
  3. [UI]Aide sur les GridBagLayout
    Par leup dans le forum Agents de placement/Fenêtres
    Réponses: 8
    Dernier message: 19/05/2005, 17h35
  4. [Swing] probleme de GridBagLayout
    Par calypso dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 13/04/2005, 17h26
  5. [débutant]GridBagLayout
    Par pingoui dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 13/12/2004, 17h43

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