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); } }); } }