C. Recanati
InHM Java
Master M1, 2009

TP n° 7

Exercice 1
On va implanter un programme analogue à ceux qui ont été vus en cours sur les différents LayoutManager, et qui affichaient 6 boutons. Ici, les boutons créés utiliseront 2 fontes de taille différentes (une assez grosse et une petite) comme dans un des exemples du poly. En outre, les chaînes d’étiquette de ces boutons auront des longueurs différentes pour mieux tester l’exemple.
On observera dans chaque cas ce qui se passe quand on agrandit ou diminue la fenêtre.
1) On va tester les afficheurs de classe BoxLayout en utilissant un conteneur de type Box qui alignera 6 boutons verticalement.
2) Même chose avec une boîte horizontale.
3) On va tester un afficheur de classe GridLayout, pour placer 12 boutons sur 3 lignes et 4 colonnes. 

Exercice 2
On veut réaliser une boîte de dialogue présentant des champs de textes étiquetés pour que l’utilisateur entre des données. Il y a plusieurs manières de réaliser l’alignement des étiquettes et des champs. Une procédure un peu générale réalisant cet alignement peut prendre en argument un tableau de labels et un tableau de champs texte de même taille, pour que ces objets soient correctement ajoutés dans la procédure à un conteneur (ici container) géré par un GridBagLayout (ici gridbag) : 

            void  addLabelTextRows(JLabel[] labels,
                               	JTextField[] textFields,
                               	GridBagLayout gridbag,
                               	Container container)

Implémentez cette méthode générale, de sorte qu’elle aligne les étiquettes du tableau  labels[ ] et les champs de textes (donnés dans le tableau textFields[ ]) avec le GridBagLayout.
  utiliser la constante GridBagConstraints.REMAINDER pour marquer les éléments de fin de lignes (cf. corrigé).

label un

label deux

label trois

label quatre

Eléments de correction
Exercice 2
private void addLabelTextRows(JLabel[] labels,
                               JTextField[] textFields,
                               GridBagLayout gridbag,
                               Container container) {
/** suppose qu’il y a le même nb de JTextField que de JLabels 
et que le gridbag est le gestionnaire d’aff. associé au container */
	GridBagConstraints c = new GridBagConstraints();
	c.anchor = GridBagConstraints.EAST;
	int nitem = labels.length;	// nombre de lignes

	for (int i = 0; i < nitem; i++) {
		c.gridwidth = GridBagConstraints.RELATIVE; 
						//suit le dernier entré
		c.fill = GridBagConstraints.NONE;  
						// ne sera pas redimensionné
		c.weightx = 0.0;   // les labels ne s’élargiront pas
		gridbag.setConstraints(labels[i], c);
		container.add(labels[i]);

		c.gridwidth = GridBagConstraints.REMAINDER ; 						//dernier de ligne
		c.fill = GridBagConstraints.HORIZONTAL;
		c.weightx = 1.0;  // absorbe tout l’espace 
		container.add(textFields[i]);
	}
}