免费淘宝客网站模板下载,怎么申请注册公司,广州建站外包公司历史长,微网站价格表javafx 项目因此#xff0c; Java 9可能会破坏您的代码 …… 如果您的项目使用JavaFX#xff0c;则这尤其可能#xff0c;因为许多自定义和自制控件都需要使用内部API。 借助Project Jigsaw#xff0c;这些内容将无法在Java 9中访问。幸运的是#xff0c; Oracle在几天前… javafx 项目 因此 Java 9可能会破坏您的代码 …… 如果您的项目使用JavaFX则这尤其可能因为许多自定义和自制控件都需要使用内部API。 借助Project Jigsaw这些内容将无法在Java 9中访问。幸运的是 Oracle在几天前宣布了 JEP 253 。 其目标 为JavaFX UI控件和CSS功能定义公共API这些公共API当前仅可通过内部API使用因此由于模块化而变得不可访问。 JEP 253 – 2015年5月14日 让我们看一下JavaFXJigsaw项目和JEP 253是如何交互的。 总览 为了更好地了解内部API在JavaFX中的作用了解其控制体系结构将很有帮助因此我们将从此开始。 然后我们将研究为什么在使用JavaFX时经常使用内部API。 这将有助于将新的JEP置于上下文中。 因为我熟悉它所以我经常以ControlsFX为例。 我假设类似的库例如JFXtras 以及其他自定义JavaFX的项目都处于相同的情况。 JavaFX控制架构 模型视图控制器 JavaFX控件是根据model-view-controller实现的 。 无需赘述让我们快速了解一下如何完成。 有关详细信息请参见GuiGarage 。 所有正式控件都扩展了抽象类Control 。 这是MVC的模型。 该控件定义一个skinProperty 其中包含一个Skin实现。 它可视化控件的当前状态即它是MVC的视图。 默认情况下它还负责捕获和执行用户交互这在MVC中是控制器的任务。 皮肤通常是通过扩展BehaviorSkinBase实现的。 它创建了BehaviorBase的实现将所有用户交互委托给该BehaviorBase的实现并相应地更新了模型。 因此这里有MVC的控制器。 按键绑定 还值得注意的是控件如何解决用户输入。 为了将动作链接到输入例如“ CTRL 鼠标单击”中的“在后台打开新选项卡”它们创建了KeyBindings列表。 然后将输入事件与所有创建的绑定进行比较并调用正确的操作。 由Flosweb在CC-BY-SA下发布 -我添加了拼图效果。 JavaFX中的内部API 使用JavaFX时通常依赖于内部API。 这样做是为了创建新控件调整现有控件或修复错误。 创建新控件 虽然Control Skin甚至SkinBase都是公共API但经常使用的BehaviorSkinBase和BehaviorBase不是。 使用拼图项目将无法访问它们。 不过该API的使用率很高。 ControlsFX包含大约二十个控件其中大约一半需要这些类之一的实现。 同样键KeyBindings没有发布因此创建键KeyBindings来管理用户交互会增加另一个有问题的依赖性。 调整现有控件 自定义现有控件通常会更改可视化效果或调整某些用户交互的行为。 对于前者简单地扩展和修改现有的外观通常是最容易的。 不幸的是现有控件的所有外观都位于com.sun.javafx.scene.control.skin 。 当它们变得不可访问时许多自定义控件将不再编译。 要更改控件对用户交互的React必须干预BehaviorBase定义的BehaviorBase 。 这类似于创建新控件通常通过扩展BehaviorSkinBase和BehaviorBase并创建新的KeyBindings 。 通过CSS设置控件的样式 在JavaFX中可以实现控件以便可以通过CSS设置样式。 所有官方控件都具有此功能其他一些控件也由其他项目提供。 设置控件样式的中心步骤是将属性的文本表示形式从CSS文件转换为Number Paint enum…的实例以便可以将它们分配给属性。 为了确保统一高质量的转换JavaFX为此提供了一个API。 不幸的是它位于com.sun.javafx.css.converters 。 高级样式要求必须在StyleManager帮助下实现您猜想它也没有发布。 解决错误 JavaFX相对来说还很年轻但仍然包含一些很难接触的错误。 通常唯一的解决方法是侵入控件的内部工作原理从而使用私有API。 此类情况的示例可以在OpenJFX邮件列表中找到例如RobertKrüger Stefan Fuchs和Tom Schindl在这些邮件中。 这些变通办法将在Java 9中失败。由于似乎所有错误均已修复因此它们不必要变得不必要因此可以理解以下问题 当然从理论上讲如果所有[那些bug]都已在[Java] 9中得到了修复那我很好但是如果有一段时间将其中的一半修复在9中而另一半只能在8我该如何处理我的产品 罗伯特·克鲁格– 2015年4月9日 杰普253 我们已经了解了为什么在使用JavaFX时普遍使用内部API。 那么 JEP 253如何解决这个问题 除非另有说明否则本节中的所有引号均取自JEP。 目标非目标和成功指标 该提案恰好解决了到目前为止所描述的问题。 而且它认识到“在很多情况下要获得理想的结果开发人员别无选择只能使用这些内部API”。 因此“此JEP的目标是为内部API当前提供的功能定义公共API”。 请注意当开发人员将其代码从内部移动并且现在无法访问新的公共API时这仍然会带来编译错误。 同时该JEP既不计划对现有已发布的代码进行任何更改也不进行任何改进“不受模块化影响的所有其他现有API都将保持不变。” 定义了两个成功指标 “依赖JavaFX内部API的项目尤其是Scene BuilderControlsFX和JFXtras在更新到新的API之后仍可以继续工作而不会失去功能。” “最终如果所有工作都按计划进行那么第三方控件应该是可构建的而不依赖于内部API。” 三个项目 JEP分为三个项目 项目一使UI控件外观成为公共API 现有控件的外观将从com.sun.javafx.scene.control.skin移至 javafx.scene.control.skin 。 这将使它们成为已发布的API。 请注意这不包括行为类。 项目二改进对输入映射的支持 行为将通过输入映射来定义。 这允许在运行时更改控件的行为而无需扩展任何特定且未发布的类。 项目三审查并公开相关CSS API com.sun.*软件包中当前可用CSS API将进行审查和发布。 该提案将更加详细并描述每个项目的当前状态以及一些风险和假设。 这些项目解决了上述四个用例中的三个。 可以合理地假设可以满足这些要求并且在Java 9中即使无法访问内部API也可以正确地创建调整和皮肤控件。 如何解决错误 至少其中一些似乎可以用相同的工具解决例如扩展现有的皮肤。 但是我不能说这是否对所有人都适用以及没有解决方法留下来的重要性有多重要。 时间表 如果您想试用新的API则必须耐心等待一段时间。 JFX 253的所有者JavaFX UI控件团队的Oracle技术负责人乔纳森·吉尔斯Jonathan Giles在推文中说“他可能在几个月内不会合并到存储库中……”。 另一方面由于Java 9的功能完整性计划于12月发布 因此它必须在接下来的七个月内可用。 反射 我们已经看到使用JavaFX常常需要使用私有API。 这发生在三个截然不同的区域 根据控件体系结构MVC创建新控件。 通过扩展其外观或更改键绑定来调整现有控件。 通过CSS设置控件的样式。 解决错误。 JEP 253分为三个项目分别针对前三个领域。 对于我来说尚不清楚它们是否足以仅使用公共API来解决错误。 翻译自: https://www.javacodegeeks.com/2015/05/javafx-project-jigsaw-and-jep-253.htmljavafx 项目