源本科技 | 码上会

JavaFX 飞机大战(前置知识)

2026/02/25
88
0

概述

  • 先下载相关工具和游戏程序看效果,所需资源已提供在程序安装包内

前置知识

Maven

Maven 是一个开源的项目管理工具,用于构建、发布和管理 Java 项目。它通过定义项目对象模型(POM)来管理项目的构建、依赖和文档等方面的配置,提供了一种统一的项目结构和构建生命周期,简化了项目的管理和维护。Maven 通过中央仓库管理依赖,支持自动化构建、测试和部署,使项目开发更加规范和可维护

https://maven.apache.org

标准化项目结构

每一个开发工具(IDE)都有自己不同的项目结构,它们互相之间不通用。我在 Eclipse 中创建的目录,无法在 IDEA 中进行使用,这就造成了很大的不方便。Maven 提供了一套标准化的项目结构,所有的 IDE 使用 Maven 构建的项目完全一样,所以 IDE 创建的 Maven 项目可以通用

├─src                        	# 源代码和测试代码
│  ├─main                    # 源代码
│  │  ├─java                 	# 源代码 Java
│  │  ├─resources            	# 源代码 配置文件
│  │  └─webapp               	# Web 项目代码
│  └─test                    # 测试代码
│      ├─java                	# 测试代码 Java
│      └─resources           	# 测试代码 配置文件
├─pom.xml                    # 项目核心配置文件

标准化构建流程

我们开发了一套系统,代码需要进行编译、测试、打包、发布,这些操作如果需要反复进行就显得特别麻烦,而 Maven 提供了一套简单的命令来完成项目构建

安装流程

https://maven.apache.org/download.cgi

解压缩到没有中文、特殊字符的路径下

  • 比如D:\apache-maven-3.9.12

  • 目录结构如下

    • bin: 包含 Maven 命令行工具的可执行文件,如 mvn

    • conf: 存放 Maven 的全局配置文件,如 settings.xml

    • lib: 包含 Maven 运行所需的 JAR 文件,包括 Maven 核心模块和插件

    • repository: 本地仓库,用于存储项目依赖的 JAR 文件

    • boot: 包含用于启动 Maven 的 JAR 文件

    • logs: 存放 Maven 执行时生成的日志文件

配置环境变量

  • 在系统变量处新建一个变量 MAVEN_HOME

    • MAVEN_HOME

    • D:\apache-maven-3.9.12

  • 配置 PATH 变量

    • %MAVEN_HOME%\bin

验证安装

  • 打开命令提示符进行验证,输入 mvn -v

配置本地仓库

修改 conf/settings.xml 中的 <localRepository> 为一个指定目录作为本地仓库,用来存储 jar 包

注意:替换为对应的下载版本

<localRepository>D:\apache-maven-3.9.12\repo</localRepository>

配置阿里云私服

中央仓库在国外,所以下载 jar 包速度可能比较慢,而阿里公司提供了一个远程仓库,里面基本也都有开源项目的 jar 包。修改 conf/settings.xml 中的 <mirrors> 标签,为其添加如下子标签:

<mirror>  
    <id>alimaven</id>  
    <name>aliyun maven</name>  
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf> 
</mirror>

常用命令

  • compile :编译

  • clean:清理

  • test:测试

  • package:打包

  • install:安装

配置 IDEA

  • IDEA 中,点击 文件 - 设置 - 搜索 Maven

JavaSE

注意: 开发基于 JDK17 版本

  • 熟悉 Java 语法和基础概念(如类、对象、继承、多态、接口等)

  • 理解异常处理、泛型、集合框架(如 List、Set、Map 等)

  • 熟悉常用的 Java 标准类库(如 java.lang、java.util、java.io 等)

  • 理解输入输出流的基本概念

面向对象

  • 理解面向对象编程的基本原则(如封装、继承、多态、抽象)

  • 能够设计和实现基于类和对象的程序

事件驱动编程

  • 理解事件处理机制,能够编写事件处理器

  • 熟悉观察者模式,因为 JavaFX 的事件处理机制与其类似

CSS

  • 基本了解 CSS 的语法和使用方法,因为 JavaFX 支持使用 CSS 来进行界面样式的定制

多线程编程

  • 理解 Java 中的多线程编程,尤其是在 UI 应用中如何处理耗时任务以避免阻塞主线程

开发工具

  • 熟悉集成开发环境(IDE)如 IntelliJ IDEA

  • 会使用构建工具如 Maven 来管理项目依赖

基础图形学知识

  • 对于需要实现复杂图形效果的应用,理解基本的图形学概念会有帮助,如坐标系、颜色模型等

JavaFX

JavaFX 是一个用于创建桌面应用和富互联网应用(RIA)的 Java 框架。它提供了强大的 GUI 控件和媒体功能,支持 2D 和 3D 图形以及动画

架构

JavaFX 包含以下几个核心组件:

  • Stage:应用程序的主窗口

  • Scene:包含应用程序界面的容器,可以将其设置到 Stage 上

  • Nodes:构成用户界面的基本元素,如按钮、标签、文本框等

基本概念

  • Application

    • 每个 JavaFX 应用程序都必须继承自 javafx.application.Application 类,并实现 start(Stage primaryStage) 方法

    • launch(args) 方法用于启动 JavaFX 应用

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.stage.Stage;

public class HelloWorld extends Application {
    @Override
    public void start(Stage primaryStage) {
        Label label = new Label("Hello, JavaFX!");
        Scene scene = new Scene(label, 400, 200);
        primaryStage.setScene(scene);
        primaryStage.setTitle("Hello World");
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
  • Stage 和 Scene

    • Stage:主窗口或对话框,可以是主舞台(primary stage)或辅助舞台(secondary stage)

    • Scene:包含用户界面的容器,可以包含多个节点

  • Nodes

    • 所有 UI 控件和布局管理器都是 Node 的子类

    • 常见控件包括 Button、Label、TextField 等

    • 布局管理器(如 HBox、VBox、StackPane)用于安排节点的位置

  • 事件处理

    • JavaFX 使用事件驱动模型来处理用户交互

    • 可以为节点添加事件处理器,如点击按钮时执行某个操作

Button btn = new Button("Click Me");
btn.setOnAction(event -> System.out.println("Button clicked!"));

模块化

Java 9 引入了模块系统(Project Jigsaw),模块化系统旨在帮助开发者更好地组织代码,提高应用程序的可维护性和安全性

  • 基本概念

    • 模块是包含一组相关包和资源的单元。每个模块都有一个唯一的名称

    • 模块可以包含代码(类、接口等)、数据(配置文件、资源文件等)和其他模块的依赖关系

  • module-info.java

    • 每个模块必须包含一个 module-info.java 文件,这是模块的声明文件

    • module-info.java 文件位于模块的根目录,用于定义模块的名称、依赖关系和对外暴露的包

module com.example.myapp {
    requires java.sql;
    exports com.example.myapp.api;
}
  • 构建和运行

# 编译
javac -d build --module-source-path src $(find src -name "*.java")

# 运行
java --module-path build -m com.example.myapp/com.example.myapp.MainClass