【发布时间】:2017-07-21 06:40:29
【问题描述】:
我在 Swing 中编写了一些复杂的 GUI,但我从未使用过图形工具。我一直只是编写 Java 代码。现在我正在编写我的第一个 JavaFX GUI,它将是一个大型、复杂的 GUI,可以从云中获取所有数据值。我已经开始使用 SceneBuilder 进行初步工作,但遇到了SceneBuilder expects the .fxml and controller .java file to be in the same directory 的问题。似乎 SceneBuilder 开发人员认为 JavaFX 项目应该将所有文件放在一个目录中,就好像我们在构建玩具演示而不是工业级 GUI。
我还注意到,对于控制器类中应该包含的内容没有架构指南。如果有应该指导 .fxml 文件、控制器类和其他 GUI 类之间的设计和交互的模式和习惯用法,我无法找到它们。大型、复杂的 GUI 需要遵循经过验证的习惯用法,否则它们将变得无法维护。如果所有业务逻辑和与云的交互都在控制器类中,一个控制器类可能会变成几千行。然而,对于控制器类中应该包含哪些内容以及控制器类中不应包含哪些内容似乎没有指导方针。
我担心大型 fxml 结构变得无法维护。如果每个 .fxml 文件是一个场景,则 GUI 可以由多个 .fxml 文件组成,但我还没有找到很好的指导或如何做到这一点的示例。
在我将更多时间投入到 .fxml 之前,我现在很想放弃 SceneBuilder。其他人是否能够编写大型、复杂的 GUI,这些 GUI 依赖于使用 SceneBuilder 来自和写入云的所有数据?
谢谢。
【问题讨论】:
-
FXML-controller 习惯用法基本上是 Model-View-Presenter 模式的实现。 (FXML 是视图,“控制器”是演示者。模型是特定于应用程序的。)SceneBuilder itself(这是一个相当大的应用程序)是用 FXML 和控制器编写的。
-
您在这里有一些误解: 1. “SceneBuilder 开发人员似乎认为 JavaFX 项目应该将所有文件放在一个目录中。”不,根本不是:再次以 SceneBuilder 为例。最好(恕我直言)将每个 FXML、控制器和 CSS(如果需要)放在一个包中,但将 UI 的不同部分分成单独的包。但是你会拥有任意多个像这样具有任意结构的包。
-
"如果所有业务逻辑和与云的交互都在控制器类中,控制器类可能会变成几千行。"听起来您没有模型,而您的服务是从模型中分解出来的。也许oracle.com/technetwork/articles/java/javafxinteg-2062777.html 有帮助?或许还可以查看afterburner.adam-bien.com 和那里的链接,了解有关管理大型项目的一些想法。
-
如果您仔细查看 afterburner.adam-bien.com 中的视频,看起来 Adam Bien 的 .fxml 和 .css 文件与他的 .java 文件位于同一目录中。为了使用 SceneBuilder,我们是否应该打破 maven 标准目录布局?
-
我克隆了 SceneBuilder 源代码,它在 src/main/resources/ 下具有 .fxml 文件,但使用与相应 Java 类相同的包结构。我使用我的 .fxml 文件执行此操作(使用与我的控制器类使用相同的包结构)但 SceneBuilder 仍然找不到我的控制器。
标签: javafx-8 scenebuilder