【可视化Java GUI程序设计教程】第4章 布局设计

4.1 布局管理器概述

右击窗体,单击快捷菜单中的Set Layout

4.1.2 绝对布局(Absolute Layout)

缩小窗口发现超出窗口范围的按钮看不见

Absolute Layout

4.1.2 空值布局(Null Layout)

4.1.3  布局管理器的属性和组件布局属性

右击布局节点则会在快捷菜单中有一个Properties菜单项(空值布局没有)

单击之后出现此种布局的属性设置窗口

AbsoluteLayout

 不同布局的管理器的属性有很大的差别

FlowLayout

4.2 自由设计

4.2.2 GUI构造器的间距编辑

1、通过拖放

2、使用鼠标滚轮(我用不了)

3、使用菜单设置

 4、编辑组件周围的间距

例4.1

将标签设置在无论怎么动都在水平居中的位置

方法:

Left和Right输入相同的值,勾选Resizable

4.2.3 组件对齐、自动调整大小及相同大小

4.3 网格式布局和网格包布局

4.3.1 网格式布局GridLayout

所有网格单元具有相同大小,且不能更改。

可以设置布局管理器的属性,但是组件的“编辑布局空间”命令不可用。

例4.3 采用网格式布局设计一个简单四则运算器

(1)设置该窗体的Bounds属性为[300,300,400,350],perferredSize属性为[400,350]

 (2)右击窗体,Set Layout->Grid Layout

(3)

 列为4,行为5,垂直间距和水平间距均为2

 (4)选择Label控件,在窗口上单击3次。选择Text Field控件,在窗口上单击1次。选择Button控件,在窗口上单击16次。修改组件变量名称和文字。

(5)数字按钮的事件处理

每个数字按钮的事件处理逻辑基本一样,所以编写一个辅助方法numberIt(String s)

    private void numberIt(String s) {if (sig == '\0') {str1 += s;jLabel1.setText(str1);jLabel2.setText(str2);jLabelMethod.setText("");} else {str2 += s;jLabel2.setText(str2);}jTextFieldResult.setText("");}

