效果图
代码实现
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
//CardLayout布局管理器
public class CardLayoutDemo {
public static void main(String[] args) {
JFrame jframe = new JFrame();
//创建容器1存储多个卡片
JPanel p1 = new JPanel();
//创建CardLayout布局管理器,并放入容器1中
CardLayout cardlayout = new CardLayout();
p1.setLayout(cardlayout);
//往容器1中存储多个组件,即卡片
String[] names = {"第一张卡片","第二张卡片","第三张卡片","第四张卡片","第五张卡片"};//初始化卡片
for(int i = 0; i < names.length; i++){
//将卡片添加到容器1中,卡片即名字和按钮
p1.add(names[i],new JButton(names[i]));
}
//将容器1放入JFrame中
jframe.add(p1);
//创建容器2存储多个按钮组件
JPanel p2 = new JPanel();
//创建5个按钮组件
JButton bt1 = new JButton("上一张");
JButton bt2 = new JButton("下一张");
JButton bt3 = new JButton("首张");
JButton bt4 = new JButton("尾张");
JButton bt5 = new JButton("第三张");
//创建一个事件监听器,监听按钮的点击动作
ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {//匿名内部类
//获取参数的信息,即卡片信息
String card = e.getActionCommand();
switch (card) {
case "上一张":
cardlayout.previous(p1);
break;
case "下一张":
cardlayout.next(p1);
break;
case "首张":
cardlayout.first(p1);
break;
case "尾张":
cardlayout.last(p1);
break;
case "第三张":
cardlayout.show(p1, "第三张卡片");
break;
}
}
};//匿名内部类实现,也可单独放到一个类中去构建事件监听器
//将当前事件监听器和5个JButton按钮组件绑定一起实现同步
bt1.addActionListener(listener);
bt2.addActionListener(listener);
bt3.addActionListener(listener);
bt4.addActionListener(listener);
bt5.addActionListener(listener);
//将按钮组件放到容器2中
p2.add(bt1);
p2.add(bt2);
p2.add(bt3);
p2.add(bt4);
p2.add(bt5);
//将容器2放在JFrame的南侧区域
jframe.add(p2,BorderLayout.SOUTH);//南部
//JFrame窗口大小为添加组件后的最佳大小
jframe.pack();
//设置窗口显示
jframe.setVisible(true);
//点击右上角的X暂停JVM虚拟机运行
jframe.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}