# javafxTutorial **Repository Path**: daxiangFly/javafx-tutorial ## Basic Information - **Project Name**: javafxTutorial - **Description**: 通过javaFx学习Java程序开发 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-04 - **Last Updated**: 2026-03-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # JavaFX Hello World 项目 这是一个基于 **JavaFX** 和 **JDK 17** 构建的桌面应用程序示例。项目演示了如何通过 **Maven** 管理依赖,采用 **MVC 模式**(FXML + Controller)分离界面与逻辑,并实现了基础的交互功能。 ## 🛠 技术栈 * **开发语言**: Java 17 (LTS) * **构建工具**: Maven * **UI 框架**: JavaFX 17.0.10 * *注:版本特意选用了 17.0.10 以修复在 macOS 14+ 上可能出现的 `NSInternalInconsistencyException` 崩溃问题。* * **界面布局**: FXML (XML 格式,支持 Scene Builder 可视化编辑) ## 📂 项目结构 ```text helloworld/ ├── src/main/java/ │ ├── module-info.java # Java 模块定义,声明对 JavaFX 的依赖和权限 │ └── com/example/helloworld/ │ ├── HelloApplication.java # [Main] 程序入口,负责加载 FXML 和初始化窗口 │ └── HelloController.java # [Controller] 控制器,处理按钮点击等交互逻辑 ├── src/main/resources/com/example/helloworld/ │ └── hello-view.fxml # [View] 界面布局文件,定义了 Label 和 Button └── pom.xml # Maven 配置文件,管理依赖和构建插件 ``` ## 💡 核心技术逻辑 ### 1. 界面与逻辑分离 (MVC) 项目采用了现代 JavaFX 开发推荐的 **FXML** 方式,将界面设计与业务逻辑完全分离: * **View (视图)**: `hello-view.fxml` 使用 XML 描述界面。它定义了一个垂直布局容器 (`VBox`),其中包含: * 一个 `Label` (id: `helloText`):用于显示文本。 * 一个 `Button`:绑定了点击事件 (`onAction="#onHelloButtonClick"`)。 * **Controller (控制器)**: `HelloController.java` 是视图的后端逻辑。 * 使用 `@FXML` 注解将 Java 对象与 FXML 中的组件(`helloText`)绑定。 * 实现了 `onHelloButtonClick()` 方法来响应用户操作。 ### 2. 交互逻辑 在 `HelloController` 中,按钮点击事件实现了文本的**循环切换**逻辑: ```java @FXML protected void onHelloButtonClick() { // 判断当前文本内容,进行反向切换 if ("你好世界!".equals(helloText.getText())) { helloText.setText("Hello World"); } else { helloText.setText("你好世界!"); } } ``` ### 3. 模块化支持 (Java 9+) 为了兼容 JDK 9 及以上版本的模块化系统(JPMS),项目包含 `module-info.java`: * `requires javafx.controls` / `javafx.fxml`: 引入必要的 JavaFX 模块。 * `opens ... to javafx.fxml`: 允许 JavaFX 通过反射访问控制器类(这是 FXML 注入必须的)。 * `exports ...`: 导出包以便 JavaFX 启动器调用。 ## 🚀 运行指南 ### 环境要求 * JDK 17 或更高版本 * Maven 3.x ### 使用 IntelliJ IDEA 运行 1. 打开项目文件夹。 2. 等待 Maven 依赖下载完成。 3. 找到 `src/main/java/com/example/helloworld/HelloApplication.java`。 4. 点击 `main` 方法左侧的绿色运行图标即可启动。 ### 使用命令行运行 在项目根目录下执行: ```bash # 编译并运行 mvn clean javafx:run ``` ## 📝 常见问题 **Q: 为什么在 macOS 上运行时会崩溃?** A: 旧版本的 JavaFX (如 17.0.2) 在 macOS Sonoma (14.x) 及更新版本上存在兼容性问题。本项目已在 `pom.xml` 中将 JavaFX 版本升级至 `17.0.10`,完美解决了此问题。