JavaFX,Jigsaw项目和JEP 253

因此, Java 9可能会破坏您的代码 ……

如果您的项目使用JavaFX,则这尤其可能,因为许多自定义项和自制控件都需要使用内部API。 借助Project Jigsaw,这些内容将无法在Java 9中访问。幸运的是, Oracle在几天前宣布了 JEP 253 。 其目标:

为JavaFX UI控件和CSS功能定义公共API,这些公共API目前仅可通过内部API使用,因此由于模块化而变得不可访问。

JEP 253 – 2015年5月14日

让我们看看JavaFX,Project Jigsaw和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下发布-我添加了拼图效果。

由Flosweb在CC-BY-SA下发布 -我添加了拼图效果。

JavaFX中的内部API

使用JavaFX时,通常依赖于内部API。 这样做是为了创建新控件,调整现有控件或修复错误。

创建新控件

虽然ControlSkin甚至SkinBase都是公共API,但经常使用的BehaviorSkinBaseBehaviorBase不是。 使用拼图项目,将无法访问它们。

不过,该API的使用率很高。 ControlsFX包含大约二十个控件,其中大约一半需要这些类之一的实现。

同样,键KeyBindings也没有发布,因此创建键KeyBindings来管理用户交互会增加另一个有问题的依赖性。

调整现有控件

定制现有控件通常是为了更改可视化效果或调整某些用户交互的行为。

对于前者,简单地扩展和修改现有的外观通常是最容易的。 不幸的是,现有控件的所有外观都位于com.sun.javafx.scene.control.skin 。 当它们变得不可访问时,许多自定义控件将不再编译。

要更改控件对用户交互的反应,必须干预BehaviorBase定义的BehaviorBase 。 这类似于创建新控件,这通常是通过扩展BehaviorSkinBaseBehaviorBase并创建新的KeyBindings

通过CSS设置控件的样式

在JavaFX中,可以实现控件,以便可以通过CSS设置样式。 所有官方控件都具有此功能,其他一些控件也由其他项目提供。

设置控件样式的中心步骤是将属性的文本表示形式从CSS文件转换为NumberPaint ,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 Builder,ControlsFX和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控件团队的甲骨文技术负责人乔纳森·吉尔斯(Jonathan Giles)在推文中说,“他可能在几个月内不会合并到仓库中……”。

另一方面,由于Java 9的功能完整性计划于12月发布 ,因此它必须在接下来的七个月内可用。

反射

我们已经看到,使用JavaFX经常需要使用私有API。 这发生在三个截然不同的区域:

  • 根据控件体系结构(MVC)创建新控件。
  • 通过扩展其外观或更改键绑定来调整现有控件。
  • 通过CSS设置控件的样式。
  • 解决错误。

JEP 253分为三个项目,分别针对前三个领域。 (对我来说)尚不清楚它们是否足以仅使用公共API来解决错误。

翻译自: https://www.javacodegeeks.com/2015/05/javafx-project-jigsaw-and-jep-253.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360349.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微型计算机技术6,微型计算机技术课后习题6-8章答案.ppt

