CardLayout Example Program

01
of 01

Java Code:

Close-up hands typing on computer keyboard.
John Lamb/Photographer's Choice RF/Getty Images

The following is example Java code to show the CardLayout layout manager in action. The JFrame uses a BorderLayout to position two JPanels, one above the other. The top panel uses the FlowLayout to show a "Switch Card" button which controls which card is show in the bottom panel. The bottom panel uses the CardLayout to position two JPanels. The JPanel on show is determined by the CardLayout (which is changed to the next card by pressing the "Switch Card" button). 

The article that goes with this example is Using the CardLayout. For more information on other layout managers, have a look at ​an Overview of Layout Managers.

//Imports are listed in full to show what's being used
//could just import javax.swing.* and java.awt.* etc..
import java.awt.EventQueue;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import javax.swing.BorderFactory;
import javax.swing.border.Border;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JComboBox;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import java.awt.Container;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class CardLayoutExample {
 JFrame guiFrame;
 CardLayout cards;
 JPanel cardPanel;


 public static void main(String[] args) {
 
 //Use the event dispatch thread for Swing components
 EventQueue.invokeLater(new Runnable()
 {
 
 @Override
 public void run()
 {
 
 new CardLayoutExample(); 
 }
 });
 
 }
 
 public CardLayoutExample()
 { 
 guiFrame = new JFrame();
 
 //make sure the program exits when the frame closes
 guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 guiFrame.setTitle("CardLayout Example");
 guiFrame.setSize(400,300);
 
 //This will center the JFrame in the middle of the screen
 guiFrame.setLocationRelativeTo(null);
 guiFrame.setLayout(new BorderLayout());
 
 //creating a border to highlight the JPanel areas
 Border outline = BorderFactory.createLineBorder(Color.black);
 
 JPanel tabsPanel = new JPanel();
 tabsPanel.setBorder(outline);
 JButton switchCards = new JButton("Switch Card");
 switchCards.setActionCommand("Switch Card");
 switchCards.addActionListener(new ActionListener()
 {
 @Override
 public void actionPerformed(ActionEvent event)
 {
 cards.next(cardPanel);
 }
 });
 tabsPanel.add(switchCards);
 
 guiFrame.add(tabsPanel,BorderLayout.NORTH);
 
 
 cards = new CardLayout();
 cardPanel = new JPanel();
 cardPanel.setLayout(cards);
 cards.show(cardPanel, "Fruits");
 
 JPanel firstCard = new JPanel();
 firstCard.setBackground(Color.GREEN);
 addButton(firstCard, "APPLES");
 addButton(firstCard, "ORANGES");
 addButton(firstCard, "BANANAS");
 
 JPanel secondCard = new JPanel();
 secondCard.setBackground(Color.BLUE);
 addButton(secondCard, "LEEKS");
 addButton(secondCard, "TOMATOES");
 addButton(secondCard, "PEAS");
 
 cardPanel.add(firstCard, "Fruits");
 cardPanel.add(secondCard, "Veggies");
 
 guiFrame.add(tabsPanel,BorderLayout.NORTH);
 guiFrame.add(cardPanel,BorderLayout.CENTER);
 guiFrame.setVisible(true);
 }
 
 //All the buttons are following the same pattern
 //so create them all in one place.
 private void addButton(Container parent, String name)
 {
 JButton but = new JButton(name);
 but.setActionCommand(name);
 parent.add(but);
 }
}