Java Swing面板布局之卡片布局CardLayout

一、简介

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

    }

}

 

  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Swing提供了CardLayout类来实现卡片布局卡片布局是一种容器,它允许在同一位置放置多个组件,并且只显示其中一个组件。用户可以通过操作各种控件来切换显示的组件。 以下是一个简单的示例程序,演示了如何使用卡片布局: ```java import java.awt.*; import java.awt.event.*; import javax.swing.*; public class CardLayoutDemo implements ActionListener { JPanel cards; // a panel that uses CardLayout final static String BUTTONPANEL = "Button Panel"; final static String TEXTPANEL = "Text Panel"; public void addComponentToPane(Container pane) { // Put the JComboBox in a JPanel to get a nicer look. JPanel comboBoxPane = new JPanel(); // use FlowLayout String comboBoxItems[] = { BUTTONPANEL, TEXTPANEL }; JComboBox cb = new JComboBox(comboBoxItems); cb.setEditable(false); cb.addActionListener(this); comboBoxPane.add(cb); // Create the "cards". JPanel card1 = new JPanel(); card1.add(new JButton("Button 1")); card1.add(new JButton("Button 2")); card1.add(new JButton("Button 3")); JPanel card2 = new JPanel(); card2.add(new JTextField("TextField", 20)); // Create the panel that contains the "cards". cards = new JPanel(new CardLayout()); cards.add(card1, BUTTONPANEL); cards.add(card2, TEXTPANEL); pane.add(comboBoxPane, BorderLayout.PAGE_START); pane.add(cards, BorderLayout.CENTER); } public void actionPerformed(ActionEvent e) { CardLayout cl = (CardLayout)(cards.getLayout()); cl.show(cards, (String)e.getSource()); } private static void createAndShowGUI() { // Create and set up the window. JFrame frame = new JFrame("CardLayoutDemo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Create and set up the content pane. CardLayoutDemo demo = new CardLayoutDemo(); demo.addComponentToPane(frame.getContentPane()); // Display the window. frame.pack(); frame.setVisible(true); } public static void main(String[] args) { // Schedule a job for the event dispatch thread: // creating and showing this application's GUI. javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); } } ``` 在此示例中,我们使用了一个JComboBox来选择要显示的卡片。在addComponentToPane方法中,我们创建了两个卡片,一个包含三个按钮,另一个包含一个文本框。我们使用CardLayout将它们添加到一个面板中,然后将面板添加到主容器中。 在actionPerformed方法中,我们使用CardLayout的show方法来显示所选的卡片。 需要注意的是,CardLayout的show方法接受两个参数,第一个参数是包含卡片面板,第二个参数是要显示的卡片的名称。在本例中,我们使用JComboBox的getSelectedItem方法获取所选卡片的名称,并将其作为第二个参数传递给show方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值