Les gestionnaires de placement Les paquetages graphiques de Java mettent à la disposition des programmeurs des objets qui vont l'aider à placer les objets graphiques dans un conteneur. BorderLayout BoxLayout Java : Les objets graphiques CardLayout FlowLayout GridBagLayout GridLayout SpringLayout Cours Java :Graphique 1 Cours Java :Graphique 2 Le BorderLayout Les gestionnaires de placement Les conteneurs (racines) de composants ont un gestionnaire de placement par défaut : BorderLayout Le gestionnaire sera responsable du placement des composants lorsque par exemple l'utilisateur va modifier la taille d'un composant. La méthode setLayout() permet de modifier le gestionnaire de placement Le BorderLayout partage le conteneur en 5 parties Il est possible de placer les composants en utilisant des positions absolues setLayout(null) // il n'y a plus de gestionnaire de placement Cours Java :Graphique 3 Le BorderLayout top, bottom, left, right, et center Lorsque les composants contenus n'occupent pas tout l'espace, la partie centre va occuper l'espace disponible Cours Java :Graphique Le BorderLayout Lors de l'ajout d'un composant, la partie du centre est utilisée par défaut Les constantes suivantes peuvent aussi être utilisées JFrame frame = new JFrame("BorderLayoutDemo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container pane = frame.getContentPane(); JButton button = new JButton("Button 1 (PAGE_START)"); pane.add(button, BorderLayout.PAGE_START); JFrame frame = new JFrame("BorderLayoutDemo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container pane = frame.getContentPane(); JButton button = new JButton("Button 1 (NORD)"); pane.add(button, BorderLayout.NORTH); button = new JButton("Button 2 (CENTER)"); button.setPreferredSize(new Dimension(200, 100)); pane.add(button, BorderLayout.CENTER); button = new JButton("Button 2 (CENTRE)"); button.setPreferredSize(new Dimension(200, 100)); pane.add(button, BorderLayout.CENTER); button = new JButton("Button 3 (LINE_START)"); pane.add(button, BorderLayout.LINE_START); button = new JButton("Button 3 (OUEST)"); pane.add(button, BorderLayout.WEST); button = new JButton("Long-Named Button 4 (PAGE_END)"); pane.add(button, BorderLayout.PAGE_END); button = new JButton("Long-Named Button 4 (SUD)"); pane.add(button, BorderLayout.SOUTH); button = new JButton("5 (LINE_END)"); pane.add(button, BorderLayout.LINE_END); frame.pack(); frame.setVisible(true); button = new JButton("5 (EST)"); pane.add(button, BorderLayout.EAST); frame.pack(); frame.setVisible(true); Cours Java :Graphique 5 Le BoxLayout Cours Java :Graphique 6 Le BoxLayout Le gestionnaire BoxLayout permet de placer les composants suivant l'axe des X ou l'axe des Y. Il respecte au mieux les préférences des composants (taille et alignement) Cours Java :Graphique 4 7 JFrame frame = new JFrame("BoxLayoutDemo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container pane = frame.getContentPane(); pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS)); float alignement = Component.CENTER_ALIGNMENT; JButton button = new JButton("Button 1"); button.setAlignmentX(alignement); pane.add(button); button = new JButton("Button 2"); button.setAlignmentX(alignement); pane.add(button); button = new JButton("Button 3"); button.setAlignmentX(alignement); pane.add(button); button = new JButton("Button le plus large"); button.setAlignmentX(alignement); pane.add(button); button = new JButton("Button 5"); button.setAlignmentX(alignement); pane.add(button); frame.pack(); frame.setVisible(true); Cours Java :Graphique 8 Le CardLayout Le CardLayout Le gestionnaire CardLayout permet de partager le même espace entre plusieurs conteneurs. On choisit le conteneur en indiquant son nom, ou le premier, le dernier, le suivant, le précédent. Cours Java :Graphique setLayout(new BorderLayout()); JPanel card1 = new JPanel(); JPanel radioPane = new JPanel(); card1.add(new JButton("Button 1")); radioPane.setLayout(new card1.add(new JButton("Button 2")); BoxLayout(radioPane, card1.add(new JButton("Button 3")); BoxLayout.X_AXIS)); ButtonGroup bg = new JPanel card2 = new JPanel(); ButtonGroup(); card2.add(new JRadioButton b = new JTextField("TextField", 20)); JRadioButton(VISUA); b.setActionCommand(VISUA); cards = new JPanel(new b.addActionListener(this); CardLayout()); bg.add(b); cards.add(card1, VISUA); radioPane.add(b); cards.add(card2, VISUB); b = new JRadioButton(VISUB); b.setActionCommand(VISUB); add(radioPane, b.addActionListener(this); BorderLayout.PAGE_START); bg.add(b); add(cards, BorderLayout.CENTER); radioPane.add(b); public void actionPerformed(ActionEvent e) { CardLayout cl = (CardLayout)(cards.getLayout()); cl.show(cards, e.getActionCommand()); } 9 10 Cours Java :Graphique Le FlowLayout Le FlowLayout Le gestionnaire FlowLayout est le gestionnaire par défaut du conteneur JPanel. public class FlowLayoutDemo { Il place les composants de gauche à droite sur la même ligne. Lorsqu'il n'y a plus de place il va à la ligne suivante. public static void main(String[] args) { JFrame frame = new JFrame("FlowLayoutDemo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container contentPane = frame.getContentPane(); contentPane.setLayout(new FlowLayout()); contentPane.add(new JButton("Button 1")); contentPane.add(new JButton("Button 2")); contentPane.add(new JButton("Button 3")); contentPane.add(new JButton("Long-Named Button 4")); contentPane.add(new JButton("5")); frame.pack(); frame.setVisible(true); } } Cours Java :Graphique 11 12 Cours Java :Graphique Le GridLayout Le GridLayout Le gestionnaire GridLayout gère les composants comme des cellules dans un tableau public class GridLayoutDemo { public static void main(String[] args) { JFrame frame = new JFrame("GridLayoutDemo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container contentPane = frame.getContentPane(); contentPane.setLayout(new GridLayout(3,3,5,5)); Le constructeur permet de spécifier le nombre de lignes et de colonnes new GridLayout(nbLignes, nbColonnes); Gap V contentPane.add(new JButton("1")); contentPane.add(new JButton("2")); contentPane.add(new JButton("3")); contentPane.add(new JButton("4")); contentPane.add(new JButton("5")); contentPane.add(new JButton("6")); contentPane.add(new JButton("7")); contentPane.add(new JButton("8")); contentPane.add(new JButton("9")); contentPane.add(new JButton("10")); frame.pack(); frame.setVisible(true); Si les nombres de lignes et de colonnes sont spécifiés, le nombre de colonnes est ignoré si il n'y a pas assez d'éléments. Gap H colonnes lignes } } Cours Java :Graphique 13 Cours Java :Graphique 14