基础概念:理解Java中的“窗口”
Java通过javax.swing(Swing)和javafx.stage(JavaFX)提供窗口支持:
- Swing:Java传统GUI库,兼容性好
import javax.swing.JFrame; // 核心窗口类
- JavaFX:现代GUI框架,支持高级特效
import javafx.application.Application; import javafx.stage.Stage; // 核心舞台(窗口)类
关键区别:Swing内置于JDK,JavaFX需JDK 11+单独配置(本文提供两种方案)
Swing窗口实现(5步速成)
步骤1:导入Swing包
import javax.swing.JFrame; // 主窗口类 import javax.swing.JLabel; // 文本标签(用于示例内容)
步骤2:继承JFrame创建窗口
public class SwingWindowExample extends JFrame {
public SwingWindowExample() {
setTitle("Swing窗口示例"); // 窗口标题
setSize(400, 300); // 宽400像素, 高300像素
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭时退出程序
// 添加窗口内容(示例:文本标签)
JLabel label = new JLabel("欢迎使用Swing窗口!", JLabel.CENTER);
add(label);
}
}
步骤3:在main方法中启动窗口
public static void main(String[] args) {
// 使用SwingUtilities确保线程安全
javax.swing.SwingUtilities.invokeLater(() -> {
SwingWindowExample frame = new SwingWindowExample();
frame.setVisible(true); // 显示窗口
});
}
运行效果

(显示居中文本的白色窗口,带标题栏和控制按钮)
JavaFX窗口实现(7步详解)
▶ 环境准备(JDK 11+)
- Maven依赖(pom.xml):
<dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>18</version> </dependency>
步骤1:导入JavaFX核心包
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.layout.StackPane; import javafx.stage.Stage;
步骤2:继承Application类
public class JavaFXWindowExample extends Application {
@Override
public void start(Stage primaryStage) {
// 创建内容容器和控件
Label label = new Label("JavaFX窗口已启动!");
StackPane root = new StackPane(label);
// 创建场景(内容区域)
Scene scene = new Scene(root, 400, 300);
// 配置舞台(窗口)
primaryStage.setTitle("JavaFX窗口示例");
primaryStage.setScene(scene);
primaryStage.show(); // 显示窗口
}
}
步骤3:启动应用
public static void main(String[] args) {
launch(args); // JavaFX专用启动方法
}
运行效果

(现代化扁平风格窗口,支持高清渲染)
常见问题解决方案
| 问题现象 | 原因 | 解决方案 |
|---|---|---|
java.lang.NoClassDefFoundError |
未导入JavaFX库 | 添加Maven依赖或手动导入JAR |
| 关闭窗口后进程不退 | 未设置关闭操作 | setDefaultCloseOperation(...) |
| JavaFX启动报错 | 未正确初始化工具包 | main方法首行加Application.launch(); |
最佳实践建议
-
线程安全
- Swing使用
SwingUtilities.invokeLater() - JavaFX操作必须在JavaFX应用线程
Platform.runLater(() -> { /* 更新UI代码 */ });
- Swing使用
-
窗口设计规范
- 设置最小尺寸:
setMinimumSize(300,200) - 添加窗口图标:
// Swing setIconImage(new ImageIcon("icon.png").getImage()); // JavaFX primaryStage.getIcons().add(new Image("file:icon.png"));
- 设置最小尺寸:
-
跨平台适配
- 使用
UIManager统一Swing风格:UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
- 使用
扩展应用场景
- 对话框窗口
// Swing确认对话框 JOptionPane.showConfirmDialog(this, "是否保存修改?");
- 多窗口管理
// JavaFX打开新窗口 Stage newStage = new Stage(); newStage.setScene(new Scene(new StackPane(), 300, 200)); newStage.show();
- 窗口事件监听
// 监听窗口关闭事件 primaryStage.setOnCloseRequest(event -> { System.out.println("窗口即将关闭"); // event.consume(); // 阻止关闭 });
掌握Swing与JavaFX的窗口创建是Java GUI开发的核心技能,建议初学者从Swing入手理解基础概念,再转向JavaFX开发现代化应用,实际开发中推荐:
- 简单工具开发 → 选择Swing(快速部署)
- 复杂商业应用 → 选择JavaFX(炫酷效果+多线程支持)
引用说明:
- Oracle官方Swing教程:https://docs.oracle.com/javase/tutorial/uiswing/
- JavaFX开源文档:https://openjfx.io/
- Java多线程GUI编程规范(Oracle Java Concurrency Guide)
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/12741.html