java 卡片布局

本文介绍了Java GUI中卡片布局的使用,通过实例展示了如何创建和管理卡片布局,使得组件能够按需显示。主要涉及关键操作:设置jp1为卡片布局,并添加jl1和jl2,通过触发动作切换显示。

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

卡片布局

就是卡片一张接着一张的显示

package zixue;

/*
 * 功能:卡布布局简单案例,其中用面板来存放卡片,面板相当于实际中的卡片盒,用于存放卡片
 *其中,把需要的图片新建一个文件夹存放即可调用
 * */

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class CardLayout_1 extends JFrame implements ActionListener{
	//定义卡片布局的相关组件
	CardLayout c1;//这样定义是为了后面卡片的切换时调用c1的方法
	JPanel jp1;//用于设置卡片布局的面板
	JPanel jp2;//用于放置标签的面板
	JButton jb1,jb2;
	JLabel jl1,jl2,jl3;
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		CardLayout_1 card =new CardLayout_1();
	}
	public CardLayout_1()
	{
		//创建组件
		//创建一个卡片布局对象
		c1=new CardLayout();
		//创建用于点击显示卡片的按钮
		jb1=new JButton("卡片1");
		//添加监听 
		jb1.addActionListener(this);
		jb2=new JButton("卡片2");
		jb2.addActionListener(this);
		
		//创建图片标签,也就是卡片
		jl1=new JLabel(new ImageIcon("image/qq.gif"));
		jl2=new JLabel(new ImageIcon("image/mm.jpg"));
		
		jp1=new JPanel();
		jp2=new JPanel();
		
		//设置面板jp1为卡片布局
		jp1.setLayout(c1);
		//给jp1添加卡片,默认显示最上面的那张卡片
		jp1.add(jl1,"1");
		jp1.add(jl2,"2");
		
		jp2.add(jb1,BorderLayout.NORTH);
		jp2.add(jb2,BorderLayout.CENTER);
		
		//添加到窗体
		this.add(jp1,BorderLayout.NORTH);
		this.add(jp2,BorderLayout.SOUTH);
		
		//设置窗体属性
		this.setTitle("卡片布局");
		this.setSize(300,150);
		this.setBackground(Color.green);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}
	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		if(arg0.getSource()==jb1)
		{
			//通过卡片布局对象显示jp1面板上的卡号为2的卡片
			c1.show(jp1, "2");
			
		}
		else if(arg0.getSource()==jb2)
		{
			c1.show(jp1, "1");
		}
	}

}



1 将需要卡片显示的内容加入一个容器中

如本例中jp1

2并将其设置为卡片布局

c1=new CardLayout();

jp1.setLayout(c1);

jp1.add(jl1,"1");
jp1.add(jl2,"2");
3 在需要用的时候,只需要触发相应的动作就可以了。

package zixue;

/*
 * 功能:卡布布局简单案例,其中用面板来存放卡片,面板相当于实际中的卡片盒,用于存放卡片
 *其中,把需要的图片新建一个文件夹存放即可调用
 * */

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class CardLayout_1 extends JFrame implements ActionListener ,MouseListener{
	//定义卡片布局的相关组件
	CardLayout c1;//这样定义是为了后面卡片的切换时调用c1的方法
	JPanel jp1;//用于设置卡片布局的面板
	JPanel jp2;//用于放置标签的面板
	JButton jb1,jb2;
	JLabel jl1,jl2,jl3;
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		CardLayout_1 card =new CardLayout_1();
	}
	public CardLayout_1()
	{
		//创建组件
		//创建一个卡片布局对象
		c1=new CardLayout();
		//创建用于点击显示卡片的按钮
		jb1=new JButton("卡片1");
		jb1.addMouseListener(this);
		//添加监听 
		jb1.addActionListener(this);
		jb2=new JButton("卡片2");
		jb2.addActionListener(this);
		jb2.addMouseListener(this);
		//创建图片标签,也就是卡片
		jl1=new JLabel(new ImageIcon("image/qq.gif"));
		jl2=new JLabel(new ImageIcon("image/mm.jpg"));
		
		jp1=new JPanel();
		jp2=new JPanel();
		
		//设置面板jp1为卡片布局
		jp1.setLayout(c1);
		//给jp1添加卡片,默认显示最上面的那张卡片
		jp1.add(jl1,"1");
		jp1.add(jl2,"2");
		
		jp2.add(jb1,BorderLayout.NORTH);
		jp2.add(jb2,BorderLayout.CENTER);

		//添加到窗体
		this.add(jp1,BorderLayout.NORTH);
		this.add(jp2,BorderLayout.SOUTH);
		
		//设置窗体属性
		this.setTitle("卡片布局");
		this.setSize(300,150);
		this.setBackground(Color.green);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}
	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		if(arg0.getSource()==jb1)
		{
			//通过卡片布局对象显示jp1面板上的卡号为2的卡片
			c1.show(jp1, "2");
			
		}
		else if(arg0.getSource()==jb2)
		{
			c1.show(jp1, "1");
		}
	}
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		if(e.getSource()==jb1){
			c1.show(jp1, "2");
		}else if(e.getSource()==jb2){
			c1.show(jp1, "1");
		}
	}
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值