1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
| package demo;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
public class DemoCardLayout {
private static final String PANEL_DEFAULT_ID = "default";
private static final String PANEL_1_ID = "1";
private static final String PANEL_2_ID = "2";
public static void main(String[] args) {
new DemoCardLayout().run();
}
public DemoCardLayout() {
}
public void run() {
// on créé une fenêtre
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new BorderLayout());
// on créé un panel principal dans lequel on aura trois panels dont 1 seul est affiché à la fois
// le panel principal = le panel avec CardLayout
JPanel mainPanel = new JPanel();
CardLayout cardLayout = new CardLayout();
mainPanel.setLayout(cardLayout);
// on créé les trois (sous-) panels
JPanel defaultPanel = new JPanel();
JPanel panel1 = createPanel("PANEL 1", Color.CYAN);
JPanel panel2 = createPanel("PANEL 2", Color.ORANGE);
// on ajoute les 3 panels, en associant à chacun d'eux un identifiant unique dans le panel principal
mainPanel.add(defaultPanel, PANEL_DEFAULT_ID); // le premier panel ajouté sera affiché par défaut
mainPanel.add(panel1, PANEL_1_ID);
mainPanel.add(panel2, PANEL_2_ID);
// on ajoute le panel principal au content pane de la fenêtre
frame.getContentPane().add(mainPanel);
// on crée un unique menu qui aura un item pour afficher chaque panel
JMenuBar menuBar = new JMenuBar();
frame.setJMenuBar(menuBar);
JMenu menu = new JMenu("Affichage");
menuBar.add(menu);
// les menu item pour afficher chaque panel
createMenu(menu, new CardLayoutPanelSelector(mainPanel,cardLayout, PANEL_1_ID), "Afficher panel 1") ;
createMenu(menu, new CardLayoutPanelSelector(mainPanel,cardLayout, PANEL_2_ID), "Afficher panel 2") ;
createMenu(menu, new CardLayoutPanelSelector(mainPanel,cardLayout, PANEL_DEFAULT_ID), "Revenir à l'état initial") ;
// on affiche la fenêtre
//frame.setSize(Toolkit.getDefaultToolkit().getScreenSize());
frame.setSize(200,200);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private void createMenu(JMenu menu, CardLayoutPanelSelector cardLayoutPanelSelector,
String menuLabel) {
JMenuItem menuItem = new JMenuItem(menuLabel);
menu.add(menuItem);
menuItem.addActionListener( cardLayoutPanelSelector );
}
private JPanel createPanel(String name, Color bg) {
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(new JLabel(name, JLabel.CENTER), BorderLayout.CENTER); // on affiche le nom du panel en son centre
panel.setBackground(bg);
return panel;
}
/**
* Une classe pour gérer l'affichage d'un panel sur action
*/
private class CardLayoutPanelSelector implements ActionListener {
private Container parent;
private CardLayout cardLayout;
private String panelId;
/**
*
* @param parent le container qui contient les panels à afficher
* @param cardLayout le composant de layout
* @param panelId l'identifiant du panel à afficher quand l'action est déclenchée
*/
public CardLayoutPanelSelector(Container parent, CardLayout cardLayout, String panelId) {
this.parent=parent;
this.cardLayout=cardLayout;
this.panelId=panelId;
}
@Override
public void actionPerformed(ActionEvent e) {
cardLayout.show(parent, panelId); // on demande l'affichage du panel d'identifiant panelId dans le CardLayout
}
}
} |
Partager