PROGRAMMATION SWING ET XML

I. CONCEPTS ET CARACTERISTIQUES DE SWING

2. Les gestionnaires d'agencements (Layout managers).


Voici une figure présentant cinq programmes affichant chacun cinq boutons. Les boutons sont identiques, et le code aussi. Pourquoi l'affichage est-il si différent dans ce cas ?
Parce que l'on a utilisé différents gestionnaires d'agencements pour organiser les composants !

Les gestionnaires d'agencements gèrent le processus permettant de déterminer la taille et la position des différents composants. Par défaut, chaque conteneur possède un gestionnaire.

Il existe cinq gestionnaires fournis en standard dans Swing : 

- Le BorderLayout
- Le BoxLayout
- Le FlowLayout
- Le GridLayout
- Le GridBagLayout
Les gestionnaires d'agencement

Figure 1 : les différents gestionnaires d'agencement.

Un dernier gestionnaire est disponible, mais il est un peu particulier : le CardLayout. Lorsque l'on ajoute un composant à un conteneur, il faut prendre en compte le layout manager utilisé par ce conteneur. En effet, selon le gestionnaire utilisé, le composant ne sera pas placé de la meme façon. Cependant, la plupart des gestionnaires positionnent simplements les composants suivant leur ordre d'insertion tout en respectant leurs propres contraintes.

Fixer un gestionnaire d'agencement (layout mabager) :

Pour régler un gestionnaire d'agencement, il suffit d'utiliser la méthode setLayout(LayoutManager) héritée de la classe java.awt.Container. Par exemple, pour régler un BorderLayout sur un JPanel, on procède ainsi :
 

JPanel pane = new JPanel();
pane.setLayout(new BorderLayout());

Bien qu'il vaille mieux utiliser les gestionnaires d'agencements standards, il est possible d'effectuer l'agencement soit meme. En réglant la méthode setLayout à null, on indique au conteneur qu'il n'aura pas de layout manager, et que les composants seront donc placés de manière absolue. L'avantage de cette approche est de pouvoir disposer les composants au pixel près, mais cela constitu aussi son principal désavantage : l'application ne prendra pas bien en compte les redimmensionnements du conteneur racine.

Orienter le gestionnaire d'agencement :

Pour chaque composant il est possible de spécifier les tailles minimum, maximum et conseillées de ce composant. Pour cela, on utilise les méthodes setPreferredSize(Dimension), setPreferredSize(Dimension), setPreferredSize(Dimension) héritées de la classe javax.swing.JComponent; ou alors il est bien sur possible d'étendre un composant existant et de en redéfinissant ces méthodes. Il est aussi possible d'orienter le layout manager en lui donnant des informations concernant l'alignement des composants, grace aux méthodes setAlignmentX(float) et setAlignmentX(float) héritées elles aussi de la classe javax.swing.JComponent. L'ensemble de ces méthodes permettent d'affiner la gestion des composants indépendamment du gestionnaire utilisé, il faut cependant remarquer que le BoxLayout force la taille des composants et ignore donc ce type de réglages ...

Comment se déroule le processus d'agencement ?

Examinons maintenant le processus qu'effectue un gestionnaire d'agencement pour organiser, puis afficher les composants qu'il gère :

  1. Après la construction de l'interface graphique, la méthode pack() est invoquée. Elle indique que la fenetre doit calculer sa taille conseillée. On effectue cet appel avant de rendre la fenetre visible.
  2. Pour établir la taille conseillée de la fenetre, le gestionnaire ajoute la taille de la bordure de cette fenetre, à la taille du composant qu'elle contient. Cela revient à ajouter la taille du content pane, du menu (si il y en a) et de la bordure.
  3. Ensuite, c'est le gestionnaire du content pane qui doit déterminer la taille conseillée des composants qu'il contient. Et l'on poursuit ce processus récursivement jusqu'a ce que l'on atteigne les composants atomiques (i.e. qui ne peuvent pas contenir d'autres composants).
  4. Quand on arrive à un composant atomique, soit l'utilisateur lui a indiqué ses caractéristiques, soit elles sont fournies par le gestionnaire de Look & Feel.
A la fin de ce processus, l'ensemble des tailles des composants ont été déterminées depuis la racine de la hiérarchie jusqu'aux feuilles : l'affichage peut donc s'effectuer.