TUTORIEL JAVA 
Java : mise en forme d'une interface (1) : FlowLayout
Premier épisode d'une série d'articles consacrés aux gestionnaires d'interface, exemples à l'appui. (19/04/2004)
  Forum

Réagissez dans les forums de JDN Développeurs

Nous débutons ici une série d'articles sur la mise en forme (ou "en page") d'une interface à l'aide des gestionnaires de Java. Cela peut sembler futile en ces jours où la moindre application Java est conçue au sein d'un environnement de développement, et où les interfaces sont composées par suite de glisser-déposer des éléments idoines en leurs emplacements désirés, mais tout comme il faut d'abord apprendre le HTML avec le bloc-note avant de se permettre de passer par un outil comme Dreamweaver, il est de bon temps de connaître les gestionnaires ad hoc avant de passer à, par exemple, JBuilder.

Ces gestionnaires d'interface s'assurent que les éléments intègrés à l'application ne se superposent pas. Chaque élément est placé dans un conteneur, et ce contenu peut lui-même être contenu dans un autre conteneur. Au final, vous pouvez combiner les types de gestionnaires afin de maîtriser au mieux votre interface. .
.
Nous inaugurons cette série avec le gestionnaire FlowLayout, le gestionnaire par défaut des fenêtres JPanel.
.
FlowLayout est le plus simple des gestionnaires : il organise les éléments au fur et à mesure qu'ils sont intégrés à l'interface, de gauche à droite, à la manière des mots d'une phrase. Les éléments sont centrés dans la fenêtre. S'il n'y plus d'espace en largeur pour ajouter un élément à la ligne, l'élément est placé à la ligne suivante. Pareillement, si l'utilisateur change la taille de la fenêtre, les éléments se déplacent pour remplir au mieux l'espace qui leur est alloué.

En voici un exemple (non-fonctionnel) plutôt qu'un long discours :

import javax.swing.*;
import java.awt.*;

public class FlowerPower
  {
  public static void main(String[] args)
    {
    JFrame fenetre = new JFrame();
    JPanel panel = new JPanel();

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

    fenetre.setContentPane(panel);
    fenetre.setTitle("Wesh mate mon flow!");
    fenetre.setBounds(100,100,200,200);
    fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    fenetre.setVisible(true);
    }
  }

Compilé et lancé, ce code donnera la fenêtre suivante :

Vous pouvez apprécier la mise en place "ligne à ligne" de FlowLayout en modifiant la taille de la fenêtre :

Après avoir créé notre JFrame et son JPanel, nous créons huit éléments (dont 7 cases à cocher, l'une d'elles étant par défaut cochée), et nous les ajoutons un à un à notre JPanel. Nous précisons ensuite quelques détails d'affichage et de fonctionnement de la fenêtre JFrame, ponctué par un .setVisible(true).

On voit ainsi bien que l'utilisation de FlowLayout est extrêmement simple - et c'est justement cette simplicité qui fait que ce gestionnaire est toujours autant utilisé (en combinaison avec d'autres que nous verrons bientôt) : il permet de créer rapidement une interface, et se montre par exemple idéal quand on construit une interface au fur et à mesure du développement.
Il est cependant très limité, et nous verrons dans nos prochains articles sur le sujet les possibilités offertes par quelques autres gestionnaires...

Notez que vous pouvez facilement aligner les élément ailleurs qu'au centre, en utilisant un argument comme FlowLayout.LEFT ou FlowLayout.RIGHT au sein du constructeur.
Notez également une limitation importante : si les éléments dépassent la taille disponible, rien n'indiquera à l'utilisateur qu'il y en d'autres à afficher s'il agrandit la fenêtre...

 
Xavier Borderie, JDN Développeurs
 
Accueil | Haut de page