一、简介
卡片布局能够让多个组件共享同一个显示空间,共享空间的组件之间的关系就像一叠牌,组件叠在一起,初始时显示该空间中第一个添加的组件,通过CardLayout类提供的方法可以切换该空间中显示的组件。
可以通过调用CardLayout的next方法翻转到指定容器的下一张卡片,如果当前的可见卡片是最后一个,则翻转到布局的第一张卡片。同样也可以使用previous方法翻转到指定容器的前一张卡片。除了这两个方法,还有last、first方法可以翻转到最后一张、第一张卡片,我们也可以直接使用show方法翻转到指定名称的卡片。
二、构造函数
//组件距容器左右边界和上下边界的距离为缺省值0个像素
public CardLayout();
//组件距容器左右边界和上下边界的距离为指定值
public CardLayout(int hgap, int vgap);
三、类及常用方法
//翻转到容器的第一张卡片
public void first(Container parent)
//翻转到容器的最后一张卡片
public void last(Container parent)
//翻转到容器的前一张卡片
public void previous(Container parent)
//翻转倒容器的后一张卡片
public void next(Container parent)
//显示指定名称的卡片
public void show(Container parent, String name)
public int getHgap()
public void setHgap(int hgap)
public int getVgap()
public void setVgap(int vgap)
四、举例
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class CardLayout02 extends JFrame {
private static final long serialVersionUID = 1L;
// 主要的JPanel,该JPanel的布局管理将被设置成CardLayout
private JPanel cardPanel = null;
// CardLayout布局管理器
private CardLayout card = null;
// 放按钮的JPanel
private JPanel btnPanel = null;
private JButton btn_previous = null; // 上一个
private JButton btn_next = null; // 下一个
private JButton b_1 = null, b_2 = null, b_3 = null; // 三个可直接翻转到JPanel组件的按钮
private JPanel p_1 = null, p_2 = null, p_3 = null; // 要切换的三个JPanel
public CardLayout02() {
super("CardLayout Test");
/** 创建一个具有指定的水平和垂直间隙的新卡片布局 */
card = new CardLayout(5, 5);
cardPanel = new JPanel(card); // JPanel的布局管理将被设置成CardLayout
p_1 = new JPanel();
p_2 = new JPanel();
p_3 = new JPanel();
p_1.setBackground(Color.RED);
p_2.setBackground(Color.ORANGE);
p_3.setBackground(Color.GREEN);
p_1.add(new JLabel("JPanel_1"));
p_2.add(new JLabel("JPanel_2"));
p_3.add(new JLabel("JPanel_3"));
cardPanel.add(p_1, "p1");
cardPanel.add(p_2, "p2");
cardPanel.add(p_3, "p3");
btnPanel = new JPanel(); // 构造放按钮的JPanel
btn_previous = new JButton("< 上一个");
btn_next = new JButton("下一个 >");
b_1 = new JButton("1");
b_2 = new JButton("2");
b_3 = new JButton("3");
b_1.setMargin(new Insets(2, 2, 2, 2));
b_2.setMargin(new Insets(2, 2, 2, 2));
b_3.setMargin(new Insets(2, 2, 2, 2));
btnPanel.add(btn_previous);
btnPanel.add(b_1);
btnPanel.add(b_2);
btnPanel.add(b_3);
btnPanel.add(btn_next);
/** 下面是翻转到卡片布局的某个组件,可参考API中的文档 */
btn_previous.addActionListener(new ActionListener() { // 上一步的按钮动作
public void actionPerformed(ActionEvent e) {
card.previous(cardPanel);
}
});
btn_next.addActionListener(new ActionListener() { // 下一步的按钮动作
public void actionPerformed(ActionEvent e) {
card.next(cardPanel);
}
});
b_1.addActionListener(new ActionListener() { // 直接翻转到p_1
public void actionPerformed(ActionEvent e) {
card.show(cardPanel, "p1");
}
});
b_2.addActionListener(new ActionListener() { // 直接翻转到p_2
public void actionPerformed(ActionEvent e) {
card.show(cardPanel, "p2");
}
});
b_3.addActionListener(new ActionListener() { // 直接翻转到p_3
public void actionPerformed(ActionEvent e) {
card.show(cardPanel, "p3");
}
});
this.getContentPane().add(cardPanel);
this.getContentPane().add(btnPanel, BorderLayout.SOUTH);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(300, 200);
this.setVisible(true);
}
public static void main(String[] args) {
new CardLayout02();
}
}