甲骨文建议
请参阅 Oracle 建议:
- 为什么使用 FXML
- 实施 JavaFX 最佳实践
Oracle 确实建议通过 Java API 使用 FXML 进行布局定义。
JavaFX 的替代声明性技术
JavaFX 中的其他声明性部分是CSS和3D 模型
JavaFX Builder API是一种半声明性方法,但您可能希望避免这种情况,因为将来的 JavaFX 版本中将不推荐使用 builder api。
此外,如果您使用其他语言进行编程,其中一些会嵌入用于 JavaFX 开发的声明性领域特定语言 (DSL)(例如ScalaFX或GroovyFX)。
一般来说,对于大多数 UI 标记任务,声明式语法的使用主要胜过过程式编程。这可以从 HTML、CSS、FXML、XAML、MXML、XUL 等技术的突出表现中看出。
低级编程
对于开发自定义 JavaFX 控件、操作 JavaFX 画布或处理图像数据等低级任务,程序 Java API 最适合而不是使用声明性 FXML——openjfx 中的JavaFX 代码库都不使用 FXML。
个人选择和建议
最后,这里没有正确的答案。选择权留给开发人员选择他们最喜欢的方法。
你也没有理由不能按照你认为合适的方式混合这两种风格。与混合了过程和声明性方法(例如 html + javascript + ajax)的东西相比,使用直接的声明性方法会给您留下非常严格的 UI(例如静态 html 页面) - JavaFX 也是如此在这种情况下用于 html 开发。
对于小程序,我喜欢在 IDE 中编写一些代码,编译和运行它,而无需处理基于 XML 的 FXML 和 Java 代码之间的上下文切换。但我发现这种仅程序化的方法并不能很好地扩展到更大的项目。将视图分离为 FXML 有助于强制分离关注点和模块化。在没有 FXML 要求的人为分离的情况下,将这些视图和逻辑关注点混合起来太容易了。
我不太喜欢 XML 作为 UI 布局语言。我认为来自过时 JavaFX 1.x 分支的现已失效的 FXD 格式要好得多。但是,FXML 是 JavaFX 2 中最容易访问和使用最广泛的声明性 UI 语法。
我经常将 CSS 与 JavaFX 程序一起使用,并且喜欢将它与 FXML 声明性代码和 Java API 过程代码一起使用。在我看来,将样式与代码分开至少与将布局与代码分开一样重要。
使用 CSS 时,最好将样式放在单独的样式表中,而不是在代码中内联样式。
正如另一个答案中所指出的,JavaFX SceneBuilder 可视化设计工具目前仅适用于 FXML,除此之外,这足以让许多人使用 FXML 来定义他们的 JavaFX UI。