Java Swing CardLayout卡片布局的实现示例
1. 概述
官方JavaDocsApi: javax.swing.CardLayout
CardLayout,卡片布局管理器。它将容器中的每个组件看作一张卡片,一次只能看到一张卡片,容器则充当卡片的堆栈,默认显示第一张卡片。
CardLayout 构造方法:
// 创建一个间距大小为 0 的卡片布局 CardLayout() // 创建一个指定水平/垂直间距大小的卡片布局。 CardLayout(int hgap, int vgap)
CardLayout 常用方法:
// 显示第一张卡片 void first(Container parent); // 显示最后一张卡片 void last(Container parent); // 显示下一张卡片(自动循环显示) void next(Container parent); // 显示上一张卡片(自动循环显示) void previous(Container parent); // 显示指定名称的组件(添加组件到容器时,可同时添加组件的名称) void show(Container parent, String name);
2. 代码实例
package com.xiets.swing; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class Main { public static void main(String[] args) { JFrame jf = new JFrame("测试窗口"); jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); jf.setSize(300, 200); // 创建卡片布局,卡片间水平和竖直间隔为 10 final CardLayout layout = new CardLayout(10, 10); // 创建内容面板容器,指定布局管理器 final JPanel panel = new JPanel(layout); JButton btn01 = new JButton("Button01"); JButton btn02 = new JButton("Button02"); JButton btn03 = new JButton("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秒切换显示下一个 new Timer(2000, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { layout.next(panel); } }).start(); } }
结果展示:
实例一:卡片的切换
窗体默认边界布局,一个面板以卡片布局,面板上添加五个按钮,该面板添加到CENTER位置,另一个面板添加两个按钮,两个按钮添加事件来切换显示CENTER位置中的面板的组件
// cardlayout.Java import java.awt.*; import javax.swing.*; import java.awt.event.*;//引入事件包 //定义类时实现监听接口 public class cardlayout extendsJFrame implements ActionListener{ JButton nextbutton; JButton preButton; Panel cardPanel=new Panel(); Panel controlpaPanel=new Panel(); //定义卡片布局对象 CardLayout card=new CardLayout(); //定义构造函数 public cardlayout() { super("卡片布局管理器"); setSize(300, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); setVisible(true); //设置cardPanel面板对象为卡片布局 cardPanel.setLayout(card); //循环,在cardPanel面板对象中添加五个按钮 //因为cardPanel面板对象为卡片布局,因此只显示最先添加的组件 for (int i = 0; i < 5; i++) { cardPanel.add(new JButton("按钮"+i)); } //实例化按钮对象 nextbutton=new JButton("下一张卡片"); preButton=new JButton("上一张卡片"); //为按钮对象注册监听器 nextbutton.addActionListener(this); preButton.addActionListener(this); controlpaPanel.add(preButton); controlpaPanel.add(nextbutton); //定义容器对象为当前窗体容器对象 Container container=getContentPane(); //将 cardPanel面板放置在窗口边界布局的中间,窗口默认为边界布局 container.add(cardPanel,BorderLayout.CENTER); // 将controlpaPanel面板放置在窗口边界布局的南边, container.add(controlpaPanel,BorderLayout.SOUTH); } //实现按钮的监听触发时的处理 public void actionPerformed(ActionEvent e){ //如果用户单击nextbutton,执行的语句 if (e.getSource()==nextbutton){ //切换cardPanel面板中当前组件之后的一个组件 //若当前组件为最后添加的组件,则显示第一个组件,即卡片组件显示是循环的。 card.next(cardPanel); } if (e.getSource()==preButton){ //切换cardPanel面板中当前组件之前的一个组件 //若当前组件为第一个添加的组件,则显示最后一个组件,即卡片组件显示是循环的。 card.previous(cardPanel); } } public static void main(String[] args) { cardlayout kapian=new cardlayout(); } }
程序显示结果如下图所示,单击“上一张”、“下一张”等按钮可以上面的面板中显示不同的按钮来。
实例二:使用CardLayout类的show方法显示组件。
窗体默认边界布局,一个面板以卡片布局,面板上添加4个按钮,该面板添加到CENTER位置,另一个面板添加4个按钮,这4个按钮添加事件来切换显示CENTER位置中的面板的组件按钮。
// cardlayout1.java import java.awt.*; import javax.swing.*; import java.awt.event.*;//引入事件包 //定义类时 实现监听接口 public class cardlayout1 extends JFrameimplements ActionListener{ JButton b0,b1,b2,b3; Panel cardPanel=new Panel(); Panel controlpaPanel=newPanel(); //定义卡片布局对象 CardLayout card=newCardLayout(); //定义字符数组,为卡片命名 StringcardName[]={"0","1","2","3"}; //定义构造函数 public cardlayout1() { super("卡片布局管理器"); setSize(400,200); 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],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); } //实现按钮的监听触发时的处理 public voidactionPerformed(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 voidmain(String[] args) { cardlayout1kapian=new cardlayout1(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
赞 (0)