Le gestionnaire de répartition BoxLayout

     

alt : l'applet n'est pas visible par votre navigateur (dans le menu Outils, Modules complémentaires, activer le plugin Java(TM) Platform SE 6 U32 6.0.320.5 s'il est désactivé)

Une applet a du faire apparaître une petite fenêtre surgissante. Vous pouvez essayer de l'agrandir. Vous verrez que l'espace entre le "bouton2" et le Jlabel "bonjour" s'agrandit en conséquence. En étudiant le programme, vous verrez pourquoi. Les boutons n'ont pas d'action.

Notre exemple pourrait servir si on voulait créer une application avec une série de boutons ou d'autres sous-composants mis les uns en-dessous des autres sur le côté droit de l'application.

Le gestionnaire de répartition BoxLayout permet de mettre des composants en ligne ou en colonne. Contrairement au GridLayout qui fait l'objet de l'exemple suivant, les sous-composants ne sont pas obligés d'avoir tous la même largeur et la même hauteur. Ce gestionnaire de répartition offre beaucoup de fonctionnalités ; notre exemple vous en donne un aperçu. Ivi, nous choisissons une disposition verticale.

import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.BorderFactory;
import java.awt.Dimension;
import java.awt.BorderLayout;
import java.awt.Color;

public class PanneauAvecBoutons extends JFrame {
PanneauAvecBoutons() {
JButton bouton1 = new JButton("bouton1");
JButton bouton2 = new JButton("bouton2");
JLabel message = new JLabel("Bonjour");
JPanel panneau = new JPanel();
Box panneauBouton = Box.createVerticalBox();
panneau.setPreferredSize(new Dimension(100, 0));
panneau.setBackground(Color.BLUE);
add(panneau, BorderLayout.CENTER);

panneauBouton.add(bouton1);
panneauBouton.add(Box.createVerticalStrut(20));
panneauBouton.add(bouton2);
panneauBouton.add(Box.createGlue());
panneauBouton.add(message);
panneauBouton.setBorder(BorderFactory.createLineBorder(Color.RED));
add(panneauBouton,BorderLayout.EAST );
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocation(200, 300);
pack(); setVisible(true);

}
}

class EssaiPanneauAvecBoutons {
public static void main(String[] arg) {
new PanneauAvecBoutons();

}
}

Vous pouvez trouver ici :

  • le code de l'application décrite ici ;
  • le code de l'applet.
    Box panneauBouton = Box.createVerticalBox(); : on crée un JPanel avec un gestionnaire de répartition de type BoxLayout en choisissant de mettre les sous-composants les uns sous les autres. De manièer équivalente, on aurait pu écrire :
    	JPanel panneauBouton = new JPanel();
    panneauBouton.setLayout(new BoxLayout(panneauBouton, BoxLayout.Y_AXIS));

    panneauBouton.add(Box.createVerticalStrut(20)); : on ajoute un composant invisible, de hauteur fixe égale à 20 pixels. Ce genre de composant permet d'imposer une distance entre deux sous-composants.
    panneauBouton.add(Box.createGlue()); : on ajoute un composant(de genre "glue") invisible qui s'étire lorsqu'on étire la fenêtre. Cela nous permet ici de choisir les sous-composants qui s'espacent lorsque la fenêtre s'agrandit en hauteur.

    ©Irène Charon, Télécom ParisTech 2011