Laying Out Components within a Container |
Here's an applet that shows aCardLayout
in action.
Your browser can't run 1.0 Java applets, so here are pictures of the window the program brings up:
Note: Because the preceding applet runs using Java Plug-in 1.1.1, it is a Swing 1.0.3 version of the applet. To run the Swing 1.1 Beta 3 version of the applet, you can use the JDK Applet Viewer to viewCard.html
, specifyingswing.jar
in the Applet Viewer's class path. For more information about running applets, refer to About Our Examples.As the above applet shows, the
CardLayout
class helps you manage two or more components (usuallyJPanel
instances) that share the same display space. Conceptually, each component aCardLayout
manages is like a playing card or trading card in a stack, where only the top card is visible at any time. You can choose the card that's showing in any of the following ways:
- By asking for either the first or last card, in the order it was added to the container.
- By flipping through the deck backwards or forwards.
- By specifying a card with a specific name. This is the scheme the example program uses. Specifically, the user can choose a card (component) by selecting it by name from a pop-up list of choices.
Below is the code that creates the
CardLayout
and the components it manages. (Here's the whole program. The program runs either within an applet, with the help ofAppletButton
, or as an application.)When you add a component to a container that a//Where instance variables are declared: JPanel cards; final static String BUTTONPANEL = "JPanel with JButtons"; final static String TEXTPANEL = "JPanel with JTextField"; //Where the container is initialized: cards = new JPanel(); cards.setLayout(new CardLayout()); ...//Create a Panel named p1. Put buttons in it. ...//Create a Panel named p2. Put a text field in it. cards.add(BUTTONPANEL, p1); cards.add(TEXTPANEL, p2);CardLayout
manages, you must use the two-argument form of theContainer
add
method:add(String name, Component comp)
. The first argument can be any string that somehow identifies the component being added.To choose which component a
CardLayout
shows, you need some additional code. Here's how the example program does this:This example shows that you can use the//Where the container is initialized: . . . //Put the JComboBox in a JPanel to get a nicer look. String comboBoxItems[] = { BUTTONPANEL, TEXTPANEL }; JPanel cp = new JPanel(); JComboBox c = new JComboBox(comboBoxItems); c.setEditable(false); c.addItemListener(this); cp.add(c); contentPane.add(cp, BorderLayout.NORTH); . . . public void itemStateChanged(ItemEvent evt) { CardLayout cl = (CardLayout)(cards.getLayout()); cl.show(cards, (String)evt.getItem()); }CardLayout
show
method to set the currently showing component. The first argument to theshow
method is the container theCardLayout
controls, that is, the container of the components theCardLayout
manages. The second argument is the string that identifies the component to show. This string is the same as was used when adding the component to the container.The following are all the
CardLayout
methods that let you choose a component. For each method, the first argument is the container for which theCardLayout
is the layout manager (the container of the cards theCardLayout
controls).public void first(Container parent) public void next(Container parent) public void previous(Container parent) public void last(Container parent) public void show(Container parent, String name)Examples that Use CardLayout
[PENDING]
Laying Out Components within a Container |