【问题标题】:Java FX: declarative vs proceduralJava FX:声明性与程序性
【发布时间】:2013-04-23 05:40:45
【问题描述】:

我有基于 Web 的编程(php、jsf、...)的背景,并且具有 Swing 和 swt 的最低背景。

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

更新

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

【问题讨论】:

    标签: java javafx


    【解决方案1】:

    Oracle 建议

    查看 Oracle 建议:

    1. Why use FXML
    2. Implementing JavaFX Best Practices

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

    JavaFX 的替代声明性技术

    JavaFX 中的其他声明部分是 CSS3D models

    半声明性方法是JavaFX Builder API,但您可能希望避免使用the builder api will be deprecated in future JavaFX versions

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          SceneBuilder 中的一些小错误包含大而详细的 FXML 文件。

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

          【讨论】:

            猜你喜欢
            • 2013-06-15
            • 1970-01-01
            • 2019-04-09
            • 2023-03-26
            • 1970-01-01
            • 1970-01-01
            • 2013-11-07
            • 1970-01-01
            • 2011-12-17
            相关资源
            最近更新 更多