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

版权声明:本文为博主学习记录,分享心得为主,转载前请在评论区留言,谢谢同样爱学习的你。 https://blog.csdn.net/qq_33639584/article/details/55057837

CardLayout(卡片布局)

1、CardLayout布局特征

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

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

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

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

 

构造方法摘要

CardLayout ()

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

CardLayout (int hgap, int vgap)

指定上下左右边距

 

扫描二维码关注公众号,回复: 5569942 查看本文章

方法摘要

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 CardLayoutDemo extends 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();

     }

 }

猜你喜欢

转载自blog.csdn.net/qq_33639584/article/details/55057837