Java Swing CardLayout卡片布局的实现示例
1.概述
官方JavaDocsApi:javax.swing.CardLayout
CardLayout,卡片布局管理器。它将容器中的每个组件看作一张卡片,一次只能看到一张卡片,容器则充当卡片的堆栈,默认显示第一张卡片。
CardLayout构造方法:
//创建一个间距大小为0的卡片布局 CardLayout() //创建一个指定水平/垂直间距大小的卡片布局。 CardLayout(inthgap,intvgap)
CardLayout常用方法:
//显示第一张卡片 voidfirst(Containerparent); //显示最后一张卡片 voidlast(Containerparent); //显示下一张卡片(自动循环显示) voidnext(Containerparent); //显示上一张卡片(自动循环显示) voidprevious(Containerparent); //显示指定名称的组件(添加组件到容器时,可同时添加组件的名称) voidshow(Containerparent,Stringname);
2.代码实例
packagecom.xiets.swing;
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
publicclassMain{
publicstaticvoidmain(String[]args){
JFramejf=newJFrame("测试窗口");
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
jf.setSize(300,200);
//创建卡片布局,卡片间水平和竖直间隔为10
finalCardLayoutlayout=newCardLayout(10,10);
//创建内容面板容器,指定布局管理器
finalJPanelpanel=newJPanel(layout);
JButtonbtn01=newJButton("Button01");
JButtonbtn02=newJButton("Button02");
JButtonbtn03=newJButton("Button03");
panel.add(btn01,"btn01");
panel.add(btn02,"btn02");
panel.add(btn03,"btn03");
//先显示第二个
layout.show(panel,"btn02");
jf.setContentPane(panel);
jf.setLocationRelativeTo(null);
jf.setVisible(true);
//每间隔2秒切换显示下一个
newTimer(2000,newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
layout.next(panel);
}
}).start();
}
}
结果展示:
实例一:卡片的切换
窗体默认边界布局,一个面板以卡片布局,面板上添加五个按钮,该面板添加到CENTER位置,另一个面板添加两个按钮,两个按钮添加事件来切换显示CENTER位置中的面板的组件
//cardlayout.Java
importjava.awt.*;
importjavax.swing.*;
importjava.awt.event.*;//引入事件包
//定义类时实现监听接口
publicclasscardlayoutextendsJFrameimplementsActionListener{
JButtonnextbutton;
JButtonpreButton;
PanelcardPanel=newPanel();
PanelcontrolpaPanel=newPanel();
//定义卡片布局对象
CardLayoutcard=newCardLayout();
//定义构造函数
publiccardlayout(){
super("卡片布局管理器");
setSize(300,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
//设置cardPanel面板对象为卡片布局
cardPanel.setLayout(card);
//循环,在cardPanel面板对象中添加五个按钮
//因为cardPanel面板对象为卡片布局,因此只显示最先添加的组件
for(inti=0;i<5;i++){
cardPanel.add(newJButton("按钮"+i));
}
//实例化按钮对象
nextbutton=newJButton("下一张卡片");
preButton=newJButton("上一张卡片");
//为按钮对象注册监听器
nextbutton.addActionListener(this);
preButton.addActionListener(this);
controlpaPanel.add(preButton);
controlpaPanel.add(nextbutton);
//定义容器对象为当前窗体容器对象
Containercontainer=getContentPane();
//将cardPanel面板放置在窗口边界布局的中间,窗口默认为边界布局
container.add(cardPanel,BorderLayout.CENTER);
//将controlpaPanel面板放置在窗口边界布局的南边,
container.add(controlpaPanel,BorderLayout.SOUTH);
}
//实现按钮的监听触发时的处理
publicvoidactionPerformed(ActionEvente){
//如果用户单击nextbutton,执行的语句
if(e.getSource()==nextbutton){
//切换cardPanel面板中当前组件之后的一个组件
//若当前组件为最后添加的组件,则显示第一个组件,即卡片组件显示是循环的。
card.next(cardPanel);
}
if(e.getSource()==preButton){
//切换cardPanel面板中当前组件之前的一个组件
//若当前组件为第一个添加的组件,则显示最后一个组件,即卡片组件显示是循环的。
card.previous(cardPanel);
}
}
publicstaticvoidmain(String[]args){
cardlayoutkapian=newcardlayout();
}
}
程序显示结果如下图所示,单击“上一张”、“下一张”等按钮可以上面的面板中显示不同的按钮来。
实例二:使用CardLayout类的show方法显示组件。
窗体默认边界布局,一个面板以卡片布局,面板上添加4个按钮,该面板添加到CENTER位置,另一个面板添加4个按钮,这4个按钮添加事件来切换显示CENTER位置中的面板的组件按钮。
//cardlayout1.java
importjava.awt.*;
importjavax.swing.*;
importjava.awt.event.*;//引入事件包
//定义类时实现监听接口
publicclasscardlayout1extendsJFrameimplementsActionListener{
JButtonb0,b1,b2,b3;
PanelcardPanel=newPanel();
PanelcontrolpaPanel=newPanel();
//定义卡片布局对象
CardLayoutcard=newCardLayout();
//定义字符数组,为卡片命名
StringcardName[]={"0","1","2","3"};
//定义构造函数
publiccardlayout1(){
super("卡片布局管理器");
setSize(400,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
//设置cardPanel面板对象为卡片布局
cardPanel.setLayout(card);
//循环,在cardPanel面板对象中添加4个按钮
//因为cardPanel面板对象为卡片布局,因此初始时显示最先添加的组件
for(inti=0;i<4;i++){
//面板中添加的每个按钮对应设置一个卡片名
cardPanel.add(cardName[i],newJButton("按钮"+i));
}
//实例化按钮对象
b0=newJButton("0");
b1=newJButton("1");
b2=newJButton("2");
b3=newJButton("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);
//定义容器对象为当前窗体容器对象
Containercontainer=getContentPane();
//将cardPanel面板放置在窗口边界布局的中间,窗口默认为边界布局
container.add(cardPanel,BorderLayout.CENTER);
//将controlpaPanel面板放置在窗口边界布局的南边,
container.add(controlpaPanel,BorderLayout.SOUTH);
}
//实现按钮的监听触发时的处理
publicvoidactionPerformed(ActionEvente){
//用户单击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]);
}
}
publicstaticvoidmain(String[]args){
cardlayout1kapian=newcardlayout1();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。