Tous les composants susceptibles de contenir d'autres composants (par exemple Applet ou Panel) sont dérivés de la classe Container. Ils possèdent une méthode setLayout qui permet de définir un gestionnaire de positionnement qui se chargera de placer correctement les composants insérés.
Les gestionnaires de type FlowLayout se contentent de placer
les composants les uns derrière les autres. Ce sont les
gestionnaires utilisés par défaut, c'est à dire dans le cas où la
méthode setLayout n'a pas été employée.
Le constructeur d'un gestionnaire de type FlowLayout peut utiliser
un paramètre indiquant le type d'alignement à utiliser : FlowLayout.RIGHT
pour droite, FlowLayout.LEFT pour gauche et FlowLayout.CENTER pour centré
qui est l'alignement par défaut.
Exemple de méthode init pour une applet :
public void init() { setLayout(new FlowLayout(FlowLayout.LEFT)); add(new Button("Pomme")); add(new Button("Poire")); add(new Button("Abricot")); add(new Button("Pêche")); add(new Button("Fraise")); }
Les gestionnaires de type BorderLayout permettent de placer les composants en faisant référence à une position de type géographique : nord, sud, est, ouest ou centre. Les composants placés au nord, au sud, à l'est et à l'ouest vont prendre leur taille préférée dans un sens et la taille maximale dans l'autre, l'élément placé au centre va occuper tout l'espace restant.
Pour ajouter un composant, on utilisera la méthode add en précisant la position géographique par son nom anglais : North, South, East, West ou Center.
Exemple de méthode init pour une applet :
public void init() { //on déclare le gestionnaire de positionnement setLayout(new BorderLayout()); //on place les composants add("Center", new Button("Centre")); add("North", new Button("Nord")); add("South", new Button("Sud")); add("East", new Button("Est")); add("West", new Button("Ouest")); }
Les gestionnaires de type GridLayout permettent de placer les composants dans une grille formée de cases de même taille. Chaque composant prend la taille d'une case. Le constructeur d'un gestionnaire de type GridLayout attend deux paramètres entiers qui sont le nombre de lignes et le nombre de colonnes de la grille.
Pour ajouter des composants on utilise la méthode add. Les composants remplissent alors la grille ligne par ligne.
Exemple de méthode init pour une applet :
public void init() { setLayout(new GridLayout(2, 3)); add(new Button("Pomme")); add(new Button("Poire")); add(new Button("Abricot")); add(new Button("Pêche")); add(new Button("Fraise")); add(new Button("Ananas")); }
Exemple d'applet utilisant un gestionnaire de positionnement de type CardLayout :
import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class CardLayoutExemple extends Applet implements ActionListener { CardLayout carte; Panel fruitEtLegume; Button bouton=new Button("Fruits ou Légumes"); public void init() { //panel de la première carte (les fruits) Panel p1 = new Panel(); p1.add(new Button("Pomme")); p1.add(new Button("Poire")); p1.add(new Button("Abricot")); p1.setBackground(Color.orange); //panel de la deuxieme carte (les legumes) Panel p2 = new Panel(); p2.add(new Button("Tomate")); p2.add(new Button("Poireau")); p2.add(new Button("Haricot")); p2.setBackground(Color.green); //panel contenant les deux précédents fruitEtLegume=new Panel(); carte = new CardLayout(); fruitEtLegume.setLayout(carte); fruitEtLegume.add("fruit", p1); fruitEtLegume.add("legume", p2); setLayout(new BorderLayout()); add("North", bouton); add("Center", fruitEtLegume); bouton.addActionListener(this); } public void actionPerformed(ActionEvent e) { carte.next(fruitEtLegume); } }
Les gestionnaires de positionnement de type GridBagLayout permettent d'utiliser des tableaux dont les cases n'ont pas toutes les mêmes dimensions. Pour ajouter un composant on devra lui associer un objet de type GridBagConstraints qui permet de préciser sa taille et sa position. Cela se fait en deux temps. Pour ajouter un composant c associé à l'objet gbc de type GridBagConstraints avec le gestionnaire g, on écrira :
add(c); g.setConstraints(c,gbc);
La classe GridBagConstraints possède les champs suivants qui permettent de préciser la position et la taille d'un composant :
Pour obtenir l' exemple proposé, on pourra utiliser la méthode init suivante :
public void init() { //installer le gestionnaire GridBagLayout g=new GridBagLayout(); setLayout(g); //créer un objet de type GridBagConstraints GridBagConstraints c=new GridBagConstraints(); //on utilise tout l'espace d'une cellule c.fill=GridBagConstraints.BOTH; c.weightx=1.0; Button peche=new Button("Pêche"); add(peche); g.setConstraints(peche,c); Button poire=new Button("Poire"); add(poire); g.setConstraints(poire, c); //on va terminer la ligne avec ce composant c.gridwidth=GridBagConstraints.REMAINDER; Button pomme=new Button("Pomme"); add(pomme); g.setConstraints(pomme,c); //réinitialisation c.weightx=0.0; c.weighty=1.0; c.gridwidth=1; c.gridheight=2; //sur 2 lignes Button prune=new Button("Prune"); add(prune); g.setConstraints(prune,c); //nouvelle réinitialisation c.weighty=0.0; c.gridwidth=GridBagConstraints.RELATIVE; c.gridheight=1; Button fraise=new Button("Fraise"); add(fraise); g.setConstraints(fraise,c); //on termine la ligne c.gridwidth=GridBagConstraints.REMAINDER; Button cerise=new Button("Cerise"); add(cerise); g.setConstraints(cerise,c); Button ananas=new Button("Ananas"); add(ananas); g.setConstraints(ananas,c); }