我研究了所有流行的 GUI 模式 - MVP、MVC、MVVM,最后我决定实现 MVP(监督 Controller )。所以我有以下对象(!)。 Stage<-View<->Model
.重要的是Stage!=View,是另外一个对象。在 View 和模型数据绑定(bind)之间。此外,我有一个处理所有事件并使用 View 和模型的演示者( Controller ),所以 View<-ViewInterface<-Controller->Model
.
现在的问题是如何在 View 中获取对标签、文本区域等的引用。 Javafx 允许使用@FXML 注释将这些组件注入(inject) Controller 。但是,使用 MVP 我需要在 View 中使用这些组件,因为 View 的所有逻辑都在 View 中,我不需要在 Controller 中使用它们。我知道的唯一解决方案是:
public class MyView{
private Button button;
public MyView(){
...
button=(Button) root.lookup("#myButton");
}
}
也就是通过ID获取引用。然而我不喜欢它。或者我做错了什么,或者我理解错了,但我认为存在更好的解决方案。请帮我找到它。
最佳答案
JavaFX 被设计为使用 MVC 模式。因此,使用 MVC 比使用 MVP 容易得多。在 MVP 中,Presenter 负责格式化要显示的数据。在 JavaFX 中,它由 View 自动完成。以下是 JavaFX MVC 的快速概述:
模型 - 您在应用程序中使用的领域数据/数据结构(例如个人、雇主、类(class)作业等)
View - 应用程序及其模型的 UI 定义。创建 View 的首选方法是通过 FXML
文件,它本质上是 JavaFX MVC 中的 View 。
Controller - Model 和 View 之间的桥梁。代码通常隔离在 XController
类中(其中 X 是 FXML
View 的名称)。 Controller 的实例由 FXMLLoader
自动注入(inject),如果您需要自定义 Controller,也可以手动完成。 Controller
类将有权访问 UI(View)元素,以便能够操作不同的属性以及 Model,因此它可以根据 UI(View)输入执行操作。
总而言之,在 JavaFX 中你不需要有 View
类,View 定义应该完全在 FXML
文件中.所有 UI 元素都应使用 @FXML
注入(inject)到您的 Controller
类中。如果您绝对必须使用 MVP,那么 AWT/Swing 或 MVP4j - http://www.findbestopensource.com/product/mvp4j可能是更好的选择。
有关更详细的解释,请查看 JavaFX 的官方 Oracle 教程:http://docs.oracle.com/javase/8/javafx/get-started-tutorial/jfx-overview.htm
如果您需要使用 FXML
构建 UI 方面的帮助:http://docs.oracle.com/javase/8/javafx/api/javafx/fxml/doc-files/introduction_to_fxml.html
本教程涵盖了 JavaFX 中 MVC 的基础知识以及每个组件如何与其他组件通信:http://code.makery.ch/library/javafx-8-tutorial/part1/
关于java - MVP、JavaFx 和组件引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30554694/