java - 带有 Scene Builder 的 JavaFX 中的 MVC 模式

标签 java model-view-controller architecture javafx

我是 JavaFX 的新手,正在努力根据我当前的设置创建合适的 MVC 架构。我使用 Scene Builder 单击了一个 UI 并指定了一个 Controller 类。

启动:

public class Portal extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("PortalUI.fxml"));

        stage.setTitle("Portal");
        stage.setScene(new Scene(root));
        stage.show();
    }
}

Controller 类包含其余代码。

public class AccommodationPortalView implements Initializable {
    @Override
    public void initialize(URL url, ResourceBundle resources) {
    // Work here.
    }
}

我的教授要求我进一步分离此应用程序的关注点和责任。 Controller 不仅管理状态和与后端对话,而且还更新 View。

我的第一 react 是让 Controller 类成为 View,并为 Controller 和 Model 创建另外两个类。

但是,我不知道如何连接这些片段。我从不需要实例化 View,因此没有 View 实例可以传递给我的 Controller,例如。接下来,我尝试将它们全部设为单例,并让 Controller 在运行时获取它们,但这给了我一个错误。

public class Portal extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("PortalUI.fxml"));

        stage.setTitle("Portal");
        stage.setScene(new Scene(root));
        stage.show();

        // Controller gets a View and Model instance in initialize();
        // Error: Instantiation and Runtime Exception...
        PortalController.INSTANCE.initialize();
    }
}

如何使用当前配置正确设置 MVC 模式?是否需要不同的架构?

最佳答案

你的,
-- View 是 JavaFX 平台在启动时提供的主要 Stage。这个阶段只有一个 Scene(您已创建并设置),它又具有一个父节点内容 root(您的变量)。此 root 节点由 FXMLLoader 设置,代表“PortalUI.fxml”文件中定义的布局/节点结构。
换句话说,Stage -> Scene -> PortalUI.fxml(root) 将定义 View 部分。

-- Controller 是实现 Initializable 的类,您在 PortalUI.fxml 文件中指定了 fx:controller=""属性。您在此处指定的类(我想是 PortalController)将由 FXMLLoader 创建并调用其 initialize() 方法。即Controller会在PortalUI.fxml文件加载时创建,不需要自己创建和初始化。要从 FXMLLoader 获取创建/初始化的 Controller 实例,请查看 Accessing FXML controller class .

-- Model 是 Controller 存储和管理的底层数据结构。它可以是代表“数据”的任何东西。例如Person、PortalInfo等类。

关于java - 带有 Scene Builder 的 JavaFX 中的 MVC 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10872444/

相关文章:

java - 比较和更新字符串

Linux 上的 Java 无法读取进程输入流

php - PHP OOP 中的属性与属性数组

java - 领域驱动设计——CQRS + ES的使用

architecture - Hadoop:作业在执行 map task 之前首先在哪里执行?

特定格式的JavaFX DatePicker getValue

python - mvc Controller 单一职责原则和POST请求

java - 如何在 Spring MVC 中调用 Controller 方法

php - php 网站的架构帮助

java - 在基于toplink和struts 2的应用程序中,即使提交数据后数据也会从数据库中消失