java8 javafx
如果您正在开发JavaFX的UI框架,请养成一种习惯,始终将自定义控件拆分为控件类和外观类。 来自Swing自己,这对我来说并不明显。 Swing还使用MVC概念,并将实际的组件呈现委托给UI委托,但是扩展Swing的人们大多将其控件之一子类化,并为子类添加了扩展/修改。 实际上只有很少的框架与UI委托一起工作(例如MacWidgets )。
我有幸能够比较相同的产品/控件的实现(一旦在Swing中完成,又一次在JavaFX中完成),并且我注意到JavaFX的实现更加简洁,主要是因为控件和外观的拆分(下一个行:CSS样式和属性绑定)。 在Swing中,我向框架用户展示了很多东西,这些东西我个人认为是“实现细节”,但后来变成了公共API。 JavaFX体系结构使框架开发人员在公共API和内部API之间划清界限的地方变得更加明显。
控制
控件类存储控件的状态并提供与之交互的方法。 状态信息可以是:控件可视化的数据(例如TableView中的项目),可视属性(显示,隐藏),工厂(例如单元工厂)。 交互可以是:滚动到一个项目,显示给定的时间,执行此操作。 控件类是框架代码和使用框架的应用程序之间的契约。 它应该设计得很好,干净,稳定并且是最终的 。
皮肤
狂野西部是发疯的地方。 外观通过组成现有控件或扩展非常基本的类(例如Node或Region)来创建控件的视觉表示。 皮肤通常放在单独的软件包中,这些软件包的软件包名称表示其中包含的API不被考虑用于公共用途。 如果有人使用它们,则后果自负,因为框架开发人员(您)可能会决定在各个发行版之间进行更改。