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 |
![]() 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 :