数字“0”按钮

    private void jButtonDigiActionPerformed(java.awt.event.ActionEvent evt) {// TODO add your handling code here:if ("".equals(str1) && sig == '\0') {numberIt("0.");} else if ("".equals(str2) && sig != '\0') {numberIt("0.");} else {numberIt(".");}}

其他数字按钮,直接调用numberIt方法

(6)小数点“.”按钮

    private void jButtonDigiActionPerformed(java.awt.event.ActionEvent evt) {// TODO add your handling code here:if ("".equals(str1) && sig == '\0') {numberIt("0.");} else if ("".equals(str2) && sig != '\0') {numberIt("0.");} else {numberIt(".");}}

(7)运算符按钮+-*/。它们的处理逻辑基本一样,所以编写一个辅助方法sigIt(char c)

    private void sigIt(char c) {if (!"".equals(str1)) {sig = c;jLabelMethod.setText("" + c);jTextFieldResult.setText("");} else {jLabel1.setText(str1);jLabel2.setText(str2);jLabelMethod.setText("");jTextFieldResult.setText("");return;}}

直接调用sigIt方法实现+-*/

运行效果:

4.3.2 网络包布局GridBagLayout

1、Column Width

例子:[0,100,50],则第一列最小宽度为0,第二列最小宽度为00,第三列最小宽度为50。

2、Row Heights(看不懂这个是啥玩意)

如果该属性的值不是null,在计算了所有行的最小高度之后应用到网络包布局。

如果高度数组中的元素个数多于网格的行数,则会增加网络的行数以匹配属性设置。

3、Column Weights与Row Weights 

各列(行)所占宽(高)度比例

4.3.3 网格包布局定制器 

 1、插入与删除行和列

(1)插入

右击,单击InsertRow Before或InsertRow After,即可在当前行的上边或下边插入一个新行

同理,右击,单击InsertColumn Before或InsertColumn After,即可在当前行的左边或右边插入一个新列 

 (2)删除

右击,单击Delete Row(或Delete Column)

2、设置插入量——Insets

Insets即为组件与其显示区域边缘之间的最小间隙

设置和调整insets有以下两种方法

(1)Insets组中有14个按钮。每单击一次改变1px,按住Ctrl键的同时单击一次改变5px。

(2) 

3、设置内部填充——Internal Padding

设置和调整Internal Padding有以下两种方法

(1)每单击一次改变1px,按住Ctrl键的同时单击一次改变5px。

(2)

4、设置组件的位置——Position in Grid

(1)单击组件,按下鼠标左键拖曳

(2)

(3)

AWT文档建议

Grid X和Grid Y不要设置为绝对位置,而应设置为常量GridBagConstraints.RELATIVE。

Position in Grid工具(如下图所示)分别设置Grid X和Grid Y为“相对”(RELATIVE)值。也可以在属性表单区域的Grid X和Grid Y属性右侧下拉列表中选择Relative。

5、设置组件尺寸——Size in Grid(补)

(1)

(2)

(3)

6、设置粗细——Weights

(1)

(2)

7、锚点——Anchor

(1)

(2)

8、填充——Fill

(1)

(2)

4.3.4 网格包布局应用实例

例4.4 设计学生成绩查询界面(补)

界面效果如下:

(1)在ScoreMana窗体中插入5个新行和2个新列

(2)设置上下插入量为30,左右插入量为5。向右拖动直到绿色区域覆盖到第三列。

 

(3)设置Anchor为Center,Fill为Horizontal,Weight X为1.0,Weight Y为0.5

(4) 第二行第一列网格单元右击,选择如下。设置该标签的Weight Y为0.2。第二行第三列重复上述步骤。第一列的第三、四、五行重复上述步骤。

(5)单击第二行第一列Size in Grid的“水平放大”按钮。

 

(6)第二列的第三、四、五、六行

 (8)第三列的第三、四、五、六行

(9)按住Ctrl键,依次单击第一列的第三、四、五、六行网格单元,

        Anchor->East,Weight X->0.3


(10) 

(11)

(12)

(13)

4.4 简单布局管理器

4.4.1 流式布局FlowLayout

4.4.2 边框式布局BorderLayout

4.4.3 卡片式布局CardLayout

CardLayout

4.4.4 叠加布局OverlayLayout

1、alignmentX(横轴)和alignmentY(纵轴)

介于0.0~1.0。横轴上0.0代表组件的左侧面,1.0代表组件的右侧面;纵轴上0.0和1.0分别代表组件的顶部和底部。

2、坐标点

例4.6

4.5 盒式布局BoxLayout

4.5.1 组件的最小、最大与首选尺寸

minimunSize:设置组件的最小尺寸。

maximumSize:设置组件的最大尺寸。

preferredSize:设置组件的首选尺寸。

当容器缩小时,一些布局管理器使组件也缩小,但当组件缩小到最小尺寸时便不再缩小,结果只是显示组件的部分区域或容器不再缩小。

4.5.2 BoxLayout的使用与Axis属性

4.5.3 组件alignmentX和alignmentY属性与BoxLayout

4.6 填充器(通常在BoxLayout布局下使用)

组件之间保持适当的距离

4.6.1 Glue(接合性填充器)

用于填充容器中多余空间的组件

其中maximumSize属性值为[32767, 32767],minimumSize和PerferredSize都为[0, 0]

4.6.2 Horizontal Glue(水平接合填充器)

由于组件本身的高度为0,所以对于水平布局它的alignmentY设置没有效果。

4.6.3 Vertical Glue(垂直接合填充器)

由于组件本身的宽度为0,所以对于水平布局它的alignmentX设置没有效果。

4.6.4 Horizontal Strut(可称为水平撑开,即为宽度固定)

4.6.5 Vertical Strut(可称为垂直撑开,即为高度固定)

4.6.6 Rigid Area(刚性区域)

设置宽度和高度值后,单击需要填充的地方

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

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

相关文章

STM32-通用定时器

通用定时器 通用定时器由一个可编程预分频器驱动的16位自动重新加载计数器组成。应用:测量输入的脉冲长度信号(输入捕获)、产生输出波形(输出比较和PWM)。 脉冲长度和波形周期可以从几微秒调制到几毫秒,使用…

STM32:TIM通道输入捕获

本文主要讲解如何使用TIMER通道的输入脉冲捕获功能。基于STM32F7的Timer2 Channel3来进行讲解。 配置时钟 Timer2的时钟频率,对应APB1 Timer。 分频设置为96-1,这样设置定时器每次counter加1,对应的时间为1us(计时精度是1us&…

【windows】自动开机 + 免登陆 + 自动运行bat脚本 + 远程免登陆

一、场景 二、解决方案 三、实战 1. 键盘 Win R 键,在弹出的对话框中输入netplwiz,回车 2. 去掉必须输入用户名和密码的勾选,点击应用 3. 在弹出的对话框中输入用户名和密码 一、场景 主机服务器:windows 10 桌面docker &a…

【蓝桥每日一题]-贪心(保姆级教程 篇1)#拼数 #合并果子 #凌乱yyy

目录 题目: 拼数 思路: 题目: 合并果子 思路: 题目:凌乱yyy 思路: 题目:拼数 思路: 思路很简单。举个例子:对于a321,b32。我们发现ab32132,ba32321,那么…

LVS负载均衡集群 (NAT模式)

LVS集群 集群的概念: 为解决某个特定的问题,将多个计算机组合起来形成一个单个系统 集群的水平扩展: 增加设备,并行运行多个服务,通过网路连接和算法来调度服务分配的问题 集群的类型: 负载均衡集群&#…

postgresql14-表的管理(四)

表table 创建表 CREATE TABLE table_name --表名 (column_name data_type column_constraint, --字段名、字段类型、约束字段(可选)column_name data_type, --表级别约束字段...,table_constraint );CREATE TABLE emp1 --创建表 AS SELECT * FROM empl…

Spring Cloud之服务注册与发现(Eureka)

目录 Eureka 介绍 角色 实现流程 单机构建 注册中心 服务提供者 服务消费者 集群搭建 注册中心 服务提供者 自我保护机制 原理分析 Eureka 介绍 Eureka是spring cloud中的一个负责服务注册与发现的组件,本身是基于REST的服务,同时还提供了…

Redis数据库管理工具Redis Desktop Manager最新中文

Redis Desktop Manager是一款直观且易用的Redis数据库管理工具,支持Windows、macOS和Linux等多平台。它提供了丰富的功能和工具,使用户可以轻松地创建、编辑、删除和浏览Redis键值对,并执行各种Redis命令。通过SSH Tunnel连接,RDM…

28. 使用 k8e 玩转 kube-vip with Cilium‘s Egress Gateway 特性

因为在私有云环境下,我们需要保障集群服务 APIServer地址的高可用,所以提供的方案就是使用一个 VIP 让 API Server 的流量可以负载均衡的流入集群。另外,kube-vip 还支持 Service LB,方便SVC 服务的负载均衡,结合 cilium Egress Gateway 特性可以做到集群内的容器对外访问…

排序-表排序

当我们需要对一个很大的结构体进行排序时,因为正常的排序需要大量的交换,这就会造成时间复杂度的浪费 因此,我们引入指针,通过指针临时变量的方式来避免时间复杂度的浪费 间接排序-排序思路:通过开辟一个指针数组&…

Mac风扇控制电脑降温软件Macs Fan Control Pro 简体中文

Macs Fan Control Pro是一款功能强大的Mac风扇控制软件,旨在帮助用户更好地管理和控制Mac电脑的风扇速度和温度传感器。以下是该软件的主要特色介绍: 监测和调整Mac电脑的风扇速度和温度传感器,帮助用户控制设备温度,提高电脑性能…

Android Studio Gradle中没有Task任务,没有Assemble任务,不能方便导出aar包

Gradle中,没有Assemble任务 1. 在编译aar包或者编译module的时候,没有release包,我们一般都是通过assemble进行编译。 如果在Gradle中找不到task。 可以通过设置File->setting -->Experimental→取消勾选“Do not build Gradle task …

LeetCode 22. 括号生成【字符串,回溯;动态规划】中等

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

Java架构师内功嵌入式技术

目录 1 导学2 嵌入式微处理体系结构3 微处理器分类4 多核处理器5 嵌入式软件6 嵌入式系统6.1 系统组成7 嵌入式实时操作系统8 嵌入式软件设计9 软件开发工具想学习架构师构建流程请跳转:Java架构师系统架构设计 1 导学 嵌入式技术对软件架构的作用主要体现在以下几个方面: …

YOLOv5论文作图教程(1)— 软件介绍及下载安装(包括软件包+下载安装详细步骤)

前言:Hello大家好,我是小哥谈。在学习YOLOv5算法的过程中,很多同学都有发表论文的需求。作为文章内容的支撑,图表是最直接的整合数据的工具,能够更清晰地反映出研究对象的结果、流程或趋势。在发表论文的时候,审稿人除了关注论文的内容和排版外,也会审核图表是否清晰美观…

网络编程进化史:Netty Channel 的崭新篇章

上篇文章(Netty 入门 — ByteBuf,Netty 数据传输的载体),我们了解了 Netty 的数据是以 ByteBuf 为单位进行传输的,但是有了数据,你没有通道,数据是无法传输的,所以今天我们来熟悉 Ne…

【Gan教程 】 什么是变分自动编码器VAE?

名词解释:Variational Autoencoder(VAE) 一、说明 为什么深度学习研究人员和概率机器学习人员在讨论变分自动编码器时会感到困惑?什么是变分自动编码器?为什么围绕这个术语存在不合理的混淆?本文从两个角度…

高等数学啃书汇总重难点(七)微分方程

同济高数上册的最后一章,总的来说,这篇章内容依旧是偏记忆为主,说难不难说简单不简单: 简单的是题型比较死,基本上就是记公式,不会出现不定积分一般花样繁多的情况;然而也就是背公式并不是想的…

基于Java的在线教育网站管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

python输出与数据类型

目标 1、使用print输出内容 2、熟悉字符串类型 3、熟悉数字类型 4、熟悉数字与字符串操作 输出 print可控制输出内容也可配合、-、*、/进行运算,和整数型配合可进行运算和字符型配合有不同效果,如为拼接,*为多次输出注:整数型如&…