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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。