Java FX:声明性与程序性

时间:2013-04-23 05:40:45

标签: java javafx

我有基于网络编程(php,jsf,...)的背景和摇摆和swt的最小背景。

目前我正在查看java fx 2.x以获取新的桌面应用程序,并且我想知道有关构建实际GUI的最佳实践。我可以用fxml去声明路线,或者我可以去程序路线。目前我正在进行一些快速原型设计,但是我想知道是否有令人信服的理由使用fxml。

更新

最后,我使用FXML路线进行平均大小的项目,即使场景构建器beta在我的linux系统上仍然有些不稳定,但事实证明它远远优于原始程序原型。到目前为止,最大的优势是许多元素(尤其是hbox,vbox,标签,标签......)不再混乱我的代码,因为它们只存在于fxml中。

4 个答案:

答案 0 :(得分:16)

Oracle建议

请参阅Oracle建议:

  1. Why use FXML
  2. Implementing JavaFX Best Practices
  3. Oracle确实推荐FXML用于Java API上的布局定义。

    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。 / p>

    个人选择和建议

    最后,这里没有正确答案。选择由开发人员选择他们最喜欢的方法。

    也没有理由不能按照您认为合适的方式混合两种风格。使用直接声明式方法会让您拥有一个非常严格的UI(例如静态html页面),与混合了程序和声明方法(例如html + javascript + ajax)的东西相比 - 对于JavaFX来说也是如此,因为它是在这种情况下用于html开发。

    对于小程序,我喜欢在IDE中编写一些代码,编译和运行它,而不必处理基于XML的FXML和Java代码之间的上下文切换。但我发现这种仅限程序的方法很难很好地扩展到大型项目。将视图分成FXML有助于强制关注和模块化的分离。如果没有FXML要求的人为分离,很容易将这些视图和逻辑问题混合起来。

    我不太喜欢XML作为UI布局语言。我认为现已废弃的FXD格式来自过时的JavaFX 1.x分支,远远优于它。但是,FXML是JavaFX 2中最易访和最广泛使用的声明性UI语法。

    我在JavaFX程序中使用CSS很多,并且喜欢将它与FXML声明代码和Java API程序代码一起使用。在我看来,将样式与代码分开至少与将代码与代码分开一样重要。

    使用CSS时,最好将样式放在单独的样式表中,而不是在代码中内联样式。

    正如另一个答案中所指出的,JavaFX SceneBuilder可视化设计工具目前仅适用于FXML,除了所有其他事项外,这足以让许多人使用FXML来定义他们的JavaFX UI。

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

然而,SceneBuilder尚不足以完成它。我们必须在手中返回FXML以获取详细信息,但这并不好。

在SceneBuilder中有很少的小错误,包含大而详细的FXML文件。

Oracle必须更新SceneBuilder以实现JavaFX健康!因为非常好看的工具!