摘自

http://blog.csdn.net/liujun13579/article/details/7773945

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

卡片布局能够让多个组件共享同一个显示空间,共享空间的组件之间的关系就像一叠牌,组件叠在一起,初始时显示该空间中第一个添加的组件,通过CardLayout类提供的方法可以切换该空间中显示的组件。

1、  CardLayout类的常用构造函数及方法

2、  使用CardLayout类提供的方法可以切换显示该空间中的组件



方法一

步骤:

(1)      定义使用卡片布局的容器

例如:Panel cardPanel=new Panel();

(2)      定义卡片对象:CardLayout 布局对象名称=new CardLayout();

例如:CardLayout card=new CardLayout();

(3)      设置使用卡片布局的容器为卡片布局:

格式:容器名称.setLayout(布局对象名称);

例如:cardPanel.setLayout(card);

(4)      设置容器中显示的组件

例如:for (int i = 0; i < 5; i++) {

cardPanel.add(newJButton("按钮"+i));

}

(5)      定义响应事件代码,让容器显示相应的组件

格式:

n  布局对象名称.next(容器名称)   显示容器中当前组件之后的一个组件,若当前组件为最后添加的组件,则显示第一个组件,即卡片组件显示是循环的。

n  布局对象名称.first(容器名称)   显示容器中第一个组件

n  布局对象名称.last(容器名称)   显示容器中最后一个组件

n  布局对象名称.previous(容器名称)   显示容器中当前组件之前的一个组件,若当前组件为第一个添加的组件,则显示最后一个组件,即卡片组件显示是循环的。

例如:

card.next(cardPanel);

card.previous(cardPanel);

card.first(cardPanel);

card.last(cardPanel);


实例一:卡片的切换

窗体默认边界布局,一个面板以卡片布局,面板上添加五个按钮,该面板添加到CENTER位置,另一个面板添加两个按钮,两个按钮添加事件来切换显示CENTER位置中的面板的组件

程序显示结果如下图所示,单击“上一张卡片”、“下一张卡片”等按钮可以上面的面板中显示不同的按钮来。

package com.wst.bj;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;//引入事件包

//定义类时实现监听接口

public class CardLayoutDemo extends JFrame implements ActionListener {

    JButton nextbutton;

    JButton preButton;

    Panel cardPanel = new Panel();

    Panel controlpaPanel = new Panel();

    // 定义卡片布局对象

    CardLayout card = new CardLayout();

    // 定义构造函数

    public CardLayoutDemo() {

        super("卡片布局管理器");

        setSize(300, 200);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setLocationRelativeTo(null);

        setVisible(true);

        // 设置cardPanel面板对象为卡片布局

        cardPanel.setLayout(card);

        // 循环,在cardPanel面板对象中添加五个按钮

        // 因为cardPanel面板对象为卡片布局,因此只显示最先添加的组件

        for (int i = 0; i < 5; i++) {

            cardPanel.add(new JButton("按钮" + i));

        }

        // 实例化按钮对象

        nextbutton = new JButton("下一张卡片");

        preButton = new JButton("上一张卡片");

        // 为按钮对象注册监听器

        nextbutton.addActionListener(this);

        preButton.addActionListener(this);

        controlpaPanel.add(preButton);

        controlpaPanel.add(nextbutton);

        // 定义容器对象为当前窗体容器对象

        Container container = getContentPane();

        // 将 cardPanel面板放置在窗口边界布局的中间,窗口默认为边界布局

        container.add(cardPanel, BorderLayout.CENTER);

        // 将controlpaPanel面板放置在窗口边界布局的南边,

        container.add(controlpaPanel, BorderLayout.SOUTH);

    }

    // 实现按钮的监听触发时的处理

    public void actionPerformed(ActionEvent e) {

        // 如果用户单击nextbutton,执行的语句

        if (e.getSource() == nextbutton) {

            // 切换cardPanel面板中当前组件之后的一个组件

            // 若当前组件为最后添加的组件,则显示第一个组件,即卡片组件显示是循环的。

            card.next(cardPanel);

        }

        if (e.getSource() == preButton) {

            // 切换cardPanel面板中当前组件之前的一个组件

            // 若当前组件为第一个添加的组件,则显示最后一个组件,即卡片组件显示是循环的。

            card.previous(cardPanel);

        }

    }
}


