Mise en page d'une interface graphique

BorderLayout

On peut utiliser le layout manager par défaut de la fenêtre. Il s'agit d'un BorderLayout. Ce layout est conçu pour s'organiser par-rapport aux bords du conteneur. Les positions sont décrites par des constantes (vor dessin ci-dessous) :

On peut n'utiliser qu'une partie des positions du BorderLayout (ce qu'on va faire ici).

On commence par créer un autre JPanel (appelé haut) affecté d'un Layout Manager GridLayout à 1 seule ligne/colonne, pour y placer le JTextField. (ce n'est pas obligatoire car on pourrait positionner directement le JTextField dans la fenêtre, mais c'est préférable car les JPanel ont des propriétés intéressantes d'autodimensionnement. En utililisant un GridLayout 1 x 1 on s'assure que le JTextField remplira complètement le JPanel quoi qu'il arrive).

L'élément placé au centre est celui qui aura les plus grandes dimensions : on va donc placer le JPane haut en position PAGE_START, et le JPanel bas en position CENTER.

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

class QuatreCoins extends JFrame{
  JButton[] clavier=new JButton[12];
  JTextField ecran;
  QuatreCoins(){
    super();
    setTitle("GridLayout + BorderLayout");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel haut=new JPanel();
    haut.setLayout(new GridLayout(1,1));

    ecran=new JTextField();
    ecran.setFont(new Font(Font.SANS_SERIF,Font.PLAIN,34));
    ecran.setBackground(Color.white);
    ecran.setEditable(false);
    haut.add(ecran);
    getContentPane().add(haut,BorderLayout.PAGE_START);

    JPanel bas=new JPanel();
    bas.setLayout(new GridLayout(4,3,2,2));

    for (int i=0;i<9;i++){
      clavier[i]=new JButton(new Integer(i+1).toString());
    }
    clavier[9]=new JButton("0");
    clavier[10]=new JButton(",");
    clavier[11]=new JButton("C");

    for (int i=0;i<12;i++){
      clavier[i].setFont(new Font(Font.SANS_SERIF,Font.BOLD,34));
      bas.add(clavier[i]);
    }	
    getContentPane().add(bas,BorderLayout.CENTER);

    setLocation(400,400);
    setMinimumSize(new Dimension(210,310));
    pack();
    setVisible(true);
  }

  public static void main(String[] args) {
    new QuatreCoins();
  }
}
Les modifications par-rapport à Base.java sont en violet.

Outre les changements déjà expliqués, on a modifié la façon dont la fenêtre est dimensionnée et positionnée :

setLocation(400,400);
setMinimumSize(new Dimension(210,310));
pack();

Lorsqu'on utilise des Layout Managers il n'est pas nécessaire de rendre la fenêtre non redimensionnable : la taille des composants s'ajustera automatiquement à celle de la fenêtre. On peut laisser Swing optimiser les dimensions en utilisant l'instruction pack(). Cependant dans notre cas si l'utilisateur diminue trop la taille de la fenêtre les boutons deviennent illisibles : on a donc intérêt à définir une taille minimale pour la fenêtre par setMinimumSize. On peut aussi souhaiter que la fenêtre ait de préférence une taille différente de celle déterminée par pack(); On ajouterait alors l'instruction setPreferredSize, impérativement associée à pack();.
Par exemple:
setPreferredSize(new Dimension(250,450));
 
Licence Creative Commons
licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé
Auteur : Nathalie Bonnin
Professeur de Physique, Chimie, Informatique au lycée La Martinière Monplaisir (Lyon 8ème)
Contact :
nathalie.bonnin (chez) scientillula.net
Licence Creative Commons
La totalité du contenu du site Scientillula.net appartient à Nathalie Bonnin et est mise à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé