You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Swing:仅用Grid/Border/Flow布局实现表单字段对齐

Java Swing 表单布局修正方案

核心实现思路

  • 以BorderLayout作为窗口整体布局,划分顶部标题区、中间表单区和底部操作区
  • 中间表单区采用GridLayout按行组织每组输入项,保证行高统一
  • 为每个标签单独嵌套FlowLayout(FlowLayout.RIGHT)面板,让标签右对齐、输入框左对齐,实现视觉上的字段对齐,全程不调用setPreferredSize

修正后的代码示例

import javax.swing.*;
import java.awt.*;

public class StudentForm extends JFrame {
    public StudentForm() {
        setTitle("学生信息表单");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout(10, 10)); // 设置组件间间距

        // 顶部标题面板
        JPanel titlePanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
        titlePanel.add(new JLabel("学生信息录入"));
        add(titlePanel, BorderLayout.NORTH);

        // 中间表单容器:GridLayout 管理所有输入行
        JPanel formContainer = new JPanel(new GridLayout(4, 1, 5, 5));

        // 姓名输入行
        JPanel nameRow = new JPanel(new FlowLayout(FlowLayout.RIGHT, 10, 0));
        nameRow.add(new JLabel("姓名:"));
        nameRow.add(new JTextField(15));
        formContainer.add(nameRow);

        // 学号输入行
        JPanel idRow = new JPanel(new FlowLayout(FlowLayout.RIGHT, 10, 0));
        idRow.add(new JLabel("学号:"));
        idRow.add(new JTextField(15));
        formContainer.add(idRow);

        // 专业输入行
        JPanel majorRow = new JPanel(new FlowLayout(FlowLayout.RIGHT, 10, 0));
        majorRow.add(new JLabel("专业:"));
        majorRow.add(new JTextField(15));
        formContainer.add(majorRow);

        // 年级输入行
        JPanel gradeRow = new JPanel(new FlowLayout(FlowLayout.RIGHT, 10, 0));
        gradeRow.add(new JLabel("年级:"));
        gradeRow.add(new JTextField(15));
        formContainer.add(gradeRow);

        // 将表单容器加入窗口中间区域,添加滚动支持
        add(new JScrollPane(formContainer), BorderLayout.CENTER);

        // 底部操作按钮面板
        JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
        buttonPanel.add(new JButton("提交"));
        buttonPanel.add(new JButton("重置"));
        add(buttonPanel, BorderLayout.SOUTH);

        pack(); // 自动计算窗口最佳尺寸,替代setPreferredSize
        setLocationRelativeTo(null); // 窗口居中显示
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new StudentForm().setVisible(true));
    }
}

关键细节说明

  • 每个输入行用FlowLayout(FlowLayout.RIGHT)面板包裹,确保标签右对齐,输入框自然左对齐,实现字段对齐效果
  • GridLayout保证所有输入行的高度一致,整体布局规整
  • 调用pack()让窗口自动适配组件尺寸,完全符合题目禁止setPreferredSize的要求
  • 仅使用题目允许的BorderLayout、FlowLayout和GridLayout三种布局管理器

内容的提问来源于stack exchange,提问作者boomie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 16:02:43