方法二

步骤:

(1)      定义使用卡片布局的容器

例如:Panel cardPanel=new Panel();

(2)      定义卡片对象:CardLayout 布局对象名称=newCardLayout();

例如:CardLayout card=new CardLayout();

(3)      设置使用卡片布局的容器为卡片布局:

格式:容器名称.setLayout(卡片对象名称);

例如:cardPanel.setLayout(card);

(4)      设置容器中显示的组件,同时为组件命名对应的卡片名称

格式: 容器名称. Add(卡片名称,组件名称)

例如:for (int i = 0; i < 4; i++) {

cardPanel.add(“0”,newJButton("按钮"+i));

}

(5)      定义响应事件代码,让容器显示相应的组件

格式:卡片对象名称.show(容器名称,卡片名称)

例如:card.show(cardPanel,”0”);


实例二:使用CardLayout类的show方法显示组件。

窗体默认边界布局,一个面板以卡片布局,面板上添加4个按钮,该面板添加到CENTER位置,另一个面板添加4个按钮,这4个按钮添加事件来切换显示CENTER位置中的面板的组件按钮。

程序执行结果:

 package com.wst.bj;

 import java.awt.*;

 import javax.swing.*;

 import java.awt.event.*;//引入事件包

 //定义类时 实现监听接口

 public class CardLayoutDemo2 extends JFrame implements ActionListener {

     JButton b0, b1, b2, b3;

     Panel cardPanel = new Panel();

     Panel controlpaPanel = new Panel();

     // 定义卡片布局对象

     CardLayout card = new CardLayout();

     // 定义字符数组,为卡片命名

     String cardName[]=
{"0","1","2","3"}; // 定义构造函数 public CardLayoutDemo2() { super("卡片布局管理器"); setSize(400, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); setVisible(true); // 设置cardPanel面板对象为卡片布局 cardPanel.setLayout(card); // 循环,在cardPanel面板对象中添加4个按钮 // 因为cardPanel面板对象为卡片布局,因此初始时显示最先添加的组件 for (int i = 0; i < 4; i++) { // 面板中添加的每个按钮对应设置一个卡片名 cardPanel.add(cardName[i], new JButton("按钮" + i)); } // 实例化按钮对象 b0 = new JButton("0"); b1 = new JButton("1"); b2 = new JButton("2"); b3 = new JButton("3"); // 为按钮对象注册监听器 b0.addActionListener(this); b1.addActionListener(this); b2.addActionListener(this); b3.addActionListener(this); controlpaPanel.add(b0); controlpaPanel.add(b1); controlpaPanel.add(b2); controlpaPanel.add(b3); // 定义容器对象为当前窗体容器对象 Container container = getContentPane(); // 将 cardPanel面板放置在窗口边界布局的中间,窗口默认为边界布局 container.add(cardPanel, BorderLayout.CENTER); // 将controlpaPanel面板放置在窗口边界布局的南边, container.add(controlpaPanel, BorderLayout.SOUTH); } // 实现按钮的监听触发时的处理 public void actionPerformed(ActionEvent e){ //用户单击b0按钮时执行的语句 if(e.getSource()==b0){ //通过show()方法中的卡片名称,显示容器中的组件。 card.show(cardPanel,cardName[0]); } if(e.getSource()==b1){ card.show(cardPanel,cardName[1]); } if(e.getSource()==b2){ card.show(cardPanel,cardName[2]); } if(e.getSource()==b3){ card.show(cardPanel,cardName[3]); } }
}
 
 