微型计算机技术课后习题6-8章答案MOV AL L2: MOV CX,8 L1: OUT 20H,AL CALL DELAY2S ROR AL,1 LOOP L1 JMP L2 习题:8.24 8253A-5的计数通道0连接如图习8-4所示,试回答:(1)计数通道0工作于何种方式,并写出工作方式名称;(2)写出计数通道0的计数初值(列出计…

免费的.NET混淆和反编译工具

免费的.NET代码混淆工具: Eazfuscator.NET http://www.foss.kharkov.ua/g1/projects/eazfuscator/dotnet/Default.aspx Skater .NET Obfuscator Freeware Light Edition http://www.rustemsoft.com/freeware_obfuscator.htm VisualStudio2010中集成的Dotfuscator…

ios 获取是否静音模式_果粉感动:部分iOS“新功能”早已被安卓玩坏

一年一度的WWDC大会如期举行,今年不仅展示了全新的iOS、iPadOS以及macOS。当然,具体更新了什么相信早已经被各大媒体报道出来,本文并不是重复报道,相反的,iOS经过了13代的发展,有开创性的动作,也…

怎么把桌面计算机隐藏文件,怎么隐藏桌面文件夹名称?隐藏桌面图标下的文字的详细教程...

怎么隐藏桌面文件夹名称?桌面图标一多就会显得很凌乱,特别有的软件名称很长,那么有没有什么方法可以让桌面看起来很清爽呢?当然是有,去掉桌面应用的名称不就简洁清爽了?下面就教大家不利用第三方软件的情况…

Hazelcast入门指南第7部分

这是解释如何使用Hazelcast的系列文章的续篇。 如果一个人没有阅读其他六个帖子,请转到目录并阅读其他帖子。 不同的地图种类 Hazelcast的MultiMap打破了以前使用java.util.Collection接口的常规方式。 实际上,在我看来,MultiMap的概念完全打…

JS将指定的时间戳转为UTC时间

Js中获取时间戳可用var dayMiliseconds parseInt(new Date().valueOf());Js的时间戳单位为毫秒(1s 1000 ms),下面是一个将制定的格式转化成UTC时间的函数。 //format the date string from webservice to UTC time; function toUTCtime(dateStr) {//Da…

02365计算机软件基础,自考02365《计算机软件基础(二)》习题解答.pdf

1。互交机人了便方 �口接的间之统系机算计和户用为作还统系作操时同 �理管的源资类四等件文 �备设O/I �器储存 �机理处对现实 �源资件软 、件硬的机算计理管和制控统系作操 �】答解【&#xfff…

window xp系统安装php环境_Windows Server 2003及XP系统如何安装SQL Server 2000数据库?

年头年初节假日就是小编的梗,忙得不可开交,这不越冷越刮风昨天服务器又崩了,折腾了一天安装好Windows Server 2003和IIS(这系统是有点老了,主要是单位机子和各系统也有点年头了,没办法),做好各项配置后总算…

REST服务的自动化测试

尽管我是Java和Scala开发人员,但我仍然对软件测试充满热情。 如果更精确-Web应用程序。 开发Web应用程序并确保应用程序具有良好的质量真的很有趣。 当我开始职业生涯时,最受欢迎的Web架构是MVC(模型视图控件),并且非…

iOS 为tableview添加新的cell类

网址:http://www.howzhi.com/group/iosDevelop/discuss/2068转载于:https://www.cnblogs.com/liukunyang/p/3363881.html

怎么写计算机教学论文,如何写好一篇关于信息技术教育的论文

论文是一个汉语词语,拼音是ln wn,古典文学常见论文一词,谓交谈辞章或交流思想。当代,论文常用来指进行各个学术领域的研究和描述学术研究成果的文章,简称之为论文。今天小编给大家以信息技术教育为题的论文模板&#x…

JAXB做错了; 尝试Xembly

JAXB是一项具有10年历史的Java技术,它使我们能够将Java对象转换为XML文档(编组)并返回(取消编组)。 我认为这项技术基于setter和getter,并且通过将对象转换为被动数据结构而违反了面向对象编程的关键原理。…

rnn神经网络 层次_精讲深度学习RNN三大核心点,三分钟掌握循环神经网络

每天给小编五分钟,小编用自己的代码,让你轻松学习人工智能。本文将剖析循环神经网络(RNN)的工作原理,精讲循环神经网络的特点和实现方式。野蛮智能,小白也能看懂的人工智能。循环神经网络从何而来?我在我的这篇文章介绍…

我的偶像特质

1、泰国英拉:谦和品质,诚实,隐忍,有外交风范。 此前默默无闻的英拉依靠选举机器与个人魅力的完美协作,英拉完成了从女高管到女总理的身份飞越。 对手:“英拉从未利用媒体攻击商业对手,而是尽量避…

摆脱匿名类

我真的很喜欢编写和阅读lambda表达式-它们简洁,富于表现力和时尚(来吧,这样就没关系了!)。 将此与匿名类进行比较。 这就是为什么我喜欢摆脱它们! 在过去的几个月中,这种认识慢慢地实现了&…

惠普自动化测试软件官网,惠普最新测试管理工具 HP ALM 11.0 详细介绍

惠普应用生命周期管理(HPalm/" target"_blank" >ALM11)是业界首款集成的、跨技术和流程、可拓展的平台,使IT能够管理应用生命周期,并且从项目建议到运营全过程中贯穿应用交付。在拓展惠普软件应用组合(HPSoftwareApplicationsportfoli…

poj 题目分类(3)

OJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094) 初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. (5)构造法.(poj329…

ARM学习(24)Can的高阶认识和错误处理

笔者来聊一下CAN协议帧的认识和错误处理。 1、CAN协议帧认识 CAN 差分信号,是经过CAN收发器转成差分信号的,CAN RX和TX是逻辑电平。CAN的基础知识,可参考笔者这边文章:ARM学习(21)STM32 外设Can的认识与驱…

云桌面 瘦终端_小米盒子连接Citrix云桌面

先前看到很多公司使用Wyse、Hp等瘦终端设备登陆Citrix云桌面,便想购得一台瘦终端设备,想来只是为了测试,况且瘦终端价格不低,便一直未买。后使用自己的平板连接Citrix XenDesktop创建的Win7桌面,感觉效果很好&#xff…

Apache Mesos + Marathon和Java EE

Apache Mesos是一个开放源代码群集管理器,可在分布式应用程序或框架之间提供有效的资源隔离和共享。 Apache Mesos从计算机(物理或虚拟)上提取CPU,内存,存储和其他计算资源,从而使容错和弹性的分布式系统易…