上一篇
Java中创建窗口通常使用Swing的JFrame或JavaFX的Stage类,通过实例化JFrame,设置大小、关闭操作和可见性即可显示窗口;JavaFX则需继承Application类并重写start()方法,在Stage中设置场景实现。
在Java中创建窗口是开发图形用户界面(GUI)应用程序的基础,主要通过Swing和AWT库实现,以下是详细步骤和最佳实践:
核心步骤(使用Swing)
-
导入必要包
import javax.swing.*; // 主Swing组件 import java.awt.*; // 布局和事件处理
-
创建窗口框架
JFrame frame = new JFrame("我的窗口"); // 标题为"我的窗口" -
设置窗口属性
frame.setSize(500, 400); // 宽500像素,高400像素 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭时退出程序 frame.setLocationRelativeTo(null); // 窗口居中显示
-
添加组件(如按钮)

JButton button = new JButton("点击我"); frame.add(button, BorderLayout.CENTER); // 将按钮添加到中心区域 -
显示窗口
frame.setVisible(true); // 必须调用!否则窗口不可见
完整代码示例
import javax.swing.*;
import java.awt.*;
public class MyWindow {
public static void main(String[] args) {
// 创建窗口框架
JFrame frame = new JFrame("我的第一个Java窗口");
// 设置窗口属性
frame.setSize(600, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout()); // 使用边界布局
// 添加标签组件
JLabel label = new JLabel("欢迎使用Java GUI!", SwingConstants.CENTER);
frame.add(label, BorderLayout.NORTH);
// 添加按钮
JButton button = new JButton("确定");
frame.add(button, BorderLayout.SOUTH);
// 居中显示并可见
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
关键代码解析
| 代码 | 作用 |
|---|---|
JFrame.EXIT_ON_CLOSE |
关闭窗口时终止程序(避免后台进程残留) |
setLocationRelativeTo(null) |
窗口居中于屏幕 |
BorderLayout |
默认布局管理器,划分NORTH/SOUTH/EAST/WEST/CENTER区域 |
SwingUtilities.invokeLater() |
线程安全启动方式(推荐在main方法中使用) |
常见问题解决
-
窗口不显示
- 检查是否遗漏
setVisible(true) - 确保未在非事件调度线程操作GUI(使用
SwingUtilities.invokeLater())
- 检查是否遗漏
-
关闭窗口后程序不退出
- 必须设置
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
- 必须设置
-
组件布局错乱

- 学习布局管理器:
BorderLayout(默认)、GridLayout、FlowLayout - 使用
frame.setLayout(new FlowLayout())切换布局
- 学习布局管理器:
-
事件响应
button.addActionListener(e -> { JOptionPane.showMessageDialog(frame, "按钮被点击!"); });
最佳实践
-
线程安全
始终在事件调度线程创建GUI:public static void main(String[] args) { SwingUtilities.invokeLater(() -> { // 在此构建窗口 }); } -
现代Java特性

- 使用Lambda简化事件监听(Java 8+)
- 避免AWT组件(如
Frame),优先选择Swing的JFrame
-
可访问性
frame.getContentPane().setBackground(Color.WHITE); // 设置背景色 label.setFont(new Font("微软雅黑", Font.BOLD, 16)); // 字体优化 -
进阶方向
- 使用
JPanel嵌套复杂布局 - 学习JavaFX(官方新一代GUI库)
- 使用
引用说明:本文代码基于Oracle官方Java教程和Swing文档编写,符合Java 11规范,Swing库自1998年发布,是Java SE的标准组件,长期维护且跨平台兼容。
注意事项:避免直接继承JFrame(除非必要),实例化优于继承,对于高性能需求场景,建议评估JavaFX或跨平台框架。
