Après avoir vu dans notre dernier article la mise
en forme d'interface avec FlowLayout,
le plus simple des gestionnaires, nous allons en aborder deux
plus avancés. Les deux gestionnaires
sont GridLayout et BorderLayout.
Si FlowLayout placait les
éléments d'interface les uns derrière
les autres sans réelle mise en page, ces deux gestionnaires
permettent déjà d'affiner quelque peu leur disposition.
GridLayout
Comme son nom l'indique, ce gestionnaire permet de créer
une grille dans laquelle les composants graphiques sont placés.
A la manière de FlowLayout,
ceux-ci remplissent les cases au fur et à mesure qu'on
les ajoute : par exemple, si on dispose d'une grille de 2
colonnes sur trois lignes, le premier composant ajouté
ira dans la case supérieure gauche, le suivant dans
la case supérieure droite, puis la case gauche de la
ligne suivante, suivie de sa case droite, puis la case gauche
de la dernière ligne et enfin sa case droite. Cet ordre
peut bien sûr être modifié grâce
à la propriété ComponentOrientation
de JPanel.
import javax.swing.*;
import java.awt.*;
public class GridLockd
{
public static void main(String[] args)
{
JFrame myFrame = new JFrame();
JPanel panel = new JPanel();
GridLayout
jours = new GridLayout(3, 2, 5, 5);
panel.setLayout(jours);
panel.applyComponentOrientation(
ComponentOrientation.RIGHT_TO_LEFT);
JLabel etiquette = new JLabel(" Aujourd'hui:
");
JCheckBox premier = new JCheckBox("Lundi");
JCheckBox deuxieme = new JCheckBox("Mardi");
JCheckBox troisieme = new JCheckBox("Mercredi");
JCheckBox quatrieme = new JCheckBox("Jeudi");
JCheckBox cinquieme = new JCheckBox("Vendredi",
true);
JCheckBox sixieme = new JCheckBox("Samedi");
JCheckBox septieme = new JCheckBox("Dimanche");
panel.add(etiquette);
panel.add(premier);
panel.add(deuxieme);
panel.add(troisieme);
panel.add(quatrieme);
panel.add(cinquieme);
panel.add(sixieme);
panel.add(septieme);
myFrame.setContentPane(panel);
myFrame.setTitle("GridLockd, quel
grand film!");
myFrame.setBounds(100,100,300,200);
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.setVisible(true);
}
}
Nous avons défini ici une grille de 3 lignes par 2
colonnes, avec chacune des "cases" séparées
de leurs voisines par un espace de 5 pixels.
Dans la pratique, les seules différences entre ce code
et celui de FlowLayout, mis
à part le nom de la classe et quelques détails
cosmétiques, sont les deux lignes que nous avons mis
en gras. Rappelons que FlowLayout
est le gestionnaire d'interface par défaut de JPanel,
et qu'il n'est donc pas forcément utile de le définir
dans le code (sauf peut-être pour que le programmeur suivant comprenne
mieux ce qu'il se passe). Autrement, tous
les appels sont les mêmes, ces deux gestionnaires plaçant
les composants graphiques de la même manière
: les uns à la suite des autres.
Notez que dès que le nombre de colonnes et de lignes
a été déterminé, le gestionnaire
ne se sert du nombre de colonnes qu'à titre indicatif
: si le nombre de composants graphiques à placer dépasse
le nombre de "cases", le gestionnaire affichera
les composants supplémentaires en ajoutant une nouvelle
colonne. C'est ce qui se passe dans notre exemple : nous avons
créé une grille de 2*3 où nous avons
placé 8 composants, et obtenons une interface de 3*3...
BorderLayout
Ce gestionnaire dispose les éléments d'une manière
particulière : un emplacement à chaque bordure
de la fenêtre, et le reste de l'espace pour un dernier
composant. Les différents emplacements sont appelés
North, West, East, Center, West et South. Il faut indiquer
son emplacement à chaque élément.
Voici le code, les différences avec FlowLayout étant
ici encore indiquées en gras.
import javax.swing.*;
import java.awt.*;
public class BorderXav
{
public static void main(String[] args)
{
JFrame myFrame = new JFrame();
JPanel panel = new JPanel();
BorderLayout jours = new BorderLayout();
panel.setLayout(jours);
JButton etiquette = new JButton("
Aujourd'hui: ");
JButton premier = new JButton("Lundi");
JButton deuxieme = new JButton("Mardi");
JButton troisieme = new JButton("Mercredi");
JButton quatrieme = new JButton("Jeudi");
JButton cinquieme = new JButton("Vendredi");
JButton sixieme = new JButton("Samedi");
JButton septieme = new JButton("Dimanche");
panel.add("North", etiquette);
panel.add("West", premier);
panel.add("Center", deuxieme);
panel.add("Center", troisieme);
panel.add("Center", quatrieme);
panel.add("Center", cinquieme);
panel.add("East", sixieme);
panel.add("South", septieme);
myFrame.setContentPane(panel);
myFrame.setTitle("Ou border_x, ça
marche aussi");
myFrame.setBounds(100,100,300,200);
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.setVisible(true);
}
}
 |
Forum |
|
|
Réagissez
dans les forums
de JDN Développeurs
|
Pour mieux voir les emplacements, nous avons remplacé
JCheckBox par des JButton...
La méthode add() requiert
ici un argument supplémentaire, une chaîne contenant
l'emplacement du composant.
Notez que nous avons sciemment placé 4 composants au
centre : le résultat nous donne un seul élément
dans cette position centrale - seul le dernier élément
ajouté est pris en compte.

Dans notre prochain article, nous verrons comment combiner les
trois gestionnaires déjà vus au
sein d'une seule fenêtre, afin de créer une interface
plus travaillée... |