布局管理器之CardLayout(卡片布局管理器)

对于选项卡这个概念大家可能不会陌生,就是在一个窗口中可以切换显示多页不同的内容,但同一时间只能是其中的某一页可见的,这样的一个个的页面就是选项卡。

CardLayout就是类似的这样一个布局管理器,它能够让多个组件共享同一个显示空间,共享空间的组件之间的关系就像重叠在一起的一幅扑克牌,组件重叠在一起,初始时显示该空间中第一个组件,通过CardLayout类提供的方法可以切换该空间中显示的组件。

下面我们来看一个例子,实现CardLayout布局管理器的使用。

创建一个使用CardLayout布局的面板:

// 卡片布局管理器
private CardLayout cardLayout;
// 使用卡片布局管理器的面板
private JPanel cardPnl;

cardLayout = new CardLayout();
cardPnl = new JPanel(cardLayout);

向面板中添加几张图片,因为面板使用卡片布局,所以所添加的图片是重叠在一起的:

/* 向面板中添加几张图片 */
for (int i = 0; i < 8; i++) {
    final int j = i + 1;
    // 将图片绘制到面板中
    JPanel img = new JPanel() {
        private static final long serialVersionUID = 1L;
        @Override
        protected void paintComponent(Graphics g) {
            g.drawImage(
                    Toolkit.getDefaultToolkit().getImage(
                            "images/Freedom" + j + ".gif"), 0, 0, null);
        }
    };
    // 将图片面板添加到使用了CardLayout的容器面板中
    cardPnl.add("Freedom" + j, img);
}

添加两个按钮,用于显示上一张图片与下一张图片,并为按钮注册事件监听器,处理事件的方法:

/**
 * 处理按钮点击事件
 */
@Override
public void actionPerformed(ActionEvent e) {
    String cmd = e.getActionCommand(); // 获取是何种操作
    if ("next".equals(cmd)) // 显示下一张图片
        cardLayout.next(cardPnl); // 切换下一个选项卡
    else if ("previous".equals(cmd)) // 显示上一张图片
        cardLayout.previous(cardPnl); // 切换上一个选项卡
}

我们可以通过调用CardLayout的next()方法翻转到指定容器的下一张卡片,如果当前的可见卡片是最后一个,则翻转到布局的第一张卡片。同样,也可以使用previout()方法翻转到指定容器的前一张卡片。除了这两个方法外,还有last()、first()方法可以翻转到最后一张、第一张卡片,我们也可以直接使用show()方法翻转到指定名称的卡片。

