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