程序结构
Stage、Scene和Node是构建用户界面的三个基本组成部分,它们之间存在着紧密而明确的关系,共同构成了应用程序的可视化界面。
Stage、Scene和Node关系描述:
- Stage(舞台):
一个JavaFX应用程序通常会创建一个或多个Stage。
每个Stage代表一个独立的窗口,具有自己的属性,如标题、大小、图标等。
一个Stage可以设置一个Scene作为其内容容器。
- Scene(场景):
一个Stage可以设置一个Scene作为其内容容器。
一个Scene是一个独立的画布,用于承载应用程序的界面。
一个Scene可以包含多个Node。
- Node(节点):
一个Scene可以包含多个Node。
Node是JavaFX场景图的基本构建块,可以是各种控件、布局或图形。
通过设置Scene的根节点,可以布局和组织Node的结构
应用程序的结构通常遵循经典的MVC(Model-View-Controller)设计模式,以促进代码的可维护性、可扩展性和模块化。
示例结构目录
1.Main Class
- 功能:这是应用程序的入口点,负责初始化JavaFX环境,创建主舞台(Stage),并加载UI界面。
- 示例代码:
package com.example.mvcdemo;
import com.example.mvcdemo.controller.CalculatorViewController;
import com.example.mvcdemo.model.NumberAdder;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
FXMLLoader loader = new FXMLLoader(getClass().getResource("CalculatorView.fxml"));
Parent root = loader.load();
CalculatorViewController controller = loader.getController();
controller.setModel(new NumberAdder());
primaryStage.setTitle("MVC Demo");
primaryStage.setScene(new Scene(root, 300, 200));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
2.View (用户界面 - UI)
- 功能:定义应用程序的外观和用户交互部分。这通常涉及FXML文件和对应的控制器类。
FXML文件:使用XML语法描述用户界面布局和组件。
Controller类:与FXML文件关联,处理事件和更新界面。
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.VBox?>
<VBox xmlns="http://javafx.com/javafx/16" xmlns:fx="http://javafx.com/fxml/1">
<TextField fx:id="number1Field" promptText="Number 1"/>
<TextField fx:id="number2Field" promptText="Number 2"/>
<Button text="Add" onAction="#onAddButtonClick"/>
<Label fx:id="resultLabel" text="Result:"/>
</VBox>
3.Model (数据模型)
- 功能:封装应用程序的数据逻辑和业务规则。它不关心用户界面或用户输入,只关注数据的管理、验证和存储。
package com.example.mvcdemo.model;
public class NumberAdder {
public int add(int a, int b) {
return a + b;
}
}
4. Controller (控制器)
功能:作为Model和View之间的桥梁,处理用户输入,调用Model中的方法来更新数据,并根据数据变化更新View。在JavaFX中,每个视图组件(如窗口、对话框)通常有一个对应的控制器类
package com.example.mvcdemo.controller;
import com.example.mvcdemo.model.NumberAdder;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
public class CalculatorViewController {
private NumberAdder model;
@FXML
private TextField number1Field;
@FXML
private TextField number2Field;
@FXML
private Label resultLabel;
public void setModel(NumberAdder model) {
this.model = model;
}
@FXML
private void onAddButtonClick() {
try {
int num1 = Integer.parseInt(number1Field.getText());
int num2 = Integer.parseInt(number2Field.getText());
int sum = model.add(num1, num2);
resultLabel.setText("Result: " + sum);
} catch (NumberFormatException e) {
resultLabel.setText("Error: Invalid input.");
}
}
}
注意事项
- 使用FXMLLoader来加载FXML文件并实例化对应的控制器。
- 利用注解@FXML来标记控制器类中与FXML文件中元素绑定的字段和方法。