一、简介

卡片布局能够让多个组件共享同一个显示空间,共享空间的组件之间的关系就像一叠牌,组件叠在一起,初始时显示该空间中第一个添加的组件,通过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();

    }

}

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