Swing——布局管理器
- 作者: 五速梦信息网
- 时间: 2026年04月04日 13:25
前言
在编写图形界面时,总是需要考虑的就是组件放在哪里,组件怎么大才合适。在Swing中就有现成的布局管理器帮我们做这些事情,我们不必写代码去一一安排。下面将介绍什么是布局管理器、Swing中常用布局管理器分类以及特点。
布局管理器
什么是布局管理器?
组件在容器中的位置和大小是由布局管理器来决定的。每一个容器都会使用一个布局管理器,通过它来自动进行组件的布局管理。
布局管理器的工作过程
不同的布局管理器对容器中的组件布局会依据不同的算法,如何布局是布局管理器中的定位组件负责。它会根据容器中的每一个组件需要多少空间,然后依据所用平台的组件尺寸、可用空间,以及布局管理器的规则在屏幕上尽最好可能来安排组件;在不同的平台和屏幕上,也会自动地调节组件的相对位置和大小。
要具体确定组件需要多少空间,布局管理器会调用组件的getMinimumSize()、getPreferredSize()以及getMaximumSize()方法获取组件显示所需要的最小,适当,以及最大空间。布局管理器使用组件的空间需求来调整组件尺寸并在屏幕上进行安排。
BorderLayout
布局管理器的特点
前面介绍过Swing中的布局管理器大多数是沿袭自AWT中,AWT中的布局管理器的特点主要有:
setLayout()setLayout(null)
布局管理器的种类
FlowLayoutBorderLayoutGridLayoutGridBagLayoutCardLayoutBoxLayout
null布局管理器
setLayout(null)
FlowLayout
将组件从左到右(从上到下)的顺序依次排列加入到Component,在遇到边界时,从下一行的开头继续排列。
构造函数:
LEFTRIGHTCENTERLEADINGTRAILING
Panel
BorderLayout
CENTEREASTWESTNORTHSOUTH
构造函数:
- BorderLayout(): 默认构造函数,组件之间没有间隔
- BorderLayout(int hgap, int vgap):可以指定组件之间的水平和垂直间距
Frame、Window和ScrollPane默认使用BorderLayout布局
需要注意:可以向使用BorderLayout的容器的任何一个方位添加多个Component,但是只会显示最后添加的那个。不过,我们可以使用Panel组合多个Component,实现复杂的布局。
Box
Box.createHorizontalBox()Box.createVerticalBox()
BoxLayout
通过参数 X_AXIS、Y_AXIS 来决定控件是进行水平还是垂直排列布局。BoxLayout 的构造函数有两个参数,一个参数定义使用该 BoxLayout 的容器,另一个参数是指定 BoxLayout 是采用水平还是垂直排列。
JPanel panel=new JPanel();
BoxLayout layout=new BoxLayout(panel, BoxLayout.Y_AXIS);
panel.setLayout(layoout);
GridLayout
按照构造函数中提供的参数,将整个容器分为大小相等的网格状。当往使用GridLayout布局的容器中添加Component时,以从上到下,从左到右的方式添加。
与FlowLayout的区别:
- GridLayout中的Component自动占用某个网格,而FlowLayout中的Component可以按自己的大小占用不同的空间
- GridLayout中每行的Component数量相同,而FlowLayout中每行中Component的数量可能不同
构造函数:
- GridLayout(): 默认构造函数,创建一个只有一行一列的网格
- GridLayout(int rows, int cols):创建rows行cols列的网格
- GridLayout(int rows, int cols, int hgap, int vgap):也可以指定网格之间的间距
GridBagLayout
GridBagLayout管理器可以说是最强大的布局管理器。和GridLayout类似,GridBagLayout也将容器分为很多网格。与GridLayout不同:GridBagLayout的网格数量不是由构造函数决定的;可以让Component跨越多个Grid;可以使每个Grid大小不同;当窗口大小发生变化时,GridBagLayout可以精确地控制每个Grid的拉伸变化。
GridBagConstraintssetConstraints(Component c , GridBagConstraints constraints)
所以使用好GridBagLayout主要是要使用好GridBagConstraints!
GridBagConstraints
GridBagConstraints是控制容器中某个Component的布局特性。使用GridBagConstraints的关键在于精确地设置其属性值:
- gridx和gridy: 设置Component在网格中的横向和纵向位置
- gridwidth和gridheight:设置Component能在横向和纵向横跨多少个网格
- fill:控制Component如何填充网格的区域
- NONE、HORIZONTAL 、VERTICAL 、BOTH
- ipadx和ipady:设置Component的内部填充大小,即在Component的最小大小上还需要加多少
- insets:外部填充大小,类似于Border
- weightx和weighty:设置在横向和纵向的占用比重,当窗口大小改变的时候,可以使用这两个属性来控制Component随着窗口变化时,Component大小的变化比率。两个属性的默认值为0,取值范围[0.0, 1.0]。
CardLayout
一种三维的布局管理器,除了容器的高和宽之外,还加入了第三个维度。就像扑克堆起来一样,只显示最上面一张卡片(Component),可以通过方法切换当前显示的卡片(默认显示第一张)。
构造函数:
- CardLayout()
- CardLayout(int hgap, int vgap):
主要方法:
- first(Container target)
- last(Container target)
- previous(Container targe)
- next(Container target)
- show(Container target, String name)
小结
没有详细去介绍每个布局管理器如何使用,都只是简单介绍一个概念。如何使用网上已有很好的教程以及查看API文档也是不错的方式。记下这些更多的相当于是一个笔记吧,作为教程是非常欠缺的,方便自己日后回顾。
一般来说,Java本身提供的布局管理器几乎可以满足我们的大部分需求了,我们只用按需取材。布局搞好了,但是这只是一个可视化的静态界面,还没有实现与用户的交互。要实现与用户交互则需要事件处理。下一篇文章将介绍事件处理的相关基础。
- 上一篇: switch穿透输出结果
- 下一篇: swift开发新项目总结
相关文章
-
switch穿透输出结果
switch穿透输出结果
- 互联网
- 2026年04月04日
-
Symantec Backup Exec 2012 Agent for Linux 卸载
Symantec Backup Exec 2012 Agent for Linux 卸载
- 互联网
- 2026年04月04日
-
Synopsys DC综合脚本示例
Synopsys DC综合脚本示例
- 互联网
- 2026年04月04日
-
swift开发新项目总结
swift开发新项目总结
- 互联网
- 2026年04月04日
-
Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)
Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)
- 互联网
- 2026年04月04日
-
swift 原生数组转模型
swift 原生数组转模型
- 互联网
- 2026年04月04日






