Java图形化界面---AWT布局管理器

news2025/1/17 15:28:25

目录

一、布局管理器介绍

二、布局管理器用法

(1)FlowLayout

(2)BorderLayout

(3)GridLayout

(4)CardLayout

(5)BoxLayout

三、Box容器的讲解


一、布局管理器介绍

布局管理器,顾名思义就是帮助我们在布局上面起到作用的管理器,可以帮助我们设定成我们想要的排列方式,这里我介绍的是AWT编程下的

二、布局管理器用法

(1)FlowLayout

在FlowLayout布局管理器中,组件就像水流一样向某方向流动,遇到障碍就返回,重头开始排列。在默认情况下,FlowLayout布局管理器是从左向右排列所有组件,遇到边界就会折回下一行重新开始
构造方法
(1)空参构造
FlowLayout() 表示构造一个中心对齐和默认为5单位水平和垂直间隙
(2)带参构造
FlowLayout(int align,int hgap,int vgap)
align表示对齐方式有三个:FlowLayout.center,FlowLayout.left,FlowLayout.right分别是中间对齐,左对齐,右对齐。hgap是水平间距,vgap是垂直间距

案列:做出如下的界面

public static void main(String[] arsg){
        Frame s=new Frame("title");
        s.setLayout(new FlowLayout(FlowLayout.LEFT,5,5));//布局管理器设置
        for(int i=1;i<100;i++){
            s.add(new Button("button:"+i));
        }
        s.pack();//使得页面是标准大小
        s.setVisible(true);
    }

(2)BorderLayout

BorderLayout布局管理器将容器分为EAST,SOUTH,NORTH,WEST,CENTER五个区域,普通组件可以被放置在这5个区域的任意一个中。
1:当向使用BorderLayout布局管理器的容器中添加组件时,需要指定添加到哪个区域中。如果没有指定,默认是添加到中间区域。
2:如果向同一个区域中添加多个组件时,后放入的组件会覆盖先放入的组件。
构造方法
BorderLayout()
构建新的边框布局,组件间没有间隙。
BorderLayout(int hgap, int vgap)
构造具有组件之间指定间隙的边框布局

下图案列:

public static void main(String[] arsg){
        Frame s=new Frame("title");
        s.add(new Button("north"),BorderLayout.NORTH);
        s.add(new Button("west"),BorderLayout.WEST);
        s.add(new Button("east"),BorderLayout.EAST);
        s.add(new Button("center"),BorderLayout.CENTER);
        s.add(new Button("south"),BorderLayout.SOUTH);
        s.pack();
        s.setVisible(true);
    }

(3)GridLayout

GridLayout布局管理器将容器分割成纵横线分隔的网格,每个网格所占的区域大小相同。当向使用GridLayout布局管理器的容器中添加组件时,默认从左向右,从上向下依次添加到每个网格中,与FlowLayout不同的是,放置在GridLayout布局管理器中的各组件的大小由组件所处的区域决定

构造方法
GridLayout()
在单个行中创建一个每个组件的默认值为一列的网格布局。
GridLayout(int rows, int cols)
创建具有指定行数和列数的网格布局。
GridLayout(int rows, int cols, int hgap, int vgap)
创建具有指定行数和列数的网格布局。

案列如图:

public static void main(String[] arsg){
        Frame s=new Frame("title");
        s.setLayout(new GridLayout(3,4,4,4));
        for(int i=1;i<=8;i++){
            s.add(new Button(""+i));
        }
        s.add(new Button("+"));
        s.add(new Button("-"));
        s.add(new Button("/"));
        s.add(new Button("*"));
        s.pack();
        s.setVisible(true);
    }

(4)CardLayout

CardLayout布局管理器以时间而非空间来管理它的组件,它将加入容器的所有组件看成一叠卡片(每个卡片其实就是一个组件),每次只有最上面的那个Component才可见,就好像一副扑克牌,他们叠在一起,每次只有最上面的一张扑克牌才可见
构造方法
CardLayout()
创建一个新的卡片布局,其大小为零。
CardLayout(int hgap, int vgap)
创建具有指定的水平和垂直间隙的新卡布局。
常用方法
注:参数t表示容器
first(t) 显示t容器的第一张卡片
last(t) 显示t容器的最后一张卡片
previous(t) 显示t容器的前一张卡片
next(t) 显示t容器的后一张卡片
show(t,name) 显示t容器指定名字的卡片

