Java FX:声明性与程序性
我有基于网络的编程(php,jsf,…)的背景和摇摆和swt的最小背景。
目前我正在寻找一个新的桌面应用程序的java fx 2.x,我想知道有关构建实际GUI的最佳实践。 我可以用fxml去声明路线,或者我可以去程序路线。 目前对于一些快速原型设计我正在做后者,但我想知道是否有令人信服的理由使用fxml。
UPDATE
最后,我使用FXML路线进行平均大小的项目,即使场景构建器测试版在我的linux系统上仍然有些不稳定,但事实certificate它远远优于原始程序原型。 到目前为止,最大的优势是很多元素(尤其是hbox,vbox,标签,标签……)不再混乱我的代码,因为它们只存在于fxml中。
Oracle建议书
请参阅Oracle建议:
- 为什么要使用FXML
- 实施JavaFX最佳实践
Oracle确实推荐FXML用于Java API上的布局定义。
JavaFX的替代声明技术
JavaFX中的其他声明部分是CSS和3D模型
半声明性方法是JavaFX Builder API ,但您可能希望避免这种情况,因为在将来的JavaFX版本中将不推荐使用构建器API 。
此外,如果您使用其他语言编程,其中一些语言嵌入了用于JavaFX开发的声明性域特定语言(DSL)(例如ScalaFX或GroovyFX )。
通常,声明性语法的使用主要赢得了大多数UI标记任务的过程编程。 这可以通过HTML,CSS,FXML,XAML,MXML,XUL等技术的突出来看出。
低级编程
对于低级任务,例如开发自定义JavaFX控件,操作JavaFXcanvas或处理图像数据,过程Java API最适合而不是使用声明性FXML – openjfx中的JavaFX代码库都不使用FXML。
个人选择和建议
最后,这里没有正确的答案。 选择由开发人员选择他们最喜欢的方法。
也没有理由不按你认为合适的方式混合两种款式。 与混合使用过程和声明方法(例如html + javascript + ajax)的东西相比,使用直接声明方法会让您拥有一个非常严格的UI(例如静态html页面) – 对于JavaFX也是如此,因为它是对于这种情况下的html开发。
对于小程序,我喜欢在IDE中编写一些代码,编译和运行它,而不必处理基于XML的FXML和Java代码之间的上下文切换。 但我发现这种程序化的方法不容易扩展到大型项目。 将视图分离为FXML有助于强制关注和模块化的分离。 如果没有FXML要求的人为分离,很容易将这些视图和逻辑问题混合在一起。
我不太喜欢XML作为UI布局语言。 我认为现已废弃的FXD格式来自过时的JavaFX 1.x分支,远远优于它。 但是,FXML是JavaFX 2中最易访和最广泛使用的声明性UI语法。
我将CSS与JavaFX程序一起使用很多,并且喜欢将它与FXML声明代码和Java API程序代码一起使用。 在我看来,将样式与代码分开至少与将代码分开布局一样重要。
使用CSS时,最好将样式放在单独的样式表中,而不是在代码中内联样式。
正如另一个答案中所指出的,JavaFX SceneBuilder可视化设计工具目前仅适用于FXML,除了所有其他事项外,这足以让许多人使用FXML来定义他们的JavaFX UI。
我使用fxml的原因是它可以由Scene Builder生成。 我不想手工摆弄布局……
如果您正在将布局(FXML)与应用程序代码分开,那么您可以要求一些UX人员仅使用SceneBuilder来处理布局,而不是要求他们使用整个IDE。
然而,SceneBuilder还不够完整。 我们必须在手中返回FXML以获取详细信息,但这并不好。
在SceneBuilder中有很少的小错误,包含大而详细的FXML文件。
Oracle必须更新SceneBuilder以实现JavaFX健康! 因为非常好看的工具!
- 如何使用Selenium Webdriver处理浏览器级别的通知
- Java中的默认操作按钮图标
- Eclipse WTP部署构建路径依赖项
- Spring @Value注释总是评估为null?
- EclipseLinkJpaVendorAdapter而不是HibernateJpaVendorAdapter问题
- Tomcat,HTTP Keep-Alive和Java的HttpsUrlConnection
- 使用JPA和ManyToMany进行Spring启动:JsonIdentifyInfo无法正常工作
- Maven – 无法执行目标org.apache.maven.plugins:maven-clean-plugin:2.4.1:clean
- 在Java中使用XPath解析XML