[英]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
视图接口提供视图的意图。
例如:
具体视图是从 FXML 文件创建的。 控件的每个字段都使用@FXML 定义。 单击按钮时要触发的动作也是一个方法,并以@FXML 为前缀。
具体视图通过提供@FXML 字段和获取/设置方法之间的映射来实现接口。 触发方法只调用事件处理程序。
具体视图还负责创建演示者(将自身称为视图)。
这是重要的一点。 演示者对模型和视图进行操作。 它从存储库(模型)中检索数据,并将其格式化以在视图中显示。
为此,演示者应该能够调用视图以设置数据并检索用户更新后的数据。 这就是为什么演示者包含视图的引用。 但它也应该提供调用视图的事件处理程序时要完成的操作。
当用户单击“添加”按钮时,将调用与 FXML 绑定的方法。 此方法调用演示者设置的 EventHandler。 换句话说,presenter 负责将自己的方法注册到视图的 EventHandler。
最后,测试演示者只包括创建视图的模拟。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.