当前位置: 首页 > 知识库问答 >
问题:

MVC与JavaFX和FXML

鲁涵意
2023-03-14

如果我有一个使用FXML的JavaFX项目,我将如何构造它以遵守模型-视图-控制器模式?这就是我所假定的一般结构如下所示:

模型-基础程序(GUI表示的内容)。
视图-FXML文件。
控制器-FXML控制器。

问题摘要(请阅读全文):

  1. 如何构造JavaFX项目(它使用FXML来遵循MVC模式)?视图应该是FXML控制器类,然后我应该有一个主控制器类,以便FXML控制器从模型获取信息,主控制器处理操作事件?
  2. 在MVC模式中,主方法应该在哪里?
  3. JavaFX应用程序类应该是MVC模式的一部分,还是只需要初始化GUI?

共有1个答案

谷梁宝
2023-03-14

如何构造使用FXML来遵循MVC模式的JavaFX项目?视图应该是FXML控制器类,然后我应该有一个主控制器类,这样FXML控制器从模型获取信息,主控制器处理动作事件?

JavaFX和Swing都推动视图和控制器之间的紧密耦合,其理由是很难生成通用控制器。然而,MVC本身有一些解释,所以有点模糊。

鉴于视图和控制器紧密耦合的理由,您有一些选择。我会建议两个,也许其他人可以补充,甚至不同意。

然后,您可以根据需要从视图中的FXML访问任何节点,例如。

Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
Button example = (Button) root.lookup("#button"); // #button exists in FXMLDocument.fxml
example.setOnAction(e -> { myController.doSomething(); });

这为您提供了优势或指定自己的泛型控制器,并允许View类观察模型本身。

归根结底,最重要的是将模型与视图和控制器分开,因为模型是程序的核心。智能模型、瘦控制器、哑视图

是的,因为它是视野的一部分。参见我上面提到的两种方法。

 类似资料:
  • 每个fxml文件都分配了一个控制器,但我不认为这个控制器是MVC模式所说的控制器。我把它看作是某种ViewController,它保存对fxml对象(按钮、窗格等)的引用。 我的问题是:这个“ViewController”和真正的“Controller”之间的区别到底在哪里。什么对象应该做什么事情?在哪里设置ActionListeners?

  • 我有2个控制器和3个fxml文件。 1。控制器: MainController.java 在这个控制器中,我使用BorderPane创建舞台和场景。在BorderPane的中心,我想改变布局(GridPane,HBox等) java 在SecondController中,我想用帮助RadioButton更改borderPane MainController的中心。 2。fxml-file: 0.b

  • 我是GUI世界/OO设计模式的新手,我想在我的GUI应用程序中使用MVC模式,我读过一些关于MVC模式的教程,模型将包含数据,视图将包含可视元素,控制器将连接视图和模型。 我有一个包含ListView节点的视图,ListView将用来自Person类(模型)的名称填充。但有一件事我有点糊涂。 我想知道的是从文件加载数据是控制器的责任还是模型的责任??和名称的ObservableList:它应该存储

  • 我将马上讨论我真正的问题/问题,是否有任何方法访问HttpMessageConverter内部控制器处理程序方法上的注释?我很确定答案是否定的(在浏览了Spring的源代码之后)。 在使用MappingJacksonHttpMessageConverter时,是否有其他方法使用Jackson Mixins配对?我已经基于MappingJacksonHttpMessageConverter实现了自己

  • Spring Cloud Netflix包括RxJava。 RxJava是Reactive Extensions的Java VM实现:用于通过使用observable序列来构建异步和基于事件的程序的库。 Spring Cloud Netflix支持从Spring MVC控制器返回rx.Single对象。它还支持对服务器发送事件(SSE)使用rx.Observable对象。如果您的内部API已经使用

  • -它被调用了