在Java中创建图形用户界面(GUI)窗口,主要依赖于Swing和JavaFX两大技术框架,Swing是Java早期提供的GUI工具包,基于AWT构建,具有跨平台特性;而JavaFX是后来推出的现代化GUI框架,支持CSS样式、FXML布局和丰富的媒体功能,本文将详细介绍使用这两种技术创建窗口的方法及核心步骤。

使用Swing创建窗口
Swing是Java开发传统桌面应用的常用选择,其核心组件包含在javax.swing包中,创建Swing窗口的基本流程如下:
-
继承JFrame类
JFrame是Swing中的顶层容器,相当于应用程序的主窗口,通过继承JFrame可以自定义窗口行为和属性。public class MyWindow extends JFrame { public MyWindow() { // 设置窗口标题 setTitle("我的第一个Swing窗口"); // 设置窗口大小(宽800px,高600px) setSize(800, 600); // 设置窗口关闭操作(退出程序) setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗口居中显示 setLocationRelativeTo(null); } } -
添加组件与布局管理
窗口创建后,需要通过getContentPane()面板,并使用布局管理器(如BorderLayout、FlowLayout)组织组件,例如添加一个按钮:// 获取内容面板并设置布局 JPanel panel = new JPanel(); panel.setLayout(new FlowLayout()); // 创建按钮并添加到面板 JButton button = new JButton("点击我"); panel.add(button); // 将面板添加到窗口 add(panel); -
显示窗口
在主方法中创建窗口实例并调用setVisible(true)显示窗口:
public static void main(String[] args) { // 确保GUI创建在事件分发线程中 SwingUtilities.invokeLater(() -> { MyWindow window = new MyWindow(); window.setVisible(true); }); }
使用JavaFX创建窗口
JavaFX是更现代的GUI框架,支持声明式UI设计和更丰富的视觉效果,创建JavaFX窗口的步骤如下:
-
创建主类并继承Application
JavaFX应用程序需要继承javafx.application.Application类,并重写start方法:import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.StackPane; import javafx.stage.Stage; public class MyJavaFXApp extends Application { @Override public void start(Stage primaryStage) { // 创建根节点(使用StackPane布局) StackPane root = new StackPane(); // 创建按钮并添加到根节点 Button button = new Button("JavaFX按钮"); root.getChildren().add(button); // 创建场景(大小800x600) Scene scene = new Scene(root, 800, 600); // 设置窗口标题并显示 primaryStage.setTitle("我的JavaFX窗口"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); // 启动JavaFX应用 } } -
关键组件说明
Stage:JavaFX的顶级窗口容器,对应Swing中的JFrame。Scene:场景,包含窗口中的所有视觉元素,相当于Swing中的内容面板。- 布局容器:如StackPane、BorderPane、VBox等,用于组织组件位置。
-
FXML与CSS分离
JavaFX支持通过FXML(基于XML的UI描述语言)分离界面逻辑与样式,
<!-- sample.fxml --> <?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.control.Button?> <?import javafx.scene.layout.StackPane?> <StackPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> <Button text="FXML按钮" /> </StackPane>在代码中加载FXML文件:
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml")); Scene scene = new Scene(root);
注意事项
- 线程安全:Swing和JavaFX的GUI操作必须在特定线程中执行(Swing使用EDT,JavaFX使用JavaFX Application Thread)。
- 依赖管理:JavaFX需要单独添加依赖(如Maven中的
org.openjfx:javafx-controls模块)。 - 跨平台兼容性:两种框架均支持Windows、macOS和Linux,但需注意不同系统的外观差异。
通过以上方法,开发者可以根据项目需求选择Swing或JavaFX快速构建功能完善的Java桌面应用程序窗口。




