案列如图:

 public static void main(String[] arsg){
        Frame s=new Frame("title");
        CardLayout ca=new CardLayout();
        Panel p1=new Panel();
        Panel p2=new Panel();
        p1.setLayout(ca);
        String[] n={"第一","第二","第三","第四","第五"};
        for(int i=0;i<n.length;i++){
            p1.add(n[i],new Button(""+n[i]));
        }
        Button b1=new Button("第一");
        Button b2=new Button("最后");
        Button b3=new Button("下一张");
        Button b4=new Button("上一张");

        //绑定事件
        ActionListener lis=new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String k=e.getActionCommand();//获得按钮上的文字
                if(k=="第一"){
                    ca.first(p1);
                }
                else if(k=="最后"){
                    ca.last(p1);
                }
                else if(k=="上一张"){
                    ca.previous(p1);
                }
                else{
                    ca.next(p1);
                }
            }
        };
        b1.addActionListener(lis);
        b2.addActionListener(lis);
        b3.addActionListener(lis);
        b4.addActionListener(lis);
        p2.add(b1);
        p2.add(b2);
        p2.add(b3);
        p2.add(b4);
        s.add(p2,BorderLayout.SOUTH);
        s.add(p1);
        s.pack();
        s.setVisible(true);
    }

(5)BoxLayout

BoxLayout可以在垂直和水平两个方向上摆放GUI组件。
构造方法
BoxLayout(Container target, int axis)
创建一个布局管理器,它将沿着给定的轴布局组件。

案列

 public static void main(String[] arsg){
        Frame s=new Frame("title");
        BoxLayout b=new BoxLayout(s,BoxLayout.Y_AXIS);
        s.setLayout(b);
        s.add(new Button("1"));
        s.add(new Button("2"));
        s.pack();
        s.setVisible(true);
    }

三、Box容器的讲解

Box容器的默认布局管理器就是BoxLayout,大多数情况下,使用Box容器去容纳多个GUI组件,然后再把Box容器作为一个组件,添加到其它得容器中,从而形成整体窗口布局
同时这里的间隔我们可以看成是一个组件,只不过没有内容而已
方法:
createHorizonBox() 创建一个水平排列组件的Box容器
createVerticalBox() 创建一个垂直排列组件的Box容器

间隔:
createHorizonGlue() 创建一个水平间隔,可以拉伸
createHorizonStruct(int t) 创建一个水平间隔,可设置固定间隔
createVerticalGlue() 创建一个垂直间隔,可以延伸
createVerticalStruct(int t) 创建一个垂直间隔,可以设置固定间隔

案列:

public static void main(String[] arsg){
        Frame s=new Frame("title");
        Box x=Box.createHorizontalBox();//创建水平
        x.add(new Button("水平1"));
        x.add(new Button("水平2"));
        Box y=Box.createVerticalBox();//创建垂直
        y.add(new Button("垂直1"));
        y.add(new Button("垂直2"));
        s.add(x,BorderLayout.NORTH);
        s.add(y);
        s.pack();
        s.setVisible(true);
    }

案列

public static void main(String[] arsg){
        Frame s=new Frame("title");
        //创建水平
        Box x=Box.createHorizontalBox();
        x.add(new Button("按钮1"));
        x.add(Box.createHorizontalGlue());//可以延伸
        x.add(new Button("按钮2"));
        x.add(Box.createHorizontalStrut(30));//固定横向间隔
        x.add(new Button("按钮3"));

        //创建垂直
        Box y=Box.createVerticalBox();
        y.add(new Button("按钮4"));
        y.add(Box.createVerticalGlue());//可以延伸间距
        y.add(new Button("按钮5"));
        y.add(Box.createVerticalStrut(30));//固定间距
        y.add(new Button("按钮6"));

        s.add(x,BorderLayout.NORTH);
        s.add(y);
        s.pack();
        s.setVisible(true);
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/144913.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自主实现HTTP

"让我们&#xff0c;跳吧在无比宏达的星系!" 一、背景 超文本传输协议&#xff08;Hyper Text Transfer Protocol&#xff0c;HTTP&#xff09;是一个简单的请求-响应协议&#xff0c;它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么…

STL list容器底层代码剖析、正向迭代器与反向迭代器的类的封装

目录 一、迭代器是什么 二、迭代器的本质 三、如何给一个容器实现迭代器功能 四、正向迭代器功能的具体实现 五、反向迭代器 六、list底层代码剖析 一、迭代器是什么 迭代器&#xff08;iterator&#xff09;有时又称光标&#xff08;cursor&#xff09;是程序设计的软件设…

【手写 Vue2.x 源码】第六篇 - 数据代理的实现

一&#xff0c;前言 上篇&#xff0c;主要介绍了 Vue 数据初始化流程中&#xff0c;数组类型的数据劫持是如何实现的&#xff0c;核心思路如下&#xff1a; 出于对性能的考虑&#xff0c;Vue 没有对数组采用 Object.defineProperty 进行递归劫持&#xff0c;而是对能够导致原…

NOSQL数据库习题

NOSQL数据库习题第一章第二章第三章第四章第五章NoSQL数据库上机测试第一章 1.写出DB、RDB、DBMS、TRDB、NoSQL、NewSQL、NDFS的中文名称。 答&#xff1a;DB&#xff1a;数据库 RDB&#xff1a;关系型数据库 DBMS&#xff1a;数据库管理系统 TRDB&#xff1a;传统关系型数据…

解决Shotgrid登陆不上, 上传出错,窗口卡住不动等问题

在使用Shotgrid时&#xff0c;是否遇到这种问题&#xff1a; accounts.autodesk.com出错 auth.autodesk.com出错 再或者这样出错&#xff1a; Shotgrid登陆出错 再再这样关闭Load…时这样出错&#xff0c; 窗口半天都关闭不了&#xff1a; 分析&#xff1a; 1 出现这种错…

(一分钟)激光SLAM扫描匹配 文献阅读

本博客介绍了激光SLAM扫描匹配的相关问题。编辑切换为居中添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09;扫描匹配也是数据关联类的问题&#xff0c;是SLAM里面的重要构成部分。编辑切换为居中添加图片注释&#xff0c;不超过 140 字&#xff08;可选&…

PyTorch实例2——文本情绪分类器

实例主要用于熟悉相关模型&#xff0c;并且练习创建一个模型的步骤&#xff1a;数据收集、数据预处理、构建模型、训练模型、测试模型、观察模型表现、保存模型传送门&#xff1a;蓝桥云课实验 目录1. 实验环境2. 实验目的3. 相关原理4. 实验步骤4.1 数据收集从在线商城抓取评论…

OpenHarmony 标准系统HDF框架之I2C驱动开发

OpenHarmony 标准系统HDF框架之I2C驱动开发主要内容I2C 基础知识## I2C 基础知识 —— 概念和特性I2C 基础知识 —— 协议、四种信号组合I2C 调试手段## I2C 调试手段 —— 硬件I2C 调试手段 —— 软件HDF 框架下的 I2C 设备驱动## HDF 框架下的 I2C 设备驱动 —— 案例描述HDF…

Shell 传递参数

我们可以在执行 Shell 脚本时&#xff0c;向脚本传递参数&#xff0c;脚本内获取参数的格式为&#xff1a;$n。n 代表一个数字&#xff0c;1 为执行脚本的第一个参数&#xff0c;2 为执行脚本的第二个参数&#xff0c;以此类推……实例以下实例我们向脚本传递三个参数&#xff…

ArcGIS Pro脚本工具(15)——按字段属性值分类导图

之前做了配合地图系列批量导图的脚本工具 ArcGIS Pro脚本工具&#xff08;9&#xff09;——配合地图系列批量导图_学学GIS的博客-CSDN博客_arcgispro批量导出地图pngPro的地图系列是批量制图的利器&#xff0c;但是有个不便的地方&#xff0c;就是设置完成地图系列后&#xf…

机器学习实战教程(13篇)

机器学习实战教程(13篇)这些网址非常适合想学习机器学习&#xff0c;却苦于没有项目&#xff08;尤其缺少数据&#xff09;的人。无意中看到&#xff0c;给自己做一个记录。机器学习实战教程&#xff08;一&#xff09;&#xff1a;K-近邻算法&#xff08;史诗级干货长文&#…

2022年度外设产品行业增长分析:鼠标、键盘同比增长27%

近年来&#xff0c;信息技术迅速发展&#xff0c;网民数量不断增长&#xff0c;深刻改变着社会的运作方式&#xff0c;对社会生产、商业运作模式等方面产生重大影响。广泛的行业应用为网络设备品牌商、制造商带来了差异化的细分市场&#xff0c;各类互联网设备接入数量也快速增…

混合空间增强

混合图像增强是一种图像处理技术&#xff0c;用于在不损失图像细节的情况下增强图像的对比度和亮度。它通常通过将图像拆分成多个通道&#xff0c;然后对每个通道进行独立处理来实现。 综合利用平滑滤波&#xff0c;锐化滤波&#xff0c;灰度拉伸等技术对图像进行处理&#xff…

【Linux】sudo给某条指令提权

sudo1.为什么要有sudo2.使用sudo提权的前提2. 在root下添加普通用户到信任列表3.验证4.总结1.为什么要有sudo 首先我们要知道&#xff0c;普通用户是受Linux的权限约束的。就比如普通用户对自己的家目录有完全管理的权限&#xff0c;但是不能随意查看其他人的家目录&#xff0c…

1.机器学习中的关键组件

1.机器学习中的关键组件 无论什么类型的机器学习问题&#xff0c;都会遇到这些组件&#xff1a; 可以用来学习的_数据_&#xff08;data&#xff09;&#xff1b;如何转换数据的_模型_&#xff08;model&#xff09;&#xff1b;一个_目标函数_&#xff08;objective function…

JavaScript 输出

文章目录JavaScript 输出JavaScript 显示数据使用 window.alert()操作 HTML 元素在本教程中写到 HTML 文档写到控制台您知道吗?JavaScript 输出 JavaScript 没有任何打印或者输出的函数。 JavaScript 显示数据 JavaScript 可以通过不同的方式来输出数据&#xff1a; 使用 wi…

TiDB 6.5 LTS 发版

在 2023 伊始&#xff0c;我们很高兴向大家宣布&#xff0c;TiDB 6.5 LTS 版本已经发布了。这是 TiDB V6 的第二个长期支持版&#xff08;上一个是 TiDB 6.1&#xff09;&#xff0c;除了携带了诸多备受期待的新特性&#xff0c;同时也将得到 TiDB 开发社区的长期维护&#xff…

设计模式(一):DDD领域驱动设计

DDD重架构&#xff0c;轻业务&#xff01; – 从单体架构开始快速验证DDD设计模式 贫血模型充血模型防腐层 DDD四层架构规范DDD单体架构和微服务架构隔离 本地单体SPI 插拔式扩展业务模式Nacos 插拔式扩展业务模式 ---- 服务名作为服务service code DDD清晰架构 – 构建领域仓库…

加解密与HTTPS(5)

您好&#xff0c;我是湘王&#xff0c;这是我的CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e;咱们大学读完之后有毕业证书&#xff0c;并且这个证书可以在学信网查询。专业上有注会、CCIE、律师证等&#xff0c;可以在国家职业认证机构或委托机构的网站上查…

【UCIe】UCIe DLP/DLLP 介绍

&#x1f525;点击查看精选 UCIe 系列文章&#x1f525; &#x1f525;点击进入【芯片设计验证】社区&#xff0c;查看更多精彩内容&#x1f525; &#x1f4e2; 声明&#xff1a; &#x1f96d; 作者主页&#xff1a;【MangoPapa的CSDN主页】。⚠️ 本文首发于CSDN&#xff0…