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