# graphics-demo **Repository Path**: kunjs/graphics-demo ## Basic Information - **Project Name**: graphics-demo - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 33 - **Created**: 2025-12-04 - **Last Updated**: 2025-12-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Graphics Demo 这是一个Java图形界面演示项目,展示了使用三种不同的Java GUI技术创建相同功能的桌面应用程序。 ## 项目概述 本项目包含三个独立的GUI示例程序,每个程序都实现了相同的功能: - 提供一个下拉选择框,包含四种编程语言选项 - 点击按钮后显示对应编程语言的介绍信息 - 使用不同的GUI技术实现相同的用户界面 ## 技术栈 - **Java 17** - 主要编程语言 - **Apache Maven** - 项目构建和依赖管理 - **JavaFX 21.0.4** - 现代GUI框架 - **Swing** - 传统GUI框架 - **AWT** - 抽象窗口工具包 ## 项目结构 ``` graphics-demo/ ├── pom.xml # Maven项目配置文件 ├── .gitignore # Git忽略文件 ├── README.md # 项目说明文档 └── src/ └── main/ ├── java/ │ ├── AWTExample.java # AWT实现示例 │ ├── SwingExample.java # Swing实现示例 │ ├── JavaFXExample.java # JavaFX实现示例 │ └── com/ │ └── example/ │ └── javafx/ │ ├── JavaFXController.java # FXML控制器 │ └── JavaFXFXMLExample.java # FXML版JavaFX示例 └── resources/ └── com/ └── example/ └── javafx/ └── javafx_example.fxml # FXML布局文件 ``` ## 示例程序说明 ### 1. AWT示例 (AWTExample.java) **特点:** - 使用Java最早的GUI框架AWT - 原生操作系统组件 - 轻量级但功能相对有限 **主要组件:** - `Frame` - 主窗口 - `Choice` - 下拉选择框 - `TextArea` - 文本显示区域 - `Button` - 操作按钮 ### 2. Swing示例 (SwingExample.java) **特点:** - 使用Swing框架,纯Java实现 - 更丰富的组件和更好的外观 - 支持更复杂的布局和事件处理 **主要组件:** - `JFrame` - 主窗口 - `JComboBox` - 下拉选择框 - `JTextArea` - 文本显示区域(带滚动条) - `JButton` - 操作按钮 ### 3. JavaFX示例 (JavaFXExample.java) **特点:** - 使用现代JavaFX框架 - 支持CSS样式和动画效果 - 更好的性能和现代化的UI设计 - 传统代码方式创建UI组件 **主要组件:** - `Stage` - 主窗口 - `ComboBox` - 下拉选择框 - `TextArea` - 文本显示区域 - `Button` - 操作按钮 - `VBox` 和 `HBox` - 现代布局容器 ### 4. JavaFX FXML示例 (JavaFXFXMLExample.java) **特点:** - 使用FXML + Controller架构模式 - UI布局与业务逻辑分离 - 更好的代码组织和可维护性 - 支持可视化UI设计工具 **文件结构:** - `javafx_example.fxml` - XML格式的UI布局定义 - `JavaFXController.java` - 控制器类,处理UI事件和逻辑 - `JavaFXFXMLExample.java` - 主应用程序类,加载FXML文件 **主要优势:** - **分离关注点** - UI设计和业务逻辑分离 - **可维护性** - 更容易修改UI布局而不影响逻辑 - **团队协作** - 设计师和开发者可以并行工作 - **可重用性** - FXML文件可以在不同场景中重用 ## 环境要求 - **JDK 17** 或更高版本 - **Apache Maven 3.6+** - **JavaFX SDK** (用于JavaFX示例) ## 安装和运行 ### 1. 克隆项目 ```bash git clone cd graphics-demo ``` ### 2. 编译项目 ```bash mvn clean compile ``` ### 3. 运行示例程序 #### 运行AWT示例 ```bash mvn exec:java -Dexec.mainClass="AWTExample" ``` #### 运行Swing示例 ```bash mvn exec:java -Dexec.mainClass="SwingExample" ``` #### 运行JavaFX示例 **方式一:使用javafx插件(推荐)** ```bash mvn javafx:run ``` **方式二:使用exec插件** ```bash mvn exec:java -Dexec.mainClass="JavaFXExample" ``` #### 运行JavaFX FXML示例 **方式一:使用exec插件(推荐)** ```bash mvn exec:java ``` **方式二:指定完整主类名** ```bash mvn exec:java -Dexec.mainClass="com.example.javafx.JavaFXFXMLExample" ``` ## 功能演示 所有三个示例程序都提供相同的功能: 1. **选择编程语言** - 从下拉框中选择一种编程语言 2. **查看介绍** - 点击"显示内容"按钮查看该语言的详细介绍 3. **支持的编程语言:** - Java - 面向对象的跨平台语言 - Python - 简洁的解释型语言 - C++ - 高性能的系统编程语言 - JavaScript - Web开发核心语言 ## 技术对比 | 特性 | AWT | Swing | JavaFX | JavaFX + FXML | |---------------|-------|-----------|-----------|---------------| | 发布时间 | 1995 | 1997 | 2008 | 2008 | | 组件类型 | 原生 | 轻量级 | 轻量级 | 轻量级 | | 外观 | 依赖系统 | 可定制 | 现代化 | 现代化 | | 性能 | 较好 | 中等 | 优秀 | 优秀 | | CSS支持 | ❌ | ❌ | ✅ | ✅ | | 3D支持 | ❌ | ❌ | ✅ | ✅ | | UI分离 | ❌ | ❌ | ❌ | ✅ | | 可维护性 | 低 | 中等 | 高 | 很高 | | 推荐程度 | 不推荐 | 维护项目 | ✅ 推荐 | ✅✅ 最推荐 | ## 开发说明 ### 添加新的编程语言选项 要在所有四个示例中添加新的编程语言选项,需要修改以下文件: 1. **AWTExample.java** - 在`choice.add()`方法中添加新选项 2. **SwingExample.java** - 在`comboBox.addItem()`方法中添加新选项 3. **JavaFXExample.java** - 在`comboBox.getItems().addAll()`中添加新选项 4. **JavaFXController.java** - 在`initialize()`方法的`comboBox.getItems().addAll()`中添加新选项 同时需要在每个文件的switch语句中添加对应的case分支来处理新选项。对于FXML版本,需要修改`JavaFXController.java`中的`handleButtonAction()`方法。 ### 自定义样式 - **AWT**: 样式定制能力有限 - **Swing**: 可以通过UI Manager进行基本定制 - **JavaFX**: 支持完整的CSS样式定制 ## 故障排除 ### JavaFX运行问题 如果JavaFX示例无法运行,请检查: 1. 确保安装了JavaFX SDK 2. 检查JAVA_HOME环境变量设置 3. 确保Maven配置正确 ### 依赖问题 如果遇到依赖问题,运行: ```bash mvn clean install ``` ## 许可证 本项目仅用于学习和演示目的。 ## 贡献 欢迎提交Issue和Pull Request来改进这个演示项目。