三十二、Java图形化界面设计——布局管理器之CardLayout(卡片布局)的更多相关文章

  1. 转:三十、Java图形化界面设计——布局管理器之BorderLayout(边界布局)

    http://blog.csdn.net/liujun13579/article/details/7772215 边界布局管理器把容器的的布局分为五个位置:CENTER.EAST.WEST.NORTH ...

  2. 三十、Java图形化界面设计——布局管理器之BorderLayout(边界布局)

    边界布局管理器把容器的的布局分为五个位置:CENTER.EAST.WEST.NORTH.SOUTH.依次相应为:上北(NORTH).下南(SOUTH).左西(WEST).右东(EAST),中(CENT ...

  3. 三十三、Java图形化界面设计——布局管理器之null布局(空布局)

    摘自http://blog.csdn.net/liujun13579/article/details/7774267 三十三.Java图形化界面设计--布局管理器之null布局(空布局) 一般容器都有 ...

  4. 三十一、Java图形化界面设计——布局管理器之GridLayout(网格布局)

    摘自http://blog.csdn.net/liujun13579/article/details/7772491 三十一.Java图形化界面设计--布局管理器之GridLayout(网格布局) 网 ...

  5. 转:三十三、Java图形化界面设计——布局管理器之null布局(空布局)——即SWT中的绝对布局

    http://blog.csdn.net/liujun13579/article/details/7774267    一般容器都有默认布局方式,但是有时候需要精确指定各个组建的大小和位置,就需要用到 ...

  6. 转:三十一、Java图形化界面设计——布局管理器之GridLayout(网格布局)

    http://blog.csdn.net/liujun13579/article/details/7772491 网格布局特点: l  使容器中的各组件呈M行×N列的网格状分布. l  网格每列宽度相 ...

  7. 转:二十七、Java图形化界面设计——容器(JFrame)

    转:http://blog.csdn.net/liujun13579/article/details/7756729 二十七.Java图形化界面设计——容器(JFrame) 程序是为了方便用户使用的, ...

  8. 二十七、Java图形化界面设计——容器(JFrame)

    摘自http://blog.csdn.net/liujun13579/article/details/7756729 二十七.Java图形化界面设计--容器(JFrame) 程序是为了方便用户使用的, ...

  9. Java图形化界面设计——容器(JFrame)

    Java图形化界面设计——容器(JFrame) 程序是为了方便用户使用的,因此实现图形化界面的程序编写是所有编程语言发展的必然趋势,在命令提示符下运行的程序可以让我们了解java程序的基本知识体系结构 ...

随机推荐

  1. windows可以登录qq,但无法打开浏览器页面

    1.检查dns是否配置. 2.检查hosts是否有异常. 3.电脑上装有抓包软件,为IE设置代理服务器了. 4.360网络修复.

  2. Pure Css 菜单的使用

    本人新手,之前偶尔接触Bootstrap,也做过一些响应式开发,但是都是略显皮毛,公司的业务需求也限制了深入学习. 现着手Pure Css学习,尝试了简单的左边菜单自动隐藏的demo.闲话少说,代码贴 ...

  3. Android开发之去掉标题栏的三种方法,推荐第三种

    Android:去掉标题栏的三种方法和全屏的三种方法 第一种:一般入门的时候常常使用的一种方法 onCreate函数中增加下面代码: requestWindowFeature(Window.FEATU ...

  4. The account is locked

    SQL> select * from v$version where rownum=1; BANNER --------------------------------------------- ...

  5. 用函数式的 Swift 实现图片转字符画的功能

    今天整理 Pocket 中待看的文章,看到这篇<Creating ASCII art in functional Swift>,讲解如何用 Swift 将图片转成 ASCII 字符.具体原 ...

  6. mycat源码分析

    http://www.cnblogs.com/fernandolee24/p/5196367.html

  7. C++菱形继承的构造函数

    网上搜了很多,大多是关于菱形虚继承的构造函数应该怎么写,或者就是最简单的,四个类都不带参数的构造函数. 本文旨在记录一下困扰了博主1h的问题,非常浅显,有帮助固然好,如果侮辱谁的智商还见谅,当然无限欢 ...

  8. JavaScript ----------------- 寄生式继承

    寄生式继承 寄生式继承是于原型式继承紧密相关的一种思路.寄生式基础的思路与寄生构造函数和工厂模式类似,既创建一个仅用于封装继承过程的函数,该函数内部以某种方式来增强对象,最后再像真地是它做了所有工作一 ...

  9. WIN7系统JavaEE(java+tomcat7+Eclipse)环境配

    在进行 Java Web环境开发之前,首先要做的第一件事就是搭建开发环境,开发环境搭建成功,接下来便是对整个开发环境进行测试,可以通过编写一个简单的JSP 程序发布到Tomcat应用服务器上运行. 1 ...

  10. [Python]打开文件的模式

    Python中以sys.open()方法打开文件 import sys file = open("D:\\file.txt") 其中可在第二个参数的位置指定打开文件的模式 impo ...