MVC模式JavaFX中带场景生成器(MVC Pattern in JavaFX With Scen

2019-07-29 17:43发布

我是新来的JavaFX和我在努力创造鉴于我目前的设置适当的MVC架构。 我点击在一起使用场景生成器的用户界面和指定的控制器类。

启动:

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();
    }
}

和控制器类包含代码的其余部分。

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

我的教授问我进一步分离这个应用程序的问题和责任。 该控制器不仅管理状态,并与后台聊天,而且还更新视图。

我的第一反应是,让控制器类成为了查看和创建两个其他类控制器和模型。

然而,我在如何将这些碎片连接的损失。 我从来不需要实例化视图,所以我可以通过我的控制器,例如没有查看实例。 接下来,我试图把他们都单身,只是让控制器在运行时获取它们,但是这给了我一个错误。

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模式? 需要不同的架构?

Answer 1:

您的,
- 视图是一个初级Stage通过在启动时JavaFX平台提供。 这个阶段有唯一的Scene (已创建和设置),这反过来有一个父节点的内容root (您的变量)。 这root节点由FXMLLoader集和表示在“PortalUI.fxml”文件中定义的布局/节点的结构。
换句话说Stage -> Scene -> PortalUI.fxml(root)将定义视图的一部分。

- 控制器是一个实现类Initializable和您在PortalUI.fxml文件, 外汇指定:控制器=”“属性。 您指定有类(PortalController我想)将被创建并调用它的initialize()由FXMLLoader方法。 即控制器将创建加载PortalUI.fxml文件时,这样你就不会需要创建和自己初始化。 从FXMLLoader得到控制器的创建/初始化实例看访问FXML控制器类 。

- 模型是由控制器存储和管理的基本数据结构。 它可以是表示“数据”任何东西。 例如,人,PortalInfo等类。



文章来源: MVC Pattern in JavaFX With Scene Builder