十九、java-GUI之卡片布局(CardLayout)

来源:互联网 发布:戴尔服务u盘安装centos 编辑:程序博客网 时间:2024/04/29 12:08

CardLayout(卡片布局)

1、CardLayout布局特征

卡片布局能让多个组件共享同一个空间。

共享空间的组件之间的关系就像一叠牌叠在一起,只显示最上层的组件。(一叠纸牌只能看到最上面的这张)

我们通过CardLayout类提供的方法,可以切换该空间中显示的组件。(切换查看这叠牌下面其他的牌)

2、卡片布局CardLayout类的常用构造函数和方法

 

构造方法摘要

CardLayout ()

卡片布局,默认上下左右边距为0px

CardLayout (int hgap, int vgap)

指定上下左右边距

 

方法摘要

void first(Container parent)

翻转到容器第一张卡片

void previous(Container parent)

翻转到上一张卡片

void next(Container parent)

翻转到下一张卡片

void last(Container parent)

翻转到容器最后一张卡片

void show(Container parent,String name)

显示指定一张卡片

3、卡片布局的使用

Panel cardPanel=new Panel();            //定义一个叫cardPanel的面板

CardLayout card=newCardLayout();    //定义一个卡片布局对象card

cardPanel.setLayout(card);                 //把定义的cardPanel面板设置为card布局

for (int i = 0; i < 5;i++)                           //往面板内加入5张“卡片”

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

4、卡片布局实例

实例://CardLayoutDemo.java  (这个例子代码可能相对比较多,但理解下来基本算是明白了卡片布局)

package cardlayoutdemo;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

 

public class CardLayoutDemoextends JFrame implements ActionListener{   //定义类时实现监听接口

    JButton preButton;   //声明一个用来切换 上一卡片的按钮

    JButton nextbutton;  //声明一个用来切换 下一卡片的按钮

    Panel cardPanel = new Panel();        //新建一个叫cardPanel的面板

    Panel controlPanel = new Panel();    //新建一个叫controlPanel的面板

    Panel showPanel = new Panel();       //新建一个叫showPanel的面板(指定卡片代码测试使用)

    CardLayout card = new CardLayout();  //定义卡片布局对象card 后面调用此对象可切换上一张下一张

    JButton b1,b2,b3,b4,b5;                        //定义5个用来测试指定跳转的按钮

    String cardName[]={"1","2","3","4","5"}; //定义一个数组存放卡片的名字

   

    public CardLayoutDemo() {              //定义构造函数

      super("卡片布局管理器");       //设置标题

      setSize(300, 200);                  //设置大小

      setLocationRelativeTo(null);   //居中

      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);      //设置默认关闭操作

      setVisible(true);                      //设置可见

      cardPanel.setLayout(card);    //将叫cardPanel的面板设置为卡片布局

      

       //循环在cardPanel面板添加五个"卡片",(这个例子所谓的卡片其实是按钮JButton)

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

       {   //面板.add(卡片名字,new JButton(卡片显示内容));

            cardPanel.add(cardName[i],new JButton("这是卡片"+(i+1)));

       } 


       //实例化按钮对象

       preButton = new JButton("上一张卡片");    //下面面板里 两个上下切换按钮

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

       b1 = newJButton("1");                                //上面面板里 5个指定卡片切换按钮

       b2 = newJButton("2");

       b3 = newJButton("3");

       b4 = newJButton("4");

       b5 = newJButton("5");


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

      preButton.addActionListener(this);      //按钮监听不解释啦,把会按到的按钮都监听

      nextbutton.addActionListener(this);

      b1.addActionListener(this);

      b2.addActionListener(this);

      b3.addActionListener(this);

      b4.addActionListener(this);

      b5.addActionListener(this);

      

      controlPanel.add(preButton);          //把按钮加入要放置的面板

      controlPanel.add(nextbutton);

      showPanel.add(b1);

      showPanel.add(b2);

      showPanel.add(b3);

      showPanel.add(b4);

      showPanel.add(b5);


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

      Container container = getContentPane(); //接下来把这些面板在容器中布局好

      container.add(showPanel,BorderLayout.NORTH);  //将 showPanel面板放置在窗口边界布局的上北

      container.add(cardPanel,BorderLayout.CENTER);  //将 cardPanel面板放置在窗口边界布局的中间

      container.add(controlPanel,BorderLayout.SOUTH);  // 将controlpaPanel面板放置在窗口边界布局的下南

     }

         //按钮监听触发处理

     public void actionPerformed(ActionEvent e){

       if(e.getSource()==nextbutton)  //如果点击源是nextbutton,就card.next

       {card.next(cardPanel);  }

       if(e.getSource()==preButton)   //如果点击源是prebutton,就card.previous

       {card.previous(cardPanel); }

      

      if(e.getSource()==b1)  //如果点击源是b1,就跳转到指定的卡片1

       {card.show(cardPanel,cardName[0]); }  //这里卡片名字为什么是0,因为数组下标是0开始啊!

      if(e.getSource()==b2)  //如果点击源是b2,就跳转到指定的卡片2

       {card.show(cardPanel,cardName[1]); }

      if(e.getSource()==b3)  //如果点击源是b3,就跳转到指定的卡片3

       {card.show(cardPanel,cardName[2]); }

       if(e.getSource()==b4)  //如果点击源是b4,就跳转到指定的卡片4

       {card.show(cardPanel,cardName[3]); }

      if(e.getSource()==b5)  //如果点击源是b5,就跳转到指定的卡片5

       {card.show(cardPanel,cardName[4]); }

     }

     public static void main(String[] args)

     {

             CardLayoutDemo  kapian  =  new  CardLayoutDemo();

     }

 }

 

0 0