java - 带有 javaFX 的 MVC

标签 java model-view-controller javafx javafx-2

我正在为使用 javaFX 的 MVC 概念而苦苦挣扎。我正在使用 fxml 文件构建一个 javaFX 应用程序。

每个 fxml 文件都分配了一个 Controller ,但我不认为这个 Controller 是 MVC 模式所述的一个 Controller 。我认为它类似于某种 ViewController,它包含对 fxml 对象(按钮、 Pane 等)的引用。

我的问题是:这个“ViewController”和真正的“Controller”之间的区别到底在哪里。什么对象应该做什么事情?我在哪里设置例如 Action 监听器?

最佳答案

2022 年更新

关于这个主题的最佳文章是 Eden Coding 的:

最好的 StackOverflow 答案是:

多年前的原始答案如下。其中的一些信息仍然是相关的。某些链接和引用的框架不再可用或不再受支持。但是,您不需要 JavaFX 核心功能之外的框架来实现这些概念(如本次更新中的现代链接所示)。

关于 MVC 的思考

MVC 是一个定义非常松散的模式,它可以对 MVC 中的每一个事物(尤其是 Controller )所代表的含义进行(通常有些模糊)的解释。有一个很棒的discussion of the MVC architecture关于 Martin Fowler 的 GUI 工具包。

关于设计模式和 FXML

基于 JavaFX 核心 FXML 的处理被构建为更多的工具包,而不是完整的开发框架。这个想法是其他框架可以分层在 JavaFX 和 FXML 之上,底层的 JavaFX/FXML 实现和它们的 Controller 不会对更高级别的框架施加任何类型的议程或架构限制。

因此,基于 FXML 的核心处理及其 Controller 与 MVC 架构之间存在故意松散的类比和映射。

JavaFX and MVP – a smörgåsbord of design patterns进一步讨论。

考虑使用更高级别的框架

您可能会受益于采用“自以为是”的 JavaFX 框架,例如 afterburner.fx ,它利用 Controller 和 FXML,但提供了更多的刚性结构化框架。 Afterburner.fx 遵循 Model View Presenter (MVP) model .尽管 Afterburner.fx 提供了比普通核心 JavaFX+FXML 更多的功能和结构,但它通过添加一些您需要学习使用它的额外类和 API 以最小的方式做到这一点。

关于java - 带有 javaFX 的 MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23187932/

相关文章:

JavaFX - 如何在 Pane 中打开并显示图像?

javafx折线图排序数据

java - DoublePropertyBase 中的 get() 和 GetValue() 有什么区别?

java - Android - 任务 ':app:compileDebugJava' 执行失败,预期为 ';'

java - 对对象所做的任何更改也会更改当前对象

ruby-on-rails - Rails has_many :through association: save instance into join table

javafx - 如何在 JavaFX 中执行错误消息

java - java的for循环中发生了奇怪的事情

java - OSMDroid map 上的长按不起作用

c# - 让 HomeController 继承自具有 session 属性的 BaseController