Médiaforma

Java – Mise en page GridBagLayout

Print Friendly

La mise en page GridBagLayout est la plus complète. Comme GridLayout, elle est basée sur la définition de grilles. Mais contrairement à GridLayout, les composants n’ont pas forcément des dimensions identiques : ils peuvent occuper une ou plusieurs cases de la grille.

Le constructeur de la classe GridBagLayout ne comporte aucun argument :

public GridBagLayout();

L’objet GridBagConstraints

Pour pouvoir utiliser une mise en page GridBagLayout, vous devez définir un objet de classe GridBagContraints et initialiser une ou plusieurs de ses propriétés.

Les propriétés gridx et gridy

Les propriétés gridx et gridy définissent les coordonnées de la cellule dans la zone d’affichage.

public int gridx;
public int gridy;

A titre d’exemple, les propriétés gridx et gridy de la première cellule valent (respectivement) 0 et 0. Celles de la cellule à sa droite valent 1 et 0 et celles de la cellule qui la suit valent 0 et 1. Dans un GridBagLayout de 3×3 cellules de même taille, voici comment seraient repérées chacune de ces cellules :

 

 

Certaines cellules peuvent rester vides. Les valeurs de gridx et de gridy peuvent être spécifiées à l’aide d’entiers, comme dans le tableau précédent, mais vous pouvez également utiliser la constante GridBagConstraints.RELATIVE. Cette constante signifie que le composant sera placé dans la cellule de droite (gridx) ou dans la cellule en-dessous (gridy) du composant précédent.

 

Les propriétés gridwidth et gridheight

Les propriétés gridwidth et gridheight définissent respectivement le nombre de cases en colonnes et en lignes du composant courant. La valeur par défaut est 1 :

public int gridwidth;
public int gridheight;

Ces propriétés doivent avoir une valeur entière supérieure ou égale à 1.

Si vous le souhaitez, vous pouvez également leur affecter la constante GridBagConstraints.REMAINDER ou GridBagConstraints.RELATIVE :

  • GridBagConstraints.REMAINDER indique que le composant est le dernier de sa ligne ou de sa colonne.
  • GridBagConstraints.RELATIVE indique que le composant est l’avant-dernier de sa ligne ou de sa colonne. Il occupera toutes les cellules disponibles depuis sa position jusqu’à l’avant-dernière cellule.

 

La propriété anchor

La propriété anchor permet de définir le point d’ancrage d’un composant dans la ou les cellules qu’il occupe. Dans la copie d’écran suivante par exemple, le bouton B1 est ancré dans la partie supérieure de la cellule et le bouton B3 dans la partie inférieure de la cellule :

 

 

Il existe neuf points d’ancrage résumés dans ce tableau :

FIRST_LINE_START PAGE_START FIRST_LINE_END
LINE_START CENTER LINE_END
LAST_LINE_START PAGE_END LAST_LINE_END

 

La propriété fill

La propriété fill détermine comment utiliser l’espace disponible lorsque la taille du composant est inférieure à celle qui lui est offerte :

public int fill;

La valeur par défaut de cette variable est GridBagConstraint.NONE.

Vous pouvez opter pour l’une des constantes suivantes :

  • GrigBagConstraint.NONE pour ne pas redimensionner le composant.
  • GrigBagConstraint.HORIZONTAL pour remplir l’espace horizontal offert.
  • GrigBagConstraint.VERTICAL pour remplir l’espace vertical offert.
  • GrigBagConstraint.BOTH pour remplir l’espace offert, horizontalement et verticalement.

 

Les propriétés weightx et weighty

Les propriétés weightx et weighty déterminent comment se répartit l’espace supplémentaire entre les composants :

public double weightx;
public double weighty;

La valeur par défaut des variables weightx et weighty est 0. Dans ce cas, les composants sont centrés horizontalement (weightx) et verticalement (weighty) dans l’espace qui leur est alloué. La somme des poids horizontaux d’une même ligne doit être 1. De même pour la somme des poids verticaux d’une même colonne.

 

