在Java开发中,创建窗口应用程序是图形用户界面(GUI)开发的基础,Java提供了多种工具包来实现窗口功能,其中Swing和JavaFX是最主流的两种技术,本文将详细介绍如何使用这两种技术创建窗口,并涵盖基本组件布局、事件处理等核心知识点,帮助开发者快速上手Java窗口开发。

使用Swing创建窗口
Swing是Java早期推出的GUI工具包,以其跨平台性和丰富的组件库被广泛应用,创建Swing窗口通常需要继承JFrame类或直接实例化,并通过设置窗口属性实现基本功能。
基础窗口构建
需要导入Swing相关的核心类,如javax.swing.JFrame、javax.swing.JPanel等,以下是一个简单的窗口创建示例:
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.FlowLayout;
public class SimpleWindow {
public static void main(String[] args) {
// 创建JFrame实例
JFrame frame = new JFrame("我的第一个窗口");
frame.setSize(400, 300); // 设置窗口大小
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置关闭操作
frame.setLocationRelativeTo(null); // 窗口居中显示
// 添加组件
JLabel label = new JLabel("Hello, Swing!");
frame.setLayout(new FlowLayout()); // 设置布局管理器
frame.add(label);
frame.setVisible(true); // 设置窗口可见
}
}
上述代码中,JFrame是窗口的顶级容器,setSize()用于设置窗口宽高,setDefaultCloseOperation()定义关闭窗口时的操作(EXIT_ON_CLOSE表示退出程序),setVisible(true)则是显示窗口的关键。
布局管理器
Swing提供了多种布局管理器,如FlowLayout(流式布局)、BorderLayout(边界布局)、GridLayout(网格布局)等,用于控制组件在窗口中的排列方式,使用BorderLayout时,可将窗口分为北、南、东、西、中五个区域:

frame.setLayout(new BorderLayout());
frame.add(new JButton("北"), BorderLayout.NORTH);
frame.add(new JButton("南"), BorderLayout.SOUTH);
事件处理
窗口交互需要事件处理机制,Swing通过监听器(Listener)实现,例如为按钮添加点击事件:
JButton button = new JButton("点击我");
button.addActionListener(e -> System.out.println("按钮被点击了!"));
frame.add(button);
使用JavaFX创建窗口
JavaFX是Java推出的新一代GUI工具包,相比Swing具有更现代的视觉效果和更强的功能支持,JavaFX采用FXML+CSS分离布局与样式,适合开发复杂的应用程序。
基础窗口构建
JavaFX的窗口通过Stage(舞台)和Scene(场景)实现。Stage相当于窗口本身,Scene是容器,用于放置UI组件,以下是基础示例:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class SimpleJavaFXWindow extends Application {
@Override
public void start(Stage primaryStage) {
Label label = new Label("Hello, JavaFX!");
StackPane root = new StackPane(); // 根容器
root.getChildren().add(label);
Scene scene = new Scene(root, 400, 300); // 创建场景
primaryStage.setTitle("JavaFX窗口");
primaryStage.setScene(scene); // 设置场景到舞台
primaryStage.show(); // 显示窗口
}
public static void main(String[] args) {
launch(args); // 启动JavaFX应用
}
}```
JavaFX应用程序需要继承`Application`类,并重写`start()`方法,通过`launch()`方法启动应用,JavaFX会自动调用`start()`方法初始化窗口。
#### 2. 布局与组件
JavaFX提供了丰富的布局组件,如`VBox`(垂直布局)、`HBox`(水平布局)、`GridPane`(网格布局)等,使用`VBox`排列多个组件:
```java
VBox vbox = new VBox(10); // 间距为10
vbox.getChildren().addAll(new Button("按钮1"), new Button("按钮2"), new Label("标签"));
Scene scene = new Scene(vbox, 300, 200);
样式与CSS
JavaFX支持通过CSS美化界面,例如为组件添加样式表:

label.setStyle("-fx-font-size: 18px; -fx-text-fill: blue;");
// 或加载外部CSS文件
primaryStage.getScene().getStylesheets().add("styles.css");
Swing与JavaFX的对比与选择
| 特性 | Swing | JavaFX |
|---|---|---|
| 发布时间 | 较早(JDK 1.2引入) | 较新(JDK 8开始集成) |
| 组件丰富度 | 基础组件完善,但视觉效果较传统 | 支持CSS样式、3D效果、图表等高级功能 |
| 布局方式 | 基于布局管理器 | 支持FXML布局与CSS样式分离 |
| 性能 | 跨平台但性能一般 | 硬件加速,性能更优 |
| 学习曲线 | 简单,适合快速开发 | 需要掌握FXML、CSS等,但功能更强大 |
选择建议:
- 如果开发简单的工具窗口或对兼容性要求较高(如需支持旧版JDK),可选择Swing;
- 如果追求现代化界面、复杂交互或多媒体支持,推荐使用JavaFX。
窗口开发的最佳实践
- 线程安全:Swing的UI操作必须在事件分发线程(EDT)中执行,JavaFX则需通过
Platform.runLater()更新UI; - 资源释放:关闭窗口时及时释放资源,如关闭数据库连接、停止定时器等;
- 响应式设计:通过布局管理器和组件适配,确保窗口在不同分辨率下正常显示;
- 模块化:将窗口拆分为多个面板(Panel),提高代码可维护性。
Java窗口开发是GUI应用的基础,Swing和JavaFX各有优势,开发者可根据项目需求选择合适的技术,掌握窗口创建、布局管理、事件处理等核心技能后,可进一步探索高级功能,如自定义组件、多窗口交互等,通过不断实践,能够熟练构建功能完善、界面美观的Java窗口应用程序。




















