Java布局管理—卡片布局(CardLayout)

本文详细介绍了Java中的卡片布局(CardLayout),这是一种让多个组件共享同一显示空间的布局方式。通过CardLayout,可以实现组件间的切换。文章讲述了卡片布局的构造方法和常用方法,包括设置容器、定义卡片对象、添加组件和切换显示组件的方法,并提供了一个实例,展示了如何在窗体中使用CardLayout并响应按钮事件来切换显示的组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

构造方法:

方法说明
public CardLayout()创建一个间距大小为0的新卡片布局
public CardLayout(int hgap,int vgap)创建一个具有指定水平间距和垂直间距的新卡片布局。水平间距置于左右边缘。垂直间距置于上下边缘
public void first(Container parent)翻转到容器的第一张卡片
public void last(Contain parent)翻转到容器的最后一张卡片
public void next(Contain parent)翻转到指定容器的下一张卡片

public void previous(Contain

parent)

翻转到指定容器的前一张卡片
public void show(Contain parent,String name)翻转到使用addLayoutComponent添加到此布局的具有指定name的组件

具体常用的几个介绍:

(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方法显示组件。

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

先看程序执行结果:

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Container;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

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

public class CardLayoutDemo2 extends JFrame implements ActionListener{

	private JButton b0,b1,b2,b3;
	private Panel cardPanel = new Panel();
	private Panel controlpaPanel = new Panel();
	
	//定义卡片布局对象
	CardLayout card = new CardLayout();
    //定义字符数组,为卡片命名
    String cardName[]={"0","1","2","3"};
	
	//定义构造函数
	public CardLayoutDemo2() {
	
		super("卡片布局管理器");
		setSize(400, 300);
		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.NORTH);
		
	    
	  // b0.setOpaque(false);
	}
	
	//实现按钮的监听触发时的处理
	@Override
	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]);
		}
		
	}

	public static void main(String[] args) {
		
		CardLayoutDemo2 kapian = new CardLayoutDemo2();
	}

}


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值