pershus/PortScanner
GitHub: pershus/PortScanner
这是一个用于教学目的的JavaFX项目骨架模板,帮助学生快速搭建桌面应用程序的基本结构。
Stars: 0 | Forks: 0
# TDT4100 项目 V2026 骨架项目
本仓库是 2026 年春季 TDT4100 项目的骨架项目。
我们在此创建了一个示例项目,旨在帮助你们快速启动自己的项目。
## 太长不看
在 `src/main/java/` 中创建一个属于你们项目的新文件夹。在该新文件夹中创建一个应用程序启动文件,例如 [ExampleProjectApp.java](src/main/java/exampleproject/ExampleProjectApp.java) 和一个控制器,例如 [ExampleProjectController.java](src/main/java/exampleproject/ExampleProjectController.java)。然后在 `src/main/resources/` 中创建一个与你们项目同名的新文件夹,并在该新文件夹中创建一个视图文件,例如 [App.fxml](src/main/resources/exampleproject/App.fxml)。
**或者**:将 "ExampleProject" 相关的文件和文件夹名称更改为你们的项目名称。
## 一些简要信息
现在,你们已经可以在 VS Code 中运行 [ExampleProjectApp.java](src/main/java/exampleproject/ExampleProjectApp.java) 文件来启动一个小型的计算器应用程序。
该文件是应用程序的“启动文件”。在这里设置应用程序的标题、要使用的 FXML 文件,并且它负责启动应用程序本身:
```
primaryStage.setTitle("Example App"); // Setter tittel på vinduet
primaryStage.setScene(new Scene(FXMLLoader.load(getClass().getResource("App.fxml")))); // Sier at appen skal bruke "App.fxml"
primaryStage.show(); // Viser vinduet
```
应用程序的控制器是 [ExampleProjectController.java](src/main/java/exampleproject/ExampleProjectController.java)。该文件是 FXML 文件与应用程序中使用的类之间的“纽带”。在这个示例项目中,它有两个方法:`initCalculator` 和 `handleButtonClick`。此外,它还有一些用 `@FXML` 注解的字段。这表明它们属于我们的 [FXML 文件](src/main/resources/exampleproject/App.fxml)。这里变量名很重要。例如,第 12 行的 `private Label result` 绑定到了 [FXML 文件](src/main/resources/exampleproject/App.fxml) 第 15 行的 `Label` 字段,因为后者有一个 `fx:id="result"`,而我们的变量名为 `result`:
```
@FXML
private Label result; // Fra ExampleProjectApp.java
// Fra App.fxml
```
`handleButtonClick` 方法也是如此,它同样用 `@FXML` 进行了注解。这样做是为了让我们能从 [FXML 文件](src/main/resources/exampleproject/App.fxml) 中“访问”这个方法。[FXML 文件](src/main/resources/exampleproject/App.fxml) 中的 `Button` 字段有一个 `onAction="#handleButtonClick"`,这意味着当我们点击按钮时,会用 `@FXML` 注解的 `handleButtonClick` 方法将被执行:
```
```
将[控制器](src/main/java/exampleproject/ExampleProjectController.java)和 [FXML 文件](src/main/resources/exampleproject/App.fxml) 连接在一起的关键是 [FXML 文件](src/main/resources/exampleproject/App.fxml) 中最外层元素的 `fx:controller='exampleproject.ExampleProjectController'` 属性。
```
```
因此,正如前面提到的,当我们在应用程序中点击按钮时,`handleButtonClick` 方法会被运行。在这个方法内部,首先发生的是我们实例化了一个新的[计算器](src/main/java/exampleproject/Calculator.java)。在创建计算器时,我们需要一个 `operator`(操作符)。我们通过用户在 `fx:id="operator"` 的 `TextField` 字段中输入的内容来获取它。由于我们已经创建了一个用 `@FXML` 注解的 `private TextField operator` 变量,它已经链接到了这个 `TextField` 字段,我们可以使用 `operator.getText()` 获取输入的文本。
```
initCalculator(operator.getText()); // Kaller på initCalculator som oppretter en ny kalkulator. Operator.getText() henter ut teksten som er skrevet inn i `operator`-feltet.
```
方法下面的部分也是类似的;我们从 `firstNumber` 和 `secondNumber` 中获取值。值得注意的是,它们是以 `String` 类型被提取出来的,但我们的计算器需要 `int` 类型。因此,我们将它们转换为整数。这里需要小心,因为用户输入的不一定是有效的数字。因此,我们将其包装在一个 `try/catch` 块中,以便在数字无效时发出通知。
除了所有这些,还创建了一个小的[示例测试文件](src/test/java/exampleproject/CalculatorTest.java)。这里没有什么特别的内容——它包含针对[计算器类](src/main/java/exampleproject/Calculator.java)构造函数的测试,以及针对其 `calculate` 方法的测试。你们为类编写的所有测试都应放在 `src/test/java//` 文件夹中。
## 开始你们自己的项目
1. 通过 [GitHub](https://git.ntnu.no/tdt4100/prosjekt-base/) 上的模板创建你自己的仓库。关于此操作的更详细说明可以在 Blackboard 的 Prosjekt->FAQ 下找到。
2. 邀请你的组员加入这个仓库,并给他们至少分配 `Developer` 角色(最好是 `Maintain`,但 `Admin` 也可以)。这可以在 Settings->Collaborators and teams->Add people 下完成。
3. 将项目克隆到你电脑上的某个位置。
4. 在 `src/main/java/` 中创建一个属于你们项目的新文件夹。
5. 在你们的新项目文件夹中创建一个应用程序启动文件,例如 [ExampleProjectApp.java](src/main/java/exampleproject/ExampleProjectApp.java) 和一个控制器,例如 [ExampleProjectController.java](src/main/java/exampleproject/ExampleProjectController.java)。
6. 在 `src/main/resources/` 中创建一个属于你们项目的新文件夹。
7. 在 `src/main/resources/` 下的新项目文件夹中创建一个 FXML 文件,例如 [App.fxml](src/main/resources/exampleproject/App.fxml)。
8. **切记** 在新 FXML 文件的最外层元素上添加 `fx:controller='.'`,否则应用程序将无法启动。
**或者**:将 "ExampleProject" 相关的文件和文件夹名称更改为你们的项目名称。
## 关键点提醒
| 关键点 | 描述 |
| ---------------------------------- | -------------------------------- |
| 提交截止日期 | 4月10日 |
| 在助教处的演示时间 | 4月17日 |
| 小组人数 | 1 或 2 人 |
### 建议的项目工作时段
| 周次 | 从 | 到 | 描述 |
| ----- | ---- | ---- | ------------------------------------ |
| 12 | 3/16 | 3/20 | 基础类和用户界面 |
| 13 | 3/23 | 3/27 | 存储和文件处理 |
| 14 | 3/30 | 4/3 | 复活节假期放松休息! |
| 15 | 4/6 | 4/10 | 完成应用程序及相关文档 |
**_祝好运_**
标签:FXML, GUI开发, JavaFX, JS文件枚举, MVC模式, NTNU, Spring 2026, TDT4100, VS Code, 域名枚举, 学生资源, 挪威科技大学, 控制器, 教育项目, 桌面应用, 示例项目, 编程入门, 蓝队工具, 计算器, 课程作业, 软件开发模板, 骨架代码