繁体   English   中英

我们应该在JavaFX自定义控件中使用FXML吗?

[英]Should we use FXML in JavaFX custom controls or not?

似乎有点问这个,我认为使用FXML来编写我们的自定义组件显然是正确的方法。

但正如我们从ControlsFX,JFXextras甚至“掌握JavaFX8控件”这本书中看到的那样,不要在自定义控件中使用或提及FXML的使用。

尽管如此,官方文档说要继续这条路线,并通过FXML创建JavaFX控件。

什么是更正确的方式和原因?

JavaFX中有两种自定义控件:

  • fx:基于root的自定义控件 :这些自定义控件是可定制的(支持CSS),但不是可换肤的。

    如果您是应用程序开发人员,那么这就是您希望在大多数时间使用的内容。

    这种控件通常是应用程序或组织特定的。 不需要为这些控件提供额外的自定义皮肤,CSS就足够了。

    通常他们只是将一些控件组合在一起并提供更好的API并隐藏内部。

    它们比可换肤的自定义控件更容易编写。

    我认为这是Swing-world中JPanel子类的替代品。

    我建议将你的GUI细分为小型自包含的fx:基于root的控件(高内聚,低耦合)。 使用Mediator Pattern来组合这些控件(父控件管理/配置其子控件并侦听其子控件的事件。子控件彼此不了解)。

    您可以创建此类控件的整个层次结构。 将它们分解为小控件将使维护更容易(例如,如果布局或用户交互必须改变)。

  • skinnable自定义控件 :skinnable自定义控件不仅可以设置样式(通过CSS),而且可以通过提供自定义外观完全更改其外观。

    如果您是一个控件库开发人员,那么很可能您希望提供可换肤的自定义控件,以允许库的用户充分利用JavaFX。

    这种控件通常是非常基本的,高度可重复使用的控件,并且通常(但不总是)使用一些自定义绘画。

    他们比fx更难做到:基于root的自定义控件。

没有正确的方法。 但我们可以将其分解为:

您知道应用程序启动之前要显示的JavaFX元素数量吗? 如果是,您可以使用SceneBuilder构建GUI,或者直接在XML中编写FXML文件。 大多数GUI屏幕设置都是如此,其中整体布局(MenuBar,ToolBar,内容,侧边栏,...)是众所周知的,并且不会随着时间而改变。

现在,自定义组件不知道如何显示自己。 有许多选项可供选择,大多数自定义组件都是动态构建的,或者在用户更改这些选项时可能会发生巨大变化。 您不能编写单个FXML文件,而是必须编写许多单个文件,每个文件都会构建自定义组件的一小部分。 这对管理来说并不是很方便,因此大多数开发人员选择直接在代码中使用FXML来完成。

最重要的是:有许多自定义组件使用特殊的布局而不是内置于JavaFX中,为了实现这一点,您必须编写自己的容器并使用自定义组件连接它们以获得完美的结果。 最后,构建自定义组件(或者更好:应该构建)以在FXML / SceneBuilder中使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM