package com.test.testswing; import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Color; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class TestCardLayout extends JFrame implements ActionListener{ private final String[] names = new String[]{"red","blue","green"}; private final Color[] colors = new Color[]{Color.RED,Color.BLUE,Color.GREEN}; private JButton[] btn = new JButton[names.length]; private JPanel northJp = new JPanel(); private JPanel centerJp = new JPanel(); //用来放jpanel private JPanel[] panels = new JPanel[names.length]; private GridLayout gridLayout = new GridLayout(1, 3); //1行3列 网格布局 private CardLayout cardLayout = new CardLayout(); //卡片布局 public TestCardLayout(){ this.setLayout(new BorderLayout()); northJp.setLayout(gridLayout); //设置成网格布局 centerJp.setLayout(cardLayout); //将其设置成卡片 centerJp.setSize(100, 100); for(int i = 0; i < names.length;i++) { btn[i] = new JButton(names[i]); btn[i].addActionListener(this); northJp.add(btn[i]); panels[i] = new JPanel(); //每个数组中放一个JPanel panels[i].setBackground(colors[i]); //设置这个panel的背景色 centerJp.add(panels[i],names[i]); //将panel[i]添加到卡片布局中去,并将其约束设置成name[i] } this.add(northJp, BorderLayout.NORTH); this.add(centerJp, BorderLayout.CENTER); // this.pack(); //将窗口大小随组件大小变化 this.setSize(400, 400); this.setVisible(true); } public static void main(String[] args) { new TestCardLayout(); } public void actionPerformed(ActionEvent e) { JButton jbtn = (JButton)e.getSource(); System.out.println("text=="+jbtn.getText()); System.out.println("name=="+jbtn.getName()); //show方法API:翻转到使用 addLayoutComponent 添加到此布局的具有指定 name 的组件 cardLayout.show(centerJp, jbtn.getText()); //卡片显示centerJp Jpanel中的text为jbtn.getText()的Jpanel } } 孙卫琴 java面向对象 中例子