RECHERCHER

BOURSES & MARCHES

CAC 40 0.47 %

SBF 120 0.56 %

Nasdaq -1.83 %

Petrole (NY) 0.29 %

Tous les cours


ANNUAIRES

 
 TUTORIEL JAVA 
Mise en forme d'une interface (2) : GridLayout et BorderLayout
Deuxième partie de notre série sur la création d'interface utilisateur avec Swing : au menu deux nouveaux gestionnaires. (27/05/2004)
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...
 
Xavier Borderie, JDN Développeurs
 
Accueil | Haut de page
 
 



 
 
Nos autres sites Société | Mentions légales | Contacts | Publicité | PA Emploi | Presse | Recrutement | Tous nos sites | Données personnelles
© Benchmark Group, 69/71 avenue Pierre Grenier. 92517 Boulogne Billancourt Cedex