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 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();
}
}