完整示例代码:

  1 package cardLayout;
  2
  3 import java.awt.BorderLayout;
  4 import java.awt.CardLayout;
  5 import java.awt.Graphics;
  6 import java.awt.Toolkit;
  7 import java.awt.event.ActionEvent;
  8 import java.awt.event.ActionListener;
  9
 10 import javax.swing.JButton;
 11 import javax.swing.JFrame;
 12 import javax.swing.JPanel;
 13 import javax.swing.JTextField;
 14
 15 /**
 16  * 测试卡片布局管理器 如果插入图片的名字不相同的话,就要用多个面板去绘制,因为一个面板只装一张图。名字相同就可以用循环。
 17  *
 18  * @author hellokitty燕
 19  *
 20  */
 21 public class CardLayoutDemo2 extends JFrame implements ActionListener {
 22
 23     private static final long serialVersionUID = 1L;
 24
 25     private CardLayout cardLayout;// 卡片布局管理器
 26     private JPanel jPanel;// 使用卡片布局管理器的面板
 27     private JTextField jTextField;// 用于你输入的跳转页面
 28
 29     public CardLayoutDemo2() {
 30
 31         setTitle("布局管理器之CardLayout");
 32         setSize(600, 600);
 33         setDefaultCloseOperation(EXIT_ON_CLOSE);
 34         setLocationRelativeTo(null);
 35
 36         /* 创建两个按钮,添加到窗体底部,默认窗体布局采用BorderLayout */
 37         JPanel jp = new JPanel();// 面板默认布局使用FlowLayout
 38
 39         JButton up = new JButton("上一张");
 40         JButton next = new JButton("下一张");
 41         jTextField = new JTextField("2");
 42         JButton go = new JButton("go");
 43
 44         jp.add(up);
 45         jp.add(next);
 46         jp.add(jTextField);
 47         jp.add(go);
 48         // 注册按钮监听事件
 49
 50         up.addActionListener(this);
 51         next.addActionListener(this);
 52         go.addActionListener(this);
 53         this.add(jp, BorderLayout.SOUTH);
 54
 55         /* 创建使用CardLayout布局管理器的容器 */
 56         cardLayout = new CardLayout();
 57         jPanel = new JPanel(cardLayout);
 58
 59         /* 向面板中添加几张图片 */
 60
 61         // 将图片绘制到面板中 /
 62         JPanel images = new JPanel() {
 63             private static final long serialVersionUID = 1L;
 64
 65             @Override
 66             protected void paintComponent(Graphics g) {
 67                 super.paintComponent(g);
 68                 g.drawImage(
 69                         Toolkit.getDefaultToolkit().getImage(
 70                                 "src/images/sprite.png"), 200, 100, this);
 71
 72             }
 73
 74         };
 75         // 将图片面板添加到使用了cardLayout容器面板中
 76
 77         jPanel.add("sprite", images);
 78
 79         JPanel img = new JPanel() {
 80
 81             private static final long serialVersionUID = 1L;
 82
 83             @Override
 84             protected void paintComponent(Graphics g) {
 85                 super.paintComponent(g);
 86                 g.drawImage(
 87                         Toolkit.getDefaultToolkit().getImage(
 88                                 "src/images/Freedom1.gif"), 200, 100, this);
 89             }
 90
 91         };
 92
 93         jPanel.add("Freedom1", img);
 94
 95         JPanel im = new JPanel() {
 96
 97             private static final long serialVersionUID = 1L;
 98
 99             @Override
100             protected void paintComponent(Graphics g) {
101                 super.paintComponent(g);
102                 g.drawImage(
103                         Toolkit.getDefaultToolkit().getImage(
104                                 "src/images/sprite1.png"), 200, 100, this);
105             }
106
107         };
108         jPanel.add("sprite1", im);
109
110         // 将使用了CardLayout的面板添加到窗体中显示
111         this.add(jPanel, BorderLayout.CENTER);
112
113         setVisible(true);
114
115     }
116
117     @Override
118     public void actionPerformed(ActionEvent e) {
119         String cmd = e.getActionCommand();
120         if ("下一张".equals(cmd)) {
121             cardLayout.next(jPanel); // 切换下一个选项卡
122         } else if ("上一张".equals(cmd)) {
123             cardLayout.previous(jPanel);// 切换上一个选项卡
124         } else if ("go".equals(cmd)) {
125             cardLayout.show(jPanel, "Freedom" + jTextField.getText());//这个主要是用于名字相似的图片,如果你想跳转的图片名字不一样的话,你就可以去把图片的名字改成相似的。
126         }
127
128     }
129
130     public static void main(String[] args) {
131         new CardLayoutDemo2();
132     }
133 }

运行效果:

时间: 2024-10-24 09:09:14

布局管理器之CardLayout(卡片布局管理器)的相关文章

三十二、Java图形化界面设计——布局管理器之CardLayout(卡片布局)

摘自 http://blog.csdn.net/liujun13579/article/details/7773945 三十二.Java图形化界面设计--布局管理器之CardLayout(卡片布局) 卡片布局能够让多个组件共享同一个显示空间,共享空间的组件之间的关系就像一叠牌,组件叠在一起,初始时显示该空间中第一个添加的组件,通过CardLayout类提供的方法可以切换该空间中显示的组件. 1.  CardLayout类的常用构造函数及方法 2.  使用CardLayout类提供的方法可以切换显

Java图形化界面设计——布局管理器之CardLayout(卡片布局)

卡片布局能够让多个组件共享同一个显示空间,共享空间的组件之间的关系就像一叠牌,组件叠在一起,初始时显示该空间中第一个添加的组件,通过CardLayout类提供的方法可以切换该空间中显示的组件. 1.  CardLayout类的常用构造函数及方法 2.  使用CardLayout类提供的方法可以切换显示该空间中的组件 方法一步骤: (1)      定义使用卡片布局的容器 例如:Panel cardPanel=new Panel(); (2)      定义卡片对象:CardLayout 布局对象

