11

我有基于 Web 的编程(php、jsf、...)的背景,以及使用 swing 和 swt 的最少背景。

目前我正在为一个新的桌面应用程序寻找 java fx 2.x,我想知道关于构建实际 GUI 的最佳实践。我可以使用 fxml 进行声明性路线,也可以使用程序性路线。目前我正在做一些快速原型设计,但我想知道是否有令人信服的理由使用 fxml。

更新

最后,我为一个中等规模的项目选择了 FXML 路线,尽管场景构建器 beta 在我的 linux 系统上仍然有些不稳定,但事实证明它比原始程序原型要好得多。到目前为止,最大的优势是许多元素(尤其是 hbox、vbox、标签、选项卡……)不再使我的代码混乱,因为它们只存在于 fxml 中。

4

4 回答 4

16

甲骨文建议

请参阅 Oracle 建议:

  1. 为什么使用 FXML
  2. 实施 JavaFX 最佳实践

Oracle 确实建议通过 Java API 使用 FXML 进行布局定义。

JavaFX 的替代声明性技术

JavaFX 中的其他声明性部分是CSS3D 模型

JavaFX Builder API是一种半声明性方法,但您可能希望避免这种情况,因为将来的 JavaFX 版本中将不推荐使用 builder api

此外,如果您使用其他语言进行编程,其中一些会嵌入用于 JavaFX 开发的声明性领域特定语言 (DSL)(例如ScalaFXGroovyFX)。

一般来说,对于大多数 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。

于 2013-04-23T23:04:53.783 回答
2

我使用 fxml 的原因是它可以由 Scene Builder 生成。我不想手动摆弄布局...

于 2013-04-23T07:14:06.897 回答
2

如果您将布局 (FXML) 与应用程序代码分开,您可以要求一些 UX 人员仅使用 SceneBuilder 来处理布局,而不是要求他们使用整个 IDE。

于 2013-04-23T08:50:26.863 回答
1

尽管如此,SceneBuilder 还不够完整,无法使用它。我们必须回到手中的 FXML 来了解细节,这并不好。

SceneBuilder 中很少有带有大而详细的 FXML 文件的小错误。

Oracle 必须更新 SceneBuilder 以确保 JavaFX 健康!因为是很好看的工具!

于 2013-05-17T08:11:33.277 回答