MVP,JavaFx和组件引用

4 java model-view-controller design-patterns javafx

我研究了所有流行的GUI模式 - MVP,MVC,MVVM,最后我决定实现MVP(监督控制器).所以我有以下对象(!).Stage<-View<->Model.重要的是Stage!= View,这是另一个对象.在视图和模型数据之间绑定.此外,我有一个演示者(控制器)处理所有事件,并与视图和模型一起工作,所以View<-ViewInterface<-Controller->Model.现在的问题是如何在视图中引用标签,textAreas等.Javafx允许使用@FXML注释将这些组件注入控制器.但是,使用MVP我需要View中的这些组件,因为视图的所有逻辑都在View中,我不需要它们在控制器中.我所知道的唯一解决方案是:

public class MyView{
 private Button button;
 public MyView(){
  ...
  button=(Button) root.lookup("#myButton");
 }
}
Run Code Online (Sandbox Code Playgroud)

那是通过他们的ID获得参考.但是我不喜欢它.或者我做错了什么或者我理解错了但我认为存在更好的解决方案.请帮帮我找到它.

Alm*_*asB 8

JavaFX旨在与MVC模式一起使用.因此,使用MVC比使用MVP容易得多.在MVP中,Presenter负责格式化要显示的数据.在JavaFX中,它由View自动完成.以下是JavaFX MVC的快速概述:

模型 - 您在应用程序中使用的域数据/数据结构(例如,人员,雇主,课程等)

视图 - 应用程序及其模型的UI定义.创建视图的首选方法是通过一个FXML文件,它本质上是JavaFX MVC中的View.

控制器 - 模型视图之间的桥梁.代码通常在XController类中隔离(其中X是FXML View的名称).如果您需要自定义控制器,Controller的实例将自动注入FXMLLoader或手动完成.该班将有机会获得UI(视图)元素,以能够操纵不同的性质以及模型,以便它可以进行基于UI(操作视图)输入.Controller

综上所述,在JavaFX中你不需要拥有类View,View定义应该完全在FXML文件中.所有UI元素都应该注入@FXML到您的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

如果您需要帮助构建UI使用FXML: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/