在Swing中,每个组件在容器中都有一个具体的位置和大小,而在容器中摆放各种组件时很难判断其具体位置和大小。布局管理器提供了Swing组件安排、展示在容器中的方法及基本的布局功能。
Swing提供的常用布局管理器包括流布局管理器、边界布局管理器和网格布局管理器。
1、流布局管理器
1 import java.awt.*;
2
3 import javax.swing.*;
4
5 public class FlowLayoutPosition extends JFrame {
6 /**
7 *
8 */
9 private static final long serialVersionUID = 1L;
10
11 public FlowLayoutPosition() {
12 setTitle("本窗体使用流布局管理器"); // 设置窗体标题
13 Container c = getContentPane();
14 // 设置窗体使用流布局管理器,使组件右对齐,并且设置组件之间的水平间隔与垂直间隔
15 setLayout(new FlowLayout(2, 10, 10));
16 for (int i = 0; i < 10; i++) { // 在容器中循环添加10个按钮
17 c.add(new JButton("button" + i));
18 }
19 setSize(300, 200); // 设置窗体大小
20 setVisible(true); // 设置窗体可见
21 // 设置窗体关闭方式
22 setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
23 }
24
25 public static void main(String[] args) {
26 new FlowLayoutPosition();
27 }
28 }
2、边界布局管理器
1 import java.awt.*;
2
3 import javax.swing.*;
4
5 public class BorderLayoutPosition extends JFrame {
6 /**
7 *
8 */
9 private static final long serialVersionUID = 1L;
10 // 定义组件摆放位置的数组
11 String[] border = { BorderLayout.CENTER, BorderLayout.NORTH,
12 BorderLayout.SOUTH, BorderLayout.WEST, BorderLayout.EAST };
13 String[] buttonName = { "center button", "north button",
14 "south button", "west button", "east button" };
15
16 public BorderLayoutPosition() {
17 setTitle("这个窗体使用边界布局管理器");
18 Container c = getContentPane(); // 定义一个容器
19 setLayout(new BorderLayout()); // 设置容器为边界布局管理器
20 for (int i = 0; i < border.length; i++) {
21 // 在容器中添加按钮,并设置按钮布局
22 c.add(border[i], new JButton(buttonName[i]));
23 }
24 setSize(350, 200); // 设置窗体大小
25 setVisible(true); // 使窗体可视
26 // 设置窗体关闭方式
27 setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
28 }
29
30 public static void main(String[] args) {
31 new BorderLayoutPosition();
32 }
33 }
3、网格布局管理器
1 import java.awt.*;
2
3 import javax.swing.*;
4
5 public class GridLayoutPosition extends JFrame {
6 /**
7 *
8 */
9 private static final long serialVersionUID = 1L;
10
11 public GridLayoutPosition() {
12 Container c = getContentPane();
13 // 设置容器使用网格布局管理器,设置7行3列的网格
14 setLayout(new GridLayout(7, 3, 5, 5));
15 for (int i = 0; i < 20; i++) {
16 c.add(new JButton("button" + i)); // 循环添加按钮
17 }
18 setSize(300, 300);
19 setTitle("这是一个使用网格布局管理器的窗体");
20 setVisible(true);
21 setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
22 }
23
24 public static void main(String[] args) {
25 new GridLayoutPosition();
26 }
27 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通