【可视化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.mfbz.cn/a/103912.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Docker】Docker的网络

Docker提供了多种内置的网络模式,用于在容器之间建立网络连接。这些网络模式,包括桥接网络、主机网络、无网络模式。我们将主要探讨每种网络模式的优缺点、适用场景。 桥接网络 桥接网络是Docker的默认网络模式。在桥接网络中,Docker会为每…

Node编写重置用户密码接口

目录 前言 定义路由和处理函数 验证表单数据 实现重置密码功能 前言 接前面文章,本文介绍如何编写重置用户密码接口 定义路由和处理函数 路由 // 重置密码的路由 router.post(/updatepwd, userinfo_handler.updatePassword) 处理函数 exports.updatePasswo…

网络协议--IGMP:Internet组管理协议

13.1 引言 12.4节概述了IP多播给出,并介绍了D类IP地址到以太网地址的映射方式。也简要说明了在单个物理网络中的多播过程,但当涉及多个网络并且多播数据必须通过路由器转发时,情况会复杂得多。 本章将介绍用于支持主机和路由器进行多播的In…

软件测试工程师怎么样面试上好的公司?

首先卖个关子,如果你是面试官,你希望招一个什么样的人进来? 如果这个问题搞明白了,那么可以说测试岗位的面试,就变得非常轻松了。 按照一般的惯例,面试官都会让你自我介绍,介绍你的项目经验&a…

【JAVA核心知识】深度了解MySql的innodb引擎

关键词InnoDB架构图表空间数据页顺序下数据页的存储页分裂页合并高水位排序索引构建img_v2_455d98d3-a67a-47ef-b15a-c1798de6f56g.jpg 索引优化模糊查询打断最左匹配?-索引下推仅能使用一个索引?-索引合并自适应Hash索引 AUTO_INCREMENT计数器新增语句的…

正点原子嵌入式linux驱动开发——Linux LCD驱动

LCD是很常用的一个外设,通过LCD可以显示绚丽的图片、界面等,提交人机交互的效率。STM32MP1提供了一个LTDC接口用于连接RGB接口的液晶屏。本章就来学校一下如何在Linux下驱动LCD屏。 LCD和LTDC简介 LCD简介 这里在当时学习stm32裸机开发的时候就学过了…

C++文件和流

到目前为止,我们已经使用了 iostream 标准库,它提供了 cin 和 cout 方法分别用于从标准输入读取流和向标准输出写入流。 本教程介绍如何从文件读取流和向文件写入流。这就需要用到 C 中另一个标准库 fstream,它定义了三个新的数据类型&#x…

JavaWeb——IDEA相关配置(Maven配置以及创建自己的第一个Maven项目)

写在前面: 笔者根据狂神说的javaweb视频,一步一步跟着配置IDEA中的Maven,在后面,笔者将讲述自己如何从0配置Maven以及创建自己的第一个Maven项目,笔者将自己的心路历程,包括配置的过程,都以文字…

【TGRS 2023】RingMo: A Remote Sensing Foundation ModelWith Masked Image Modeling

RingMo: A Remote Sensing Foundation Model With Masked Image Modeling, TGRS 2023 论文:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber9844015 代码:https://github.com/comeony/RingMo MindSpore/RingMo-Framework (gitee.com) …

汽车4S店如何在数字化管理下,提高市场竞争力

在所有人都认为疫情过后,经济形势会一路向阳,但是,实际情况出乎所有人的意料,各行各业举步维艰。 新闻爆出的各大房地产,恒大的2.4万亿让人瞠目结舌,还有碧桂园和融创,也是债台高筑了&#xff…

嵌入式 Tomcat 调校

SpringBoot 嵌入了 Web 容器如 Tomcat/Jetty/Undertow,——这是怎么做到的?我们以 Tomcat 为例子,尝试调用嵌入式 Tomcat。 调用嵌入式 Tomcat,如果按照默认去启动,一个 main 函数就可以了。 简单的例子 下面是启动…

Power BI 傻瓜入门 9. 设计和部署数据模型

本章内容包含: 详细说明设计数据模型的技术要求Power BI Desktop中基本数据模型的设计将数据模型从Power BI Desktop发布到Power BI Services 在数据进入Power BI后对其进行操作既是一门艺术,也是一门科学。导入到任何应用程序中的数据不仅需要注意数据…

从力扣[203]理解递归思想

本文旨在通过使用递归方法的使用来进一步了解递归思想 class Solution {public ListNode removeElements(ListNode head, int val) {if (head null) {return head;}head.next removeElements(head.next, val);return head.val val ? head.next : head;} }既然要使用递归算法…

【golang】Go中的切片slice和操作笔记,垃圾回收机制,重组 reslice ,复制和追加,内存结构

切片 文章目录 切片将切片传递给函数make() 创建一个切片new() 和 make()的区别多维切片bytes包for-range切片重组 reslice切片的复制和追加 字符串、数组和切片的应用获取字符串的某一部分字符串和切片的内存结构修改字符串中的某个字符字节数组对比函数搜索及排序切片和数组a…

一、PHP环境搭建[phpstorm]

一、安装 1.php编写工具 地址:https://www.jetbrains.com/phpstorm/download/#sectionwindows 图示: 2.php环境 解释:建议使用phpstudy进行安装,安装较为简单 链接:https://www.xp.cn/ 图示: 二、第…

微信小程序投票管理系统:打造智能、便捷的投票体验

前言 随着社交网络的兴起和移动互联网的普及,人们对于参与和表达意见的需求越来越强烈。在这个背景下,微信小程序投票管理系统应运而生。它为用户提供了一个智能、便捷的投票平台,使用户可以轻松创建和参与各种类型的投票活动。本文将详细介…

【德哥说库系列】-PostgreSQL跨版本升级

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

STM32-LCD中英文显示及应用

目录 字符编码 ASCII码(8位) 中文编码(16位) GB2312标准 GBK编码 GB18030标准(32位) Big5编码 Unicode字符集和编码 UTF-32(32位) UTF-16(16位/32位&#xff0…

[AutoSar NVM] 存储架构

依AutoSAR及公开知识辛苦整理,禁止转载。 专栏 《深入浅出AutoSAR》, 全文 2900 字. 图片来源: 知乎 汽车的ECU内存中有很多不同类型的变量,这些变量包括了车辆各个系统和功能所需的数据。大部分变量在ECU掉电后就会丢失&#x…

AI的Prompt是什么

一.AI的Prompt的作用 在人工智能(AI)中,"Prompt"通常指的是向AI系统提供的输入或指令,用于引导AI进行特定的操作或生成特定的输出。例如,在一个对话型AI系统中,用户输入的问题就是一个prompt&…