繁体   English   中英

如何在 JavaFX 中实现 MVP

[英]How to implement MVP in JavaFX

不久之前,我开始寻找一种模式来将 UI 与我的应用程序逻辑分离。 我决定使用 MVP,但有一个我无法解决的重大问题。 如果实现应用程序的类是从静态方法启动的,我如何将演示者的实例注入视图中。 也没有选择启动实现应用程序的类的特定实例,因此构造函数中的参数是无用的。 另外我不使用 FXML,我的视图类是用 java 编码的。

PS:对不起我的英语,因为它不是我的母语

您可以将 Main.java 中的引用传递给 Presenter。 在主要做这个:

Presenter p = new Presenter(); // This is your Presenter class
p.setReference(this);          // Call a method in the presenter    

// and here is a method in Main.java just as an example
public StackPane getRootView(){
    return this.rootView;
}

然后在演示者中你有:

private Main main;

public void setReference (Main main) {
    this.main = main;
}

您的演示者现在可以调用 Main 中的方法,例如

StackPane sp = main.getRootView();

您也可以在 Presenter 的构造函数中执行此操作。

我写了一个示例代码来回答这个问题。

https://github.com/oerrien/JavaFX_Presenter.git

视图接口提供视图的意图。

例如:

  • 获取和设置文本
  • 获取和设置 result1
  • 获取和设置 result2
  • 获取和设置添加按钮的事件处理程序

    具体视图是从 FXML 文件创建的。 控件的每个字段都使用@FXML 定义。 单击按钮时要触发的动作也是一个方法,并以@FXML 为前缀。

    具体视图通过提供@FXML 字段和获取/设置方法之间的映射来实现接口。 触发方法只调用事件处理程序。

    具体视图还负责创建演示者(将自身称为视图)。

    这是重要的一点。 演示者对模型和视图进行操作。 它从存储库(模型)中检索数据,并将其格式化以在视图中显示。

    为此,演示者应该能够调用视图以设置数据并检索用户更新后的数据。 这就是为什么演示者包含视图的引用。 但它也应该提供调用视图的事件处理程序时要完成的操作。

    当用户单击“添加”按钮时,将调用与 FXML 绑定的方法。 此方法调用演示者设置的 EventHandler。 换句话说,presenter 负责将自己的方法注册到视图的 EventHandler。

    最后,测试演示者只包括创建视图的模拟。

  • 暂无
    暂无

    声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

     
    粤ICP备18138465号  © 2020-2024 STACKOOM.COM