Java中三种常用布局方式

引言

在Java Swing和JavaFX中,布局管理器(Layout Managers)用于控制组件(如按钮、文本框等)在容器(如窗口、面板等)内的位置和大小。下面介绍Java Swing中常用的三种布局方式:

1. FlowLayout(流式布局)

  • 特点FlowLayout 是最简单的布局管理器之一,它按照从左到右、从上到下的顺序排列组件。当一行放不下更多的组件时,会自动换行。

  • 适用场景:适用于组件数量不多,且不需要复杂对齐的情况。

  • 示例代码

    复制代码
    import javax.swing.*;
    import java.awt.*;
    
    public class FlowLayoutExample {
        public static void main(String[] args) {
            JFrame frame = new JFrame("FlowLayout Example");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(300, 200);
    
            // 设置布局管理器为FlowLayout
            frame.setLayout(new FlowLayout());
    
            // 添加组件
            frame.add(new JButton("Button 1"));
            frame.add(new JButton("Button 2"));
            frame.add(new JButton("Button 3"));
    
            // 显示窗口
            frame.setVisible(true);
        }
    }

2. BorderLayout(边界布局)

  • 特点BorderLayout 将容器划分为五个区域:北(North)、南(South)、东(East)、西(West)和中心(Center)。每个区域最多只能放置一个组件。

  • 适用场景:适用于需要在窗口的固定位置放置组件的情况,如标题栏、状态栏等。

  • 示例代码

    复制代码
    import javax.swing.*;
    import java.awt.*;
    
    public class BorderLayoutExample {
        public static void main(String[] args) {
            JFrame frame = new JFrame("BorderLayout Example");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(300, 200);
    
            // 设置布局管理器为BorderLayout
            frame.setLayout(new BorderLayout());
    
            // 添加组件
            frame.add(new JButton("North"), BorderLayout.NORTH);
            frame.add(new JButton("South"), BorderLayout.SOUTH);
            frame.add(new JButton("East"), BorderLayout.EAST);
            frame.add(new JButton("West"), BorderLayout.WEST);
            frame.add(new JButton("Center"), BorderLayout.CENTER);
    
            // 显示窗口
            frame.setVisible(true);
        }
    }

3. GridLayout(网格布局)

  • 特点GridLayout 将容器划分为一个矩形网格,每个组件占据一个单元格,所有单元格的大小相同。

  • 适用场景:适用于需要将组件均匀分布在一个网格中的情况,如计算器界面。

  • 示例代码

    复制代码
    import javax.swing.*;
    import java.awt.*;
    
    public class GridLayoutExample {
        public static void main(String[] args) {
            JFrame frame = new JFrame("GridLayout Example");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(300, 200);
    
            // 设置布局管理器为GridLayout,3行3列
            frame.setLayout(new GridLayout(3, 3));
    
            // 添加组件
            for (int i = 1; i <= 9; i++) {
                frame.add(new JButton("Button " + i));
            }
    
            // 显示窗口
            frame.setVisible(true);
        }
    }

总结

  • FlowLayout:简单易用,适合组件较少且不需要复杂对齐的情况。
  • BorderLayout:适用于需要在固定位置放置组件的情况。
  • GridLayout:适用于需要将组件均匀分布在网格中的情况。
相关推荐
ChinaRainbowSea5 分钟前
补充:问题:CORS ,前后端访问跨域问题
java·spring boot·后端·spring
KiddoStone14 分钟前
多实例schedule job同步数据流的数据一致性设计和实现方案
java
运器12335 分钟前
【一起来学AI大模型】算法核心:数组/哈希表/树/排序/动态规划(LeetCode精练)
开发语言·人工智能·python·算法·ai·散列表·ai编程
岁忧35 分钟前
(LeetCode 每日一题) 1865. 找出和为指定值的下标对 (哈希表)
java·c++·算法·leetcode·go·散列表
YuTaoShao39 分钟前
【LeetCode 热题 100】240. 搜索二维矩阵 II——排除法
java·算法·leetcode
whoarethenext1 小时前
使用 C++ 实现 MFCC 特征提取与说话人识别系统
开发语言·c++·语音识别·mfcc
ITfeib1 小时前
Flutter
开发语言·javascript·flutter
考虑考虑1 小时前
JDK9中的dropWhile
java·后端·java ee
想躺平的咸鱼干2 小时前
Volatile解决指令重排和单例模式
java·开发语言·单例模式·线程·并发编程
Owen_Q2 小时前
Denso Create Programming Contest 2025(AtCoder Beginner Contest 413)
开发语言·算法·职场和发展