import javax.swing.*;
import java.awt.*;
class Boite extends JFrame{
JButton[] clavier=new JButton[12];
JTextField ecran;
Boite(){
super();
setTitle("GridLayout + BoxLayout");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(new
BoxLayout(getContentPane(),BoxLayout.PAGE_AXIS));
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);
JPanel bas=new JPanel();
bas.setLayout(new GridLayout(4,0,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);
setPreferredSize(new Dimension(250,450));
setLocation(400,400);
setMinimumSize(new Dimension(210,310));
pack();
setVisible(true);
}
public static void main(String[] args) {
new Boite();
}
}
La ligne
getContentPane().setLayout(new
BoxLayout(getContentPane(),BoxLayout.Y_AXIS));
affecte un BoxLayout au getContentPane() de la fenêtre , avec l'option Y_AXIS qui veut dire que les composants s'aligneront sur un axe vertical. (pour obtenir un alignement horizontal on utilise l'option X_AXIS, comme vous l'aurez deviné).
Il n'y a plus ensuite qu'à ajouter au ContentPane de la fenêtre les composants "haut" et "bas", qui s'aligneront l'un sous l'autre dans l'ordre d'ajout.
getContentPane().setLayout(new
BoxLayout(getContentPane(),BoxLayout.PAGE_AXIS));
par
Box boite_interne=new Box(BoxLayout.Y_AXIS); getContentPane().add(boite_interne);et les lignes getContentPane().add(haut); et getContentPane().add(bas);