盘点Java窗体中关于默认布局管理器容易踩的坑

简介:

 

JFrame窗体的默认布局管理器是边界布局管理器,在使用之前应该先使用setLayout(null)取消该布局管理器。

Hello!大家好,我是灰小猿!

image.gif编辑

最近在使用Java窗体进行界面布局设置时,遇到这样一个问题,就是无论如何进行控件的布局,结果窗体上就只会布满整一个控件,代码和结果如下这样。

image.gif编辑

这就很疑惑了,明明给控件设置了坐标以及长宽,为什么在显示的时候还是会布满整个窗体?

image.gif编辑

之后查阅了很多发现是因为在不指定窗体布局的情况下,Swing组件的布局模式是边界布局管理器(BorderLayout),该布局管理器有一个特点就是在容器中放置一个组件之后,该组件是被放置在窗体中间的,并且整个组件会占据窗体的整个空间,这也就造成了在添加了组件之后,无论如何设置空间位置,空间仍然处于窗体中间并且布满的状态。

了解了这个时候,我使用了setLayout(null)来取消窗体的默认布局管理器,也就是告知窗体不再使用边界布局管理器。但是意外又来了,在我添加了setLayout(null)之后,发现界面仍然没有变化,如下所示,

image.gif编辑

这就很奇怪了,明明已经取消了边界布局管理器,为什么在设置了控件之后还是没有效果?

image.gif编辑

经过仔细研究发现,是显示窗体可见的代码setVisible(true);放在了取消布局管理器代码的前面,这就造成了窗体先显示出来,然后才取消了边界布局,这样导致了setLayout(null)就没有了意义。

最后将setLayout(null)放在了显示窗体可见的代码setVisible(true)之前,问题解决,结果如下:

image.gif编辑

在这里需要注意的就是:

JFrame窗体的默认布局管理器是边界布局管理器,在使用之前应该先使用setLayout(null)取消该布局管理器,同时,应该在设置好之后,最后再设置setVisible(true)使窗体页面可见,否则设置的属性将无意义。

好了,觉得不错记得点赞关注我哟!

大灰狼陪你一起进步!

image.gif编辑

目录
相关文章
|
1月前
|
Java 虚拟化 容器
(Java)Java里JFrame窗体的基本操作(容器布局篇-1)
容器 容器,我的理解是可以包容其他东西的玩意。它可以是一个盒子,可以是一个虚拟化的物品,可只要能包裹住其他存在质体的东西,那么都可以称作是容器。例如:JPanel组件和JScollPane组件两者都是容器也是组件。 既然有容器,那么容器中的布局就必不可少了。不然不规矩的摆放物品,人类看不习惯,我也看不习惯 ???? 本篇内容,将说明java JFrame窗体里容器中几类布局。 说明:所有在JFrame窗体里的容器布局都会使用setLayout()方法,采用的布局参数都将放进这个方法里 绝对布局 调用窗体容器
91 1
|
1月前
|
Java 数据安全/隐私保护 索引
(Java)Java里JFrame窗体的基本操作(组件篇-3)
回顾 说过了下拉框和下拉列表,本篇内容将了解滚动面板和各类输入框 什么是组件? 如果不熟悉组件,可以将组件看作是某个Form表单中的表单元素,组件可以完善JFrame窗口的布局,以及一些功能; 本篇内容中所有的组件所用到的类全都来自于javax.swing这个包中,记得引入; 另:在使用组件前,请先将窗体中的内容类给实例化出来进行操作,代码如下: Container c = getContentPane(); JScollPane JScollPane类,说的就是滚动面板。它不同于其他组件,它是一个容器,
73 1
|
1月前
|
Java 索引 容器
(Java)Java里JFrame窗体的基本操作(组件篇-2)
回顾 这算是JFrame窗体基本操作的组件第二篇了,上一篇说过了单选框,复选框,按钮。 在这一篇中,我会说明下拉框和列表框 什么是组件? 自行百度:java中JFrame窗体里的组件是什么? 名字都给你想好了 ( :I ) JComBox下拉框 JComBox类,就是下拉框,实例化出来后,要填写泛型<>,添加是什么数据类型的内容,泛型中就写上该数据类型; JComboBox<?> combox = new JComboBox<>(); 以下实例化下拉框的时候我泛型写的全
82 1
|
1月前
|
Java 调度 容器
(Java)JFrame窗体的基本操作(1-窗体的创建)
什么是窗体? 窗体,是某个程序,在电脑中,手机中的窗口化程序。它在非固定状态下,可以自由的变换大小。同时,窗体,也是容器,窗体这个容器可以在内部处理很多的小组件。 窗体的具体例子:例如,所有的浏览器,浏览器中网页里打开的提示框,电脑的QQ,手机上的小窗模式,都是窗体; 在本篇内容中,我们会使用JFrame和JDialog两个类,在实现java中的窗体; 在JAVA中如何创建窗体? 在java中,我们需要引入javax.swing包下的JFrame类或者JDialog类,这样才能使用两个窗体;但是,一些窗
123 0
|
1月前
|
Java 容器
(Java)Java里JFrame窗体的基础操作(组件-1)
如果不熟悉组件,可以将组件看作是某个Form表单中的表单元素,当然这只是在不熟悉组件的前提下。如果深入了解了组件,那么它有着非常多的组件,这些组件可以完善JFrame窗口的布局,以及一些功能; 本篇内容中所有的组件所用到的类全都来自于javax.swing这个包中,记得引入
56 0
|
4月前
|
存储 Java
Java对象的内存布局
在HotSpot虚拟机中,Java对象的内存布局分为三部分:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。对象头包含Mark Word、Class对象指针及数组长度;实例数据存储对象的实际字段内容;对齐填充用于确保对象大小为8字节的整数倍。
102 0
|
存储 Java
深入理解java对象的内存布局
这篇文章深入探讨了Java对象在HotSpot虚拟机中的内存布局,包括对象头、实例数据和对齐填充三个部分,以及对象头中包含的运行时数据和类型指针等详细信息。
127 0
深入理解java对象的内存布局
|
Java Maven
使用java语言制作一个窗体(弹窗),用来收集用户输入的内容
该博客文章介绍了如何使用Java Swing中的JFrame创建一个窗体来收集用户输入的内容,并提供了详细的实现步骤和完整代码示例。
使用java语言制作一个窗体(弹窗),用来收集用户输入的内容
|
设计模式 SQL 安全
Java面试题:设计一个线程安全的内存管理器,使用观察者模式来通知所有线程内存使用情况的变化。如何确保在添加和移除内存块时的线程安全?如何确保任务的顺序执行和调度器的线程安全?
Java面试题:设计一个线程安全的内存管理器,使用观察者模式来通知所有线程内存使用情况的变化。如何确保在添加和移除内存块时的线程安全?如何确保任务的顺序执行和调度器的线程安全?
163 0
|
Java 容器
Java详解:GUI图形用户界面设计—容器组件及面板布局方式
Java详解:GUI图形用户界面设计—容器组件及面板布局方式
423 0
下一篇
oss云网关配置