Les propriétés ipadx et ipady

Les propriétés ipadx et ipady définissent les marges internes minimales du composant. La taille des composants est au moins égale à (largeur min + ipadx * 2) x (hauteur min + ipady * 2). La valeur par défaut de ces deux variables est 0.

public int ipadx;
public int ipady;

Pour avoir de plus amples renseignements sur les méthodes de la classe GridBagLayout, vous consulterez la documentation Oracle de l’API.

 

 

 

Quelques exemples

Trois boutons centrés sur une seule ligne :

 

 

JPanel container = new JPanel();
this.setTitle("Grid Bag Layout");
this.setSize(300, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
container.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();

c.gridx = 0;
c.gridy = 0;
container.add(new JButton("Test"), c);

c.gridx = 1;
c.gridy = 0;
container.add(new JButton("de"), c);

c.gridx = 2;
c.gridy = 0;
container.add(new JButton("la"), c);

this.setContentPane(container);
this.setVisible(true);

Trois boutons sur une même ligne entièrement occupée. Le premier deux fois plus large que les deux autres.

 

 

c.gridx = 0;
c.gridy = 0;
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 0.5;
container.add(new JButton("Test"), c);

c.gridx = 1;
c.gridy = 0;
c.weightx = 0.25;
container.add(new JButton("de"), c);

c.gridx = 2;
c.gridy = 0;
c.weightx = 0.25;
container.add(new JButton("la"), c);

Quatre boutons. Le premier occupe toute la largeur, les trois autres occupent tous l’espace vertical restant. La répartition horizontale des trois derniers boutons est 0,8 0,1 et 0,1.

 

 

c.gridx = 0;
c.gridy = 0;
c.fill = GridBagConstraints.BOTH;
c.gridwidth = 3;
c.weightx = 1;
c.weighty = 0;
container.add(new JButton("Super"), c);

c.gridx = 0;
c.gridy = 1;
c.fill = GridBagConstraints.BOTH;
c.gridwidth = 1;
c.weightx = 0.8;
c.weighty = 1;
container.add(new JButton("Test"), c);

c.gridx = 1;
c.gridy = 1;
c.weightx = 0.1;
container.add(new JButton("de"), c);

c.gridx = 2;
c.gridy = 1;
c.weightx = 0.1;
container.add(new JButton("la"), c);
Exercice

Ecrivez le code nécessaire pour obtenir cet affichage :

 

 

Solution

 

public Test4(){
    JPanel container = new JPanel();
    this.setTitle("Grid Bag Layout");
    this.setSize(300, 300);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    container.setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();
    c.fill = GridBagConstraints.HORIZONTAL;

    c.gridx = 0;
    c.gridy = 0;
    c.gridwidth = 1;
    container.add(new JButton("1"), c);

    c.gridx = 1;
    c.gridy = 1;
    container.add(new JButton("2"), c);

    c.gridx = 0;
    c.gridy = 2;
    c.gridwidth = 5;
    container.add(new JButton("3"), c);

    c.gridx = 3;
    c.gridy = 3;
    c.gridwidth = 1;
    container.add(new JButton("4"), c);

    c.gridx = 4;
    c.gridy = 4;
    container.add(new JButton("5"), c);

    c.gridx = 0;
    c.gridy = 4;
    container.add(new JButton("6"), c);

    c.gridx = 1;
    c.gridy = 3;
    container.add(new JButton("7"), c);

    c.gridx = 3;
    c.gridy = 1;
    container.add(new JButton("8"), c);

    c.gridx = 4;
    c.gridy = 0;
    container.add(new JButton("9"), c);

    this.setContentPane(container);
    this.setVisible(true);
}
Vous avez aimé cet article ? Partagez-le avec vos réseaux...
 
Comments

No comments yet.

Leave a Reply