java - MVP、JavaFx 和组件引用

标签 java design-patterns model-view-controller javafx

我研究了所有流行的 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 - ModelView 之间的桥梁。代码通常隔离在 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/

相关文章:

java - 如何将我的树结构转化为 Jtree?

java - 如何动态渲染 html 中的图像?

java - Calendar.MONTH 和内部工作

java - 从 Firestore 下载数据较晚

c# - 这是否符合任何已知的设计模式?

design-patterns - 构建器模式和模板方法之间的差异(构建器与模板)

c# - 哪种 C# 设计模式适合在 ASP.NET 中编写自定义工作流程

javascript - Extjs 3.2。 GridView -商店关联

java - Oracle ATG和Struts之间的区别?

javascript - 适合我的 js mvc 应用程序的文件结构