Comment utiliser les GridBagLayout

Contenu du snippet


Qu'est ce qu'un GRidBagLayout

GridBagLayout est le layout manager le plus felxible (et complexe) que la plateforme java fournit. Il permet de placer les composants sur une grille en autorisant des comortement particuliers : regroupement de cases, modiofication de la hauteur ou de la largeur d'une case, etc.

Placer un GridBagLaout sur un composant

Pour placer un gridBagLayout sur un composant, il faut comme pour tous les autres layout l'ajouter à celui-ci :
composant.setLayout(new GridBagLayout());

Le placement des éléments est ensuite géré avec un GridBagConstraints :
GridBagConstraints gc = new GridBagConstraints();
composant.add(composant2, gc);

Toute la difficulté consiste donc à paraméter le GridBagConstraints avant le placement d'un composant.

Les attributs de GridBagConstraints

gridx, gridy


Spécifie la ligne et la colonne le composant à placer la première colonne est gridx=0 aet la première ligne est gridy=0

gridwidth, gridheight


Spécifie le nombre de colonnes (pour gridwidth) ou de lignes (pour gridheight) que le composant va utiliser dans la grille. Il s'agit du nombre de cases qu'il va prendre et non du nombre de pixels.

fill


Cette propriété permet de définir la manière dont un composant sera (ou ne sera pas) redimensionné lorsque l'espace qui lui est alloué est supérieur à celui de ses désidératas. Les valeurs possible sont :
  • NONE par défaut,
  • HORIZONTAL remplissage horizontal du composant parent,
  • VERTICAL remplissage vertical du composant parent,
  • BOTH remplissage de toute la zone dans lequel le coposant est ajouté


ipadx, ipady


Ces attributs permettent de définir des marges internes au composant

insets


Permet de préciser des marges en pixels autour du composant

anchor


La propriété anchor permet de spécifier un point d'ancrage à un composant à l'intérieur de sa (ou ses) cellule(s). Par défaut

weightx, weighty


Ces deux propriétés permettent de définir comment l'espace supplémentaire sera distribué parmi les composants horizontalement (weightx) et verticalement (weighty). Par défaut, aucun poids n'est défininy extra space between its grid of cells and the edges of the container.

Source / Exemple :

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Exemple {

	public static void main(String[] args) {
		
		JPanel panel = new JPanel();
		
		/* On ajoute un gridbagLauout au panel */
		panel.setLayout(new GridBagLayout());
		
		/* Le gridBagConstraints va définir la position et la taille des éléments */
		GridBagConstraints gc = new GridBagConstraints();
		
		/* le parametre fill sert à définir comment le composant sera rempli GridBagConstraints.BOTH permet d'occuper tout l'espace disponible
		 * horizontalement et verticalement GridBagConstraints.HORIZONTAL maximise horizontalement GridBagConstraints.VERTICAL maximise verticalement
		 */
		gc.fill = GridBagConstraints.BOTH;
		
		/* insets définir la marge entre les composant new Insets(margeSupérieure, margeGauche, margeInférieur, margeDroite) */
		gc.insets = new Insets(5, 5, 5, 5);
		
		/* ipady permet de savoir où on place le composant s'il n'occupe pas la totalité de l'espace disponnible */
		gc.ipady = gc.anchor = GridBagConstraints.CENTER;

		/* weightx définit le nombre de cases en abscisse */
		gc.weightx = 3;
		
		/* weightx définit le nombre de cases en ordonnée */
		gc.weighty = 3;
		
		/* pour dire qu'on ajoute un composant en position (i, j), on définit gridx=i et gridy=j */
		gc.gridx = 0;
		gc.gridy = 0;
		
		/* On ajoute le composant au panel en précisant le GridBagConstraints */
		panel.add(new JButton("0,0"), gc);
		gc.gridx = 1;
		gc.gridy = 0;
		panel.add(new JButton("1,0"), gc);
		gc.gridx = 2;
		gc.gridy = 0;
		panel.add(new JButton("2,0"), gc);
		gc.gridx = 0;
		gc.gridy = 1;
		panel.add(new JButton("0,1"), gc);
		gc.gridx = 1;
		gc.gridy = 1;
		
		/* On peut définit un composant qui prend plusieurs cases à l'aide de gridwidth */
		gc.gridwidth = 2;
		panel.add(new JButton("1,1"), gc);
		gc.gridx = 0;
		gc.gridy = 2;
		gc.gridwidth = 3;
		panel.add(new JButton("0,3"), gc);
		
		/* Définition de la fenêtre */
		JFrame f = new JFrame();
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.add(panel);
		f.setSize(500, 300);
		f.setLocationRelativeTo(null);
		f.setVisible(true);
	}
}

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.