Christophe Jacquet: Research and Teaching

Enseignement > Exemples en Java >

Swing : positionner des composants graphiques par leurs coordonnées

Swing prend en charge le positionnement et le dimensionnement automatique des composants graphiques (boutons, listes, cases à cocher, etc.) dans des conteneurs, via le système de gestionnaires de positionnement (layout managers).

Si ce mode de fonctionnement convient dans la plupart des cas, il arrive dans des situations bien précises que l'on ait besoin de fixer manuellement la position et les dimensions des composants. Par exemple, si l'on dessine un schéma dans un JPanel, on peut avoir envie de disposer des boutons à des endroits bien précis dans ce schéma. Cet exemple explique comment effectuer simplement ce positionnement manuel.

/* ############################################################################
 * 
 * NullLayoutDemo.java : positionnement absolu de composants dans un conteneur
 *                       Swing, sans utiliser de layout manger.
 *                       
 *                       Attention : ceci ne doit être utilisé que dans des
 *                       cas bien particuliers. Dans le cas général, c'est une
 *                       très mauvaise pratique que de se passer de layout
 *                       manager.
 * 
 * Auteur : Christophe Jacquet, Supélec
 * 
 * Historique
 * 2007-01-11  Création
 * 
 * ############################################################################
 */

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;


/**
 * Cette classe crée une fenêtre qui comporte deux boutons positionnés à des
 * coordonnées absolues, sans faire appel à un layout manager.
 *
 */
public class NullLayoutDemo {
	public static void main(String[] args) {
		// la création des objets graphiques est déléguée au thread de
		// diffusion d'événements de Swing
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				// nouvelle fenêtre
				JFrame fenetre = new JFrame("NullLayout Demo");
				
				// pas de layout manager pour cette fenêtre : 
				// on positionnera les composants à la min
				fenetre.setLayout(null);
				
				// création des boutons
				JButton b1 = new JButton("Un"), b2 = new JButton("Deux");
				
				// ajout des boutons à la fenêtre
				fenetre.add(b1);
				fenetre.add(b2);
				
				// positionnement et dimensionnement manuel des boutons
				b1.setBounds(10, 10, 80, 30);
				b2.setBounds(100, 40, 70, 40);
				
				// quitter le programme lorsqu'on ferme la fenêtre
				fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				
				// dimensionnement en affichage de la fenêtre
				fenetre.setSize(300, 200);
				fenetre.setVisible(true);
			}
			
		});
	}
}