java Swing布局管理器之CardLayout布局

CardLayout布局: CardLayout布局管理器能够帮助用户处理两个以至更多的成员共享同一显示空间,它把容器分成许多层,每层的显示空间占据整个容器的大小,但是每层只允许放置一个组件,当然每层都可以利用Panel来实现复杂的用户界面 将容器中的每个组件看作一张卡片.一次只能看到一张卡片,容器则充当卡片的堆栈.当容器第一次显示时,第一个添加到CardLayout 对象的组件为可见组件. 卡片的顺序由组件对象本身在容器内部的顺序决定.CardLayout 定义了一组方法,这些方法允许应用程序

卡片布局CardView

CardView用于实现卡片式的布局效果.由appcompat-v7库提供.CardView其实也是一种FrameLayout.用CardView和RecyclerView实现图片文字和卡片布局. 用到RecyclerView和CardView控件,就要在闭包中添加一下依赖 compile 'com.android.support:recyclerview-v7:25.0.0' compile 'com.android.support:cardview-v7:25.0.0' compile 'c

卡片布局管理器(CardLayout)

1.作用: 卡片布局管理器是管理器的一种,卡片布局能够让多个组件共享同一个显示空间,共享空间的组件之间的关系就像一叠牌,组件叠在一起,初始时显示该空间中第一个添加的组件,通过CardLayout类提供的方法可以切换该空间中显示的组件. 2.CardLayout的常用构造方法: void   first(Container    parent)               翻转到指定容器的第一张卡片 void   next(Container   parent)               翻转到

卡片布局管理器

本例因为要制作卡片布局管理器,所以首先要构造框架窗体.先通过函数this.setLayout(new BorderLayout())设置Frame的布局管理器为BorderLayout:再两次实例化Panel类得到两个对象pnlCommandArea和pnlDisplayArea:然后通过函数this.add( pnlCommandArea, BorderLayout.NORTH和函数this.add( pnlDisplayArea, BorderLayout.CENTER) 将两Panel对象

Java图形化界面设计——布局管理器之FlowLayout(流式布局)

一.布局管理器所属类包 所属类包 布局管理器名称 说明 Java.awt FlowLayout(流式布局) 组件按照加入的先后顺序按照设置的对齐方式从左向右排列,一行排满到下一行开始继续排列 BorderLayout(边界布局) 容器划分为东.西.南.北.中五个区域,每个区域只能放置一个组件. GridLayout(网格布局) 容器的空间划分成M×N列的网格区域, 每个区域只能放置一个组件. CardLayout(卡片布局) 如同一叠牌,每个牌对应一个组件,但每次只能显示其中的一张牌.适用于在一

转:Java图形化界面设计——布局管理器之FlowLayout(流式布局)其他请参考转载出处网址

http://blog.csdn.net/liujun13579/article/details/7771191 前文讲解了JFrame.JPanel,其中已经涉及到了空布局的使用.Java虽然可以以像素为单位对组件进行精确的定位,但是其在不同的系统中将会有一定的显示差异,使得显示效果不尽相同,为此java提供了布局管理器,以使编写的图形界面具有良好的平台无关性. 注意:所有的布局管理器均是针对容器来使用的,包括顶层容器和中间容器. 一.布局管理器所属类包 所属类包 布局管理器名称 说明 Jav

03 Java图形化界面设计&mdash;&mdash;布局管理器之FlowLayout(流式布局)

前文讲解了JFrame.JPanel,其中已经涉及到了空布局的使用.Java虽然可以以像素为单位对组件进行精确的定位,但是其在不同的系统中将会有一定的显示差异,使得显示效果不尽相同,为此java提供了布局管理器,以使编写的图形界面具有良好的平台无关性. 注意:所有的布局管理器均是针对容器来使用的,包括顶层容器和中间容器. 一.布局管理器所属类包 所属类包 布局管理器名称 说明 Java.awt FlowLayout(流式布局) 组件按照加入的先后顺序按照设置的对齐方式从左向右排列,一行排满到下一