首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Java AWT 图形界面编程】LayoutManager 布局管理器 ⑤ ( CardLayout 卡片布局 | ActionListener 按钮点击事件添加 )

【Java AWT 图形界面编程】LayoutManager 布局管理器 ⑤ ( CardLayout 卡片布局 | ActionListener 按钮点击事件添加 )

作者头像
韩曙亮
发布2023-03-30 18:45:25
6820
发布2023-03-30 18:45:25
举报

文章目录

一、CardLayout 卡片布局


CardLayout 卡片布局 中 , Container 容器中 每个组件都相当于一张卡片 , 这些卡片平时都折叠起来 , 只有 最上面的卡片中的组件才是可见的 , 其它组件都不可见 ;

二、CardLayout 卡片布局 API


CardLayout 卡片布局 API :

  • CardLayout() : 创建 默认 的卡片布局管理器 ;
    /**
     * 创建一个空白大小为0的新卡片布局。
     */
    public CardLayout() {
        this(0, 0);
    }
  • CardLayout(int hgap, int vgap) : 创建 指定 水平间隙 和 垂直间隙 的 卡片布局管理器 ;
    /**
     * 创建具有指定水平和的新卡片布局
     * 垂直差异。水平的空隙放在左边和
     * 正确的边缘。垂直的缝隙位于顶部和底部
     * 边缘。
     * @param     hgap   水平间隙。卡片与左右两边的间距
     * @param     vgap   垂直间隙。卡片与上下两边的间距
     */
    public CardLayout(int hgap, int vgap) {
        this.hgap = hgap;
        this.vgap = vgap;
    }
  • void first(Container parent) : 显示 目标容器 中的 第一张卡片 ;
    /**
     * 翻转到容器的第一张卡片。
     * @param     parent   要在其中进行布局的父容器
     * @see       java.awt.CardLayout#last
     */
    public void first(Container parent)
  • void last(Container parent) : 显示 目标容器 中的 最后一张卡片 ;
    /**
     * 翻转到容器的最后一张牌。
     * @param     parent   要在其中进行布局的父容器
     * @see       java.awt.CardLayout#first
     */
    public void last(Container parent)
  • void previous(Container parent) : 显示 目标容器 中的 前一张卡片 ;
    /**
     * 翻转到指定容器的上一张卡片。如果
     * 目前可见的卡片是第一张,这个方法翻到
     * 布局的最后一张牌。
     * @param     parent   要在其中进行布局的父容器
     * @see       java.awt.CardLayout#next
     */
    public void previous(Container parent)
  • void next(Container parent) : 显示 目标容器 中的 后一张卡片 ;
    /**
     * 翻转到指定容器的下一张牌。如果
     * 目前可见的卡片是最后一张,此方法翻到
     * 布局中的第一张牌。
     * @param     parent   要在其中进行布局的父容器
     * @see       java.awt.CardLayout#previous
     */
    public void next(Container parent)
  • void show(Container parent, String name) : 显示 目标容器 中的 指定名称的 卡片 ;
    /**
     * 控件跳转到添加到此布局中的组件
     * 指定<code>name</code>,使用<code>addLayoutComponent</code>。
     * 如果不存在这样的组件,那么什么也不会发生。
     * @param     parent   要在其中进行布局的父容器
     * @param     name     组件名称
     * @see       java.awt.CardLayout#addLayoutComponent(java.awt.Component, java.lang.Object)
     */
    public void show(Container parent, String name)

三、CardLayout 卡片布局代码示例


代码示例 :

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class HelloAWT {
    public static void main(String[] args) {
        // I. Frame 默认的布局管理器就是 BorderLayout
        Frame frame = new Frame("AWT 界面编程");

        // II. 设置存储卡片布局的 Panel
        // 该容器设置 卡片布局管理器
        Panel panel = new Panel();
        CardLayout cardLayout = new CardLayout();
        panel.setLayout(cardLayout);

        // 向 Panel 中添加多个 卡片组件
        for (int i = 0; i < 5; i++) {
            panel.add("" + i, new Button("" + i));
        }

        // 将 Panel 放到 Frame 窗口的默认区域 , 也就是 Center 区域
        frame.add(panel);


        // III. 创建 存放 按钮的 Panel 容器
        Panel panel2 = new Panel();
        Button b0 = new Button("first");
        Button b1 = new Button("last");
        Button b2 = new Button("previous");
        Button b3 = new Button("next");
        Button b4 = new Button("second");

        // 设置按钮事件监听器
        ActionListener listener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 获取按钮文字
                String text = e.getActionCommand();
                switch (text) {
                    case "first":
                        cardLayout.first(panel);
                        break;
                    case "last":
                        cardLayout.last(panel);
                        break;
                    case "previous":
                        cardLayout.previous(panel);
                        break;
                    case "next":
                        cardLayout.next(panel);
                        break;
                    case "second":
                        cardLayout.show(panel, "2");
                        break;
                }
            }
        };

        // 为按钮设置监听器
        b0.addActionListener(listener);
        b1.addActionListener(listener);
        b2.addActionListener(listener);
        b3.addActionListener(listener);
        b4.addActionListener(listener);

        // 将按钮设置到布局中
        panel2.add(b0);
        panel2.add(b1);
        panel2.add(b2);
        panel2.add(b3);
        panel2.add(b4);

        // 将按钮布局添加到 Frame 窗口中
        // 放在 SOUTH 区域
        frame.add(panel2, BorderLayout.SOUTH);


        // IV. 自定设置合适的大小
        frame.pack();
        frame.setVisible(true);
    }
}

执行效果 :

在这里插入图片描述
在这里插入图片描述

拖动放大查看效果 :

在这里插入图片描述
在这里插入图片描述

点击 last 按钮 :

在这里插入图片描述
在这里插入图片描述

点击 previous 按钮 :

在这里插入图片描述
在这里插入图片描述

点击 next 按钮 :

在这里插入图片描述
在这里插入图片描述

点击 second 按钮 :

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-01-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、CardLayout 卡片布局
  • 二、CardLayout 卡片布局 API
  • 三、CardLayout 卡片布局代码示例
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档