环境准备
-
Java开发环境
确保已安装JDK(Java Development Kit)版本8或更高(推荐JDK 11+),可通过终端验证:java -version
-
开发工具
推荐使用IntelliJ IDEA、Eclipse或VS Code,它们提供GUI设计辅助功能。
使用Swing创建窗口(Java标准库)
Swing是Java的传统GUI库,适合简单应用,核心类是JFrame
。
步骤与代码示例
import javax.swing.*; public class SwingWindowExample { public static void main(String[] args) { // 在事件调度线程中运行GUI(线程安全) SwingUtilities.invokeLater(() -> { // 1. 创建JFrame窗口对象 JFrame frame = new JFrame("我的第一个窗口"); // 2. 设置窗口属性 frame.setSize(400, 300); // 宽400像素, 高300像素 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭时退出程序 frame.setLocationRelativeTo(null); // 窗口居中显示 // 3. 添加组件(例如标签) JLabel label = new JLabel("你好,世界!", SwingConstants.CENTER); frame.add(label); // 4. 显示窗口 frame.setVisible(true); }); } }
关键参数说明
setSize(int width, int height)
:设置窗口尺寸。setDefaultCloseOperation(int operation)
:JFrame.EXIT_ON_CLOSE
:关闭窗口时终止程序。JFrame.HIDE_ON_CLOSE
:仅隐藏窗口(默认)。
setLocationRelativeTo(null)
:窗口居中屏幕。
使用JavaFX创建窗口(现代推荐)
JavaFX是Swing的替代方案,提供更丰富的视觉效果,需JDK 11+。
步骤与代码示例
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.layout.StackPane; import javafx.stage.Stage; public class JavaFXWindowExample extends Application { @Override public void start(Stage primaryStage) { // 1. 创建内容组件 Label label = new Label("JavaFX窗口示例"); StackPane root = new StackPane(label); // 2. 创建场景(Scene)并设置尺寸 Scene scene = new Scene(root, 400, 300); // 3. 配置舞台(Stage) primaryStage.setTitle("JavaFX窗口"); primaryStage.setScene(scene); // 4. 显示窗口 primaryStage.show(); } public static void main(String[] args) { launch(args); // 启动JavaFX应用 } }
关键说明
- 继承
Application
类并重写start(Stage stage)
方法。 Stage
:顶级窗口容器。Scene
:存放所有UI组件的场景(需设置宽高)。
常见问题解决
-
窗口不显示?
- 检查
setVisible(true)
(Swing)或stage.show()
(JavaFX)是否被调用。 - 确保主线程未阻塞(Swing需用
SwingUtilities.invokeLater
)。
- 检查
-
窗口布局混乱?
- Swing中需使用布局管理器(如
BorderLayout
、GridLayout
)。 - JavaFX推荐用
VBox
、HBox
或GridPane
。
- Swing中需使用布局管理器(如
-
高分辨率屏幕模糊?
在main
方法开头添加(JavaFX):System.setProperty("prism.allowhidpi", "true");
选择Swing还是JavaFX?
特性 | Swing | JavaFX |
---|---|---|
适用场景 | 小型工具、旧系统维护 | 新项目、复杂动画/3D效果 |
学习曲线 | 简单 | 中等(需理解场景图结构) |
跨平台支持 | 完善(内置于JDK) | 需单独打包(JDK 11后移除内置) |
社区资源 | 丰富(文档多) | 逐渐增长(官方教程完善) |
- 初学者:从Swing入手(语法简单,调试方便)。
- 正式项目:优先选择JavaFX(性能优、功能强)。
- 最佳实践:
- 始终在GUI线程中操作组件(Swing用
SwingUtilities
,JavaFX用Platform.runLater
)。 - 使用IDE的可视化设计器(如IntelliJ的GUI Builder)提升效率。
- 始终在GUI线程中操作组件(Swing用
引用说明
本文代码基于Oracle官方文档:
- Swing Tutorial
- JavaFX Documentation
最佳实践参考自《Java核心技术 卷I》及Stack Overflow社区高票解决方案。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/24176.html