Oracle 建议
查看 Oracle 建议:
- Why use FXML
- Implementing JavaFX Best Practices
Oracle 确实建议通过 Java API 使用 FXML 进行布局定义。
JavaFX 的替代声明性技术
JavaFX 中的其他声明部分是 CSS 和 3D models
半声明性方法是JavaFX Builder API,但您可能希望避免使用the builder api will be deprecated in future JavaFX versions。
此外,如果您使用其他语言进行编程,其中一些会嵌入用于 JavaFX 开发的声明性领域特定语言 (DSL)(例如 ScalaFX 或 GroovyFX)。
一般来说,对于大多数 UI 标记任务,声明式语法的使用主要胜过过程式编程。这从 HTML、CSS、FXML、XAML、MXML、XUL 等技术的突出地位可见一斑。
低级编程
对于开发自定义 JavaFX 控件、操作 JavaFX 画布或处理图像数据等低级任务,程序 Java API 最适合而不是使用声明性 FXML - JavaFX codebase in openjfx 都没有使用 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。