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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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

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

摆脱匿名类

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

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,内存,存储和其他计算资源,从而使容错和弹性的分布式系统易…

计算机指令中数据寻址的方式,1.变址寻址需要在指令中提供一个寄存器编号和一个数值。 2.计算机的指令越多,功能越强越好。 3.程序计数...

满意答案happysk72推荐于 2017.12.16采纳率:57% 等级:12已帮助:21199人1.对变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。变址寻址方式常用于访问某基…

babel原理_带你了解 snowpack 原理,你还学得动么(下)

作者:AlienZHOU转发链接:https://zhuanlan.zhihu.com/p/149351900目录带你了解 snowpack 原理,你还学得动么(上)带你了解 snowpack 原理,你还学得动么(下)本篇小编建议小伙们从第一篇开始,按照顺序来看,更清…

测试社交软件有哪些,性格测试:测你适合哪个社交平台

你喜欢通过什么方式和人交流?随着网络世界越来越发达,人们越来越倾向于使用社交工具来维系与家人、朋友、同事之间的关系。不但在现实生活中不好直接表达出来的话通过网上交流的方式可以顺畅地表达出来,而且也节约了时间上的成本,…

VS2012无法安装cocos2d-x-2.1.4 解决方法及VS2012新建coco2d-x项目(一)

转自:http://www.cnblogs.com/wangpei/admin/EditPosts.aspx?opt1 (注:此方法是可行,仅供参考,建议大家直接看我的 一见命令解决vs安装并创建cocos2d-x,如果你习惯了和以前一样在vs点击创建就用这个方法&a…

excelexportentity中设置null不显示的方法_一般人不知道的线程间数据交换Exchanger

线程间的数据共享除了定义一个共享数据然后各个线程去访问这种方式外,还可以使用Exchanger交换数据。简单案例首先看看Exchanger的运用,Exchanger最简单的测试代码,如下图:对应打印的结果如下:线程2创建对象java.lang.…

布尔表达式的语法及语义分析程序_XSS语义分析的阶段性总结(一)

作者:Kale 合天智汇前言由于X3Scan的研发已经有些进展了,所以对这一阶段的工作做一下总结!对于X3Scan的定位,我更加倾向于主动被动的结合。主动的方面主要体现在可以主动抓取页面链接并发起请求,并且后期可能参考XSStr…

【黑金原创教程】【TimeQuest】【第二章】TimeQuest模型角色,网表概念,时序报告...

声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/alinx/p/3362790.html 《FPGA那些事儿--Tim…

设置springboot日志级别_Spring Boot 日志框架实践

概述Java应用中,日志一般分为以下5个级别:ERROR 错误信息WARN 警告信息INFO 一般信息DEBUG 调试信息TRACE 跟踪信息Spring Boot使用Apache的Commons Logging作为内部的日志框架,其仅仅是一个日志接口,在实际应用中需要为该接口来指…

计算机加分乘法套用,8+8+8+8+8写成乘法算式要怎样写?小学数学为何这么死板?...

88888写成乘法算式只能写8x5不能写5x8吗?小学数学为何这么死板?这个题目来自于某小学的期考试卷,是个填空题,88888写成乘法算式时给了两个空( )和( ),就有人提出来只能写8x5不能写5x8,所以应该只给一个空。…

投影元素直接隔离_摸着夜色上露台开投影,是巴塞罗那设计师的浪漫

总有人说,世界为你关上一扇门,定会为你留有一扇窗。在家闷上个把月,窗户直接担起了连接人们与外界的通道。既然观众出不了门,那不如让加油打气的海报们,自己爬上墙好了——人们打开窗子就能撞上。平面设计师Ral Goi一直…

Apache Lucene的结构

不可估量的高贵的Apache软件基金会(Apache Software Foundation)产生了许多重要产品(Ant,CouchDB,Hadoop,JMeter,Maven,OpenOffice,Subversion等)&#xff0c…

comcerter无法识别串口_基于FPGA 的MXN维字符识别的实现

基于FPGA 的MXN维字符识别的实现1 概述本文的灵感来源于杨淑英老师的一张PPT(手写数字识别),在此特别鸣谢杨淑英老师。一般机器视觉对事物是没有感知的,比如摄像头采集到一张苹果的图片,它本身是不知道那是什么东西&am…