Java Swing CardLayout卡片布局的实现示例

网友投稿 282 2022-12-20


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);

http:// //定义容器对象为当前窗体容器对象

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位置中的面板的组件按钮。

// cahttp://rdlayout1.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();

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring Boot配置元数据方法教程
下一篇:Java Swing GroupLayout分组布局的实现代码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~