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

news2024/11/15 17:25:29

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.coloradmin.cn/o/1133491.html

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

相关文章

盘点算法比赛中常见的AutoEDA工具库

在完成竞赛和数据挖掘的过程中,数据分析一直是非常耗时的一个环节,但也是必要的一个环节。 能否使用一个工具代替人来完成数据分析的过程呢,现有的AutoEDA工具可以一定程度上完成上述过程。本文将盘点常见的AutoEDA工具,欢迎收藏转…

C#中Redis使用简单教程

C#开发者的Redis入门指南 Redis是一个高性能的内存数据库,常用于缓存、队列、实时数据分析等场景。作为一个C#开发者,了解如何使用Redis可以为你的应用程序带来巨大的好处。本文将向你介绍Redis基本概念,并提供一些C#的代码示例来帮助你入门…

[SpringCloud] Eureka 与 Ribbon 简介

目录 一、服务拆分 1、案例一:多端口微服务 2、案例二:服务远程调用 二、Eureka 1、Eureka 原理分析 2、Eureka 服务搭建(注册 eureka 服务) 3、Eureka 服务注册(注册其他服务) 4、Eureka 服务发现…

Java学习 2.Java-数据类型与运算符

初识java回顾: java文件编译 一个java文件有类 类中有方法 java----->类----->方法 idea创建项目 改idea背景色 1. 2. 3. 数据类型与变量 1.字面常量 常量即程序运行期间,固定不变的量称为常量,字面值常量也是常量 字面常量…

uboot图像化配置操作说明

一. 简介 之前文章的学习, uboot 可以通过 mx6ull_alientek_emmc_defconfig 来配置,或者通过文 件 mx6ull_alientek_emmc.h 来配置 uboot 。 还有另外一种配置 uboot 的方法,就是图形化配置, 以前的 uboot 是不支持图…

02. 板载音频功能

核心:CS43L22, CS43L22是一款低功耗立体声数字/模拟转换器(DAC) 一、输入 (1)MEMS麦克风:芯片-MP45DT02 (2)外挂的U盘 (3)STM32F4的内部芯片存…

在CentOS 7中手工打造和运行xml文件配置的Servlet,然后使用curl、浏览器、telnet等三种工具各自测试

下载Openjdk并配置环境变量 https://jdk.java.net/java-se-ri/11-MR2是官网下载Openjdk 11的地方。 sudo wget https://download.java.net/openjdk/jdk11.0.0.1/ri/openjdk-11.0.0.1_linux-x64_bin.tar.gz下载openjdk 11。 sudo mkdir -p /usr/openjdk11创建目录&#xff…

【电路笔记】-交流电路中的功率

交流电路中的功率 文章目录 交流电路中的功率1、概述2、正弦波形的功率3、功率因数4、功率三角5、总结 1、概述 作为一般概念,功率描述了系统释放/传输一定量能量的速度。 这种能量可以有不同的形式:动能、磁能、电能……等。 因此,在任何域…

2023年视频号视频下载提取使用教程

视频号视频下载提取教程 第一步: 点击公众号下方菜单「视频下载」,点击“视频号视频下载教程”长按识别二维码添加小助手为好友。 没有关注公众号的,可以先关注。 第二步: 点击视频号的转发图标,将视频号视频转发给…

混合精度训练原理之float16和float32数据之间的互相转换

混合精度训练原理之float16和float32数据之间的互相转换 本篇文章参考:全网最全-混合精度训练原理 上述文章已经讲解的比较详细,本文只是从数值角度分析: 1. float32转入float16的精度误差 2. 在深度学习的混精度训练当中,当参数…

打破总分行数据协作壁垒,DataOps在头部股份制银行的实践|案例研究

从银行开始建设数据仓库至今已近20年,当前各银行机构在数据能力建设中面临诸多困扰:如何保证数据使用时的准确性?如何让数据敏捷响应业务变化?如何让更多的业务人员使用数据? 这些问题极大影响了经营指标的达成与业务…

【Python 算法】信号处理通过陷波滤波器准确去除工频干扰

对于一个信号来说通常汇入工频噪声往往是因为交流电产生的电泳,影响了我们信号采集导致信号上存在工频干扰。 那么matlab去除工频干扰可以通过陷波滤波器实现。 通常使用scipy.signal实现信号的处理。 Scipy的信号处理模块(scipy.signal)来创…

算法通过村第十六关-滑动窗口|黄金笔记|结合堆的应用

文章目录 前言堆与滑动窗口结合的问题总结 前言 提示:不论记忆多么痛苦,它属于过去,已经逝去了,我们为什么还执着于它并让它代表我们?我们就这样,所以,我们受苦。 --丹津葩默 这个还是一个比较重…

堆(二叉树,带图详解)

一.堆 1.堆的概念 2.堆的存储方式 逻辑结构 物理结构 2.堆的插入问题 3.堆的基本实现(代码)(以小堆为例) 1.堆的初始化 2. 向上调整 3.插入结点 4. 交换函数、堆的打印 5.向下调整 6.删除根节点并调整成小根堆 7.获取堆…

Transformer详解学习

1. Transformer 原理 1.1 Transformer整体结构 Transformer的结构图,拆解开来,主要分为图上4个部分,其中最重要的就是2和3Encoder-Decoder部分,对咯,Transformer是一个基于Encoder-Decoder框架的模型。 接下来我将按照…

通过使用Cpolar内网穿透工具实现BUG管理系统的远程访问

文章目录 前言1. 本地安装配置BUG管理系统2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射本地服务 3. 测试公网远程访问4. 配置固定二级子域名4.1 保留一个二级子域名 5. 配置二级子域名6. 使用固定二级子域名远程7. 结语 前言 BUG管理软件,作为软件测试工程师的必备工具…

Kettle循环结果集中的数据并传入SQL组件【或转换】里面

简介:在尝试使用了结果集的Demo循环后,进入到生产还是有一点问题的,以下是各个组件的分解解释、遇到的问题,以及解决问题的思路,最后文章的最后会把完整的Ktr文件放出来。记得收藏点赞喔! 先来看张图~来自…

【疯狂Java】数组

1、一维数组 (1)初始化 ①静态初始化:只指定元素,不指定长度 new 类型[] {元素1,元素2,...} int[] intArr; intArr new int[] {5,6,7,8}; ②动态初始化:只指定长度,不指定元素 new 类型[数组长度] int[] princes new in…

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

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

【算法训练-动态规划 五】【二维DP问题】最大正方形

废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【动态规划】,使用【数组】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为&…