2013-04-23 55 views
8

我有基于web的编程(php,jsf,...)和swing和swt最小背景的背景。Java FX:声明式与程序式

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

UPDATE

在我去了一个中等规模的项目,即使现场建设者测试仍然是我的Linux系统上有些不稳定的FXML路线年底,它已被证明是大大优于原始程序原型。到目前为止,最大的优势是很多元素(特别是hbox,vbox,labels,tabs,...)不再混乱我的代码,因为它们只存在于fxml中。

回答

12

甲骨文建议

参阅Oracle建议:

  1. Why use FXML
  2. Implementing JavaFX Best Practices

甲骨文不推荐布局定义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。

个人选择和咨询

最后,这里没有正确的答案。这个选择留给开发者选择他们最喜欢的方法。

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

对于小程序,我喜欢在IDE中编写一些代码,编译并运行它,而不必处理基于XML的FXML和Java代码之间的上下文切换。但是我发现这种只采用程序的方法并不能很好地适应大型项目。将视图分为FXML有助于实现关注点和模块化的分离。如果没有FXML所要求的人为分离,将这些观点和逻辑关注点混合起来是非常容易的。

我不太喜欢XML作为UI布局语言。我认为现在已经过时的JavaFX 1.x分支的FXD格式非常优秀。但是,FXML是JavaFX 2中最容易访问和广泛使用的声明性UI语法。

我在JavaFX程序中使用了很多CSS,并且喜欢在FXML声明性代码和Java API过程代码中使用它。在我看来,将代码与样式分离至少同样重要,因为它将代码与布局分开。

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

正如另一个答案中指出的那样,JavaFX SceneBuilder可视化设计工具目前仅适用于FXML,除此之外,许多人都有理由使用FXML来定义他们的JavaFX UI。

2

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

2

如果您将布局(FXML)与应用程序代码分开,那么您可以请求一些UX用户使用仅适用于SceneBuilder,而不是要求他们使用整个IDE。

1

尽管如此,SceneBuilder还不够完善。我们必须回到FXML手中来获取细节,但这并不好。

SceneBuilder中的一些小bug有很大的细节FXML文件。

Oracle必须更新SceneBuilder for JavaFX的健康状况!因为很好看的工具!