至所有的读者:
各位亲,大家好,当您看到本留言时,相信你对JavaFx2已产生浓厚的兴趣。和您一样,我也很喜欢JAVAFX。当我开始学习它时,我一直在反思,有没有更好的方式来学习,并且和大家分享呢?在某个早晨6点多起来慢跑时,我下了一个决定,我可否试着写一本关于JavaFx的书,可能是脑冲血的原因吧,每天6点起床写文章。这几天终于整完了前面两章,大部份都是来自于Oracle官网的英文资料。对于英文不好的我来说,确实是一个不小的挑站。即然决定了,还是得坚持。作者水平有限,文章然免有错,欢迎大家拍砖。同时,作者更希望得到大家的肯定,如果您支持作者,请给作者留言。您的鼓励和肯定是最好的蜜糖,让作者象蜜蜂一样无私的贡献!! QQ:573696849 小卓 备注:javafx2
最好的祝福
小卓
2011-07-15
JavaFX 2.0平台是一个使用Java技术构建和设计富客户端平台,它使得应用程序开发人员能够轻松地创建和部署富互联网应用(RIA),同时,在多个平台上保持一致的行为。 图1所示的JavaFX 2.0平台的体系结构组件。 图1中的部分描述了每个组件和部件间的互连,JavaFX公共API引擎和场景图(Scene Graph)在于运行您的JavaFX代码。 它是由子组件组成,其中包括新的JavaFX高性能图形引擎,称为Prism;新的小型,高效的窗口系统,被称为Glass,媒体引擎以及Web引擎。虽然不公开这些组件,对它们的描述可以帮助您更好地了解怎么运行JavaFX应用程序。
JavaFX的场景图,图 1所示红色层的一部分,是构建JavaFX应用程序的起点。它是一个层次结构树中的节点,代表所有的应用程序的用户界面的视觉元素。它可以处理输入,可以呈现。一个场景图中的单个元素都称为一个节点,每个节点都有一个编号,样式类和边界量。场景图中的每个节点有一个相临的节点和零个或更多的子节点。 它也可以有以下几种:
l 模糊和阴影
l 透明度
l 转换
l 事件处理(如鼠标,键和输入法)
l 特定于应用程序的状态
l 和Swing及抽象窗口工具包(AWT)不同,JavaFX场景图除了基本图形(如矩形和文本)外,还具有控制、布局容器、图像和媒体。对于大多数使用者,场景图可以简化它们创建丰富UI的工作,动画在场景图中也可以迅速完成。
javafx.scene API允许建立以下几种类型的内容:
l 节点 :形状(2 - D和3 - D),图像,媒体,嵌入式Web浏览器,文本,UI控件,图表,布局及容器
l 状态 :变换(节点的定位和方向),视觉效果,和其他内容的视觉状态
l 动画 :随着时间的推移场景图对象的属性发生改变
l 效果 :改变场景图节点,如模糊,阴影,并调整颜色的外观的简单对象
使用JavaFX 2.0平台包括一套完整的公共API,在红层图1所示。 这些API提供了前所未有的自由和灵活性,以构建丰富的客户端应用程序(RIA), JavaFX平台全面的身临其境的媒体功能结合到一个直观和全面的一站式的发展环境使用最好的Java平台的能力。
这些新的Java API JavaFX的功能,包含如下:
l 允许使用功能强大的Java功能,例如泛型,注释和多线程。
l 更容易使Web开发人员可以使用从其他流行的动态语言包括JRuby,Groovy和JavaScript,如JavaFX的。
l 允许Java开发人员编写大型或复杂的的JavaFX应用程序中使用其他的系统语言,比如Groovy。
l 允许使用JavaFX脚本语言类似的约束型的语言。 包括支持高性能的延迟绑定,绑定表达式,序列表达式的约束,并结合进行重新评估。 替代语言(如Groovy)可以使用此绑定库引入类似JavaFX脚本绑定语法。
l 扩展Java集合库,包括观察者模式和列表(map),作为应用程序用户界面的数据模型,观察这些数据模型的变化,并更新相应的UI控制,JavaFX 2.0API编程模型是JavaFX 1.x的产品线的延续。 JavaFX API的大部分都被直接移植到Java,如布局和介质的API,以及许多其他细节,已经根据JavaFX 1.x版本用户收到的反馈意见进行改进和简化了。 JavaFX 2.0依赖于Web标准如CSS样式控制和ARIA的规范,使用其他Web标准也正在审查中。
JavaFX的图形系统如图1所示,蓝色部份是一个JavaFX场景图层之下的实现细节。 它支持2 - D和3 - D场景图。 它提供软件渲染,当系统上的图形硬件是满足要求的情况下,支持硬件加速渲染。
两个图形加速管道的JavaFX 2.0平台上实现:
l Prism提供绘制处理。
l 它可以运行在硬件和软件渲染器之上,包括3 - D。
l 负责光栅和JavaFX的场景渲染。
以下是多重渲染路径的基础所支持的设备:
l 在Windows XP和Windows Vista下的DirectX 9
l 在Windows 7下的DirectX 11
l 在Mac,Linux,嵌入式系统下的OpenGL
l 硬件加速时不可用时使用Java2D
l 完全硬件加速时使用的路径是可能的,但它不可用时,使用Java2D的进行路径渲染,是因为Java2D的渲染路径已包含在所有的Java运行时环境(JRE的)。 处理的3 - D场景时,这一点尤为重要。 当然,硬件渲染路径时性能更好。
l Quantum工具包关联的Prism 和Glass 窗口工具包,它们为JavaFx提供堆栈支持,负责管理相关的渲染与事件处理的线程规则。
Glass 窗口工具包,如米色所示, 在图 1的中间部分,是最低层的JavaFX 2.0图形堆栈框架,其主要职责是提供本地的支持服务,如管理窗口,定时器和外观。它作为JavaFX平台连接到本机操作系统平台相关的层。
玻璃工具包还负责管理事件队列。 不同于抽象窗口工具包(AWT),管理自己的事件队列,Glass工具包使用本机操作系统的事件队列调度线程。 也不像AWT的,Glass具包上运行JavaFX应用程序相同的线程,AWT的原生的一半运行在一个线程,并在另一个线程上运行的Java水平,这引入了很多问题,其中有许多是在JavaFX使用单一的JavaFX应用程序线程的方法已经解决的。
在任何特定时间该系统都运行两个或多个线程,如下:
l 应用程序线程 :这是JavaFX应用程序开发人员所使用的主线程。 任何激活的场景,都是一个场景,是一个窗口的一部分,必须从这个线程访问。 然而,场景可以在后台线程创建。 这使开发人员能够创建一个后台线程上的复杂的场景,同时保持平稳和快速的激活场面的动画。 JavaFX应用程序的线程与从Swing和AWT事件调度线程(EDT)不同,因此JavaFX代码嵌入到Swing应用程序时,必须小心。
l Prism 渲染线程 :线程处理事件调度单独的渲染。 它允许正在处理帧的N +1 N帧被渲染。 这种执行并行处理的能力是一个很大的优势,特别是在现代系统有多个处理器的情况下。 Prism渲染线程也可能有多个光栅线程,帮助需要渲染负荷的工作。
l 媒体线程 :线程在后台运行,并通过场景图中使用JavaFX应用程序的线程同步的最新帧。
一个脉冲是一个事件,它是JavaFX场景图中时间同步与Prism 场景图中元素的状态。 场景图运行的动画一个脉冲被限制在60帧每秒(fps), 即使动画没有运行,一个脉冲在场景图中的东西也是变化的。 例如,如果一个按钮的位置发生变化时,脉冲被重置。
当一个脉冲触发场景图中的元素状态是同步的渲染层,一个脉冲允许应用程序开发一种方法来处理异步事件,这个重要的功能允许系统批量地执行脉冲的事件。布局和CSS也是有脉冲事件的, 在场景图中的许多变化,可能导致多个布局或CSS的更新,这可能会严重降低性能。 系统自动执行每脉冲的CSS布局传递一次,以避免性能降低。 应用程序开发人员也可以手动触发布局或CSS传递需要进行测量前一个脉冲。
Glass 窗口工具包是负责执行的脉冲事件,它采用的高分辨率的本地定时器执行。
JavaFX媒体的功能,允许通过javafx.scene.media API 让JavaFX支持视觉和听觉媒体。 为MP3,AIFF及WAV音频文件和FLV视频文件提供支持。 JavaFX媒体的功能是提供三个独立的部分组成:Media object代表一个媒体文件,MediaPlayer用于播放媒体文件,MediaView是一个节点,用于显示媒体。
媒体引擎的组成部分,在绿色在图 1所示,在JavaFX 2.0已完全重新设计,以增强稳定性,提高性能,并提供跨平台一致的行为。
欲了解更多信息,请阅读JavaFx应该程序文档。
JavaFX的嵌入式浏览器是一个新的JavaFX用户界面的组件,它提供通过一个Web浏览器和全浏览功能的API。 图1所示橙色是Web引擎组件,是基于WebKit的,它是一个开放源码的Web浏览器引擎,支持HTML5,CSS,JAVASCRIPT,DOM和SVG 。它允许开发人员在他们的Java应用程序实现以下功能:
l 从本地或远程URL渲染HTML内容
l 支持历史记录和提供的后退和前进导航
l 刷新的内容
l Web组件应用效果
l 编辑HTML内容
l 执行JavaScript命令
l 处理事件
这种嵌入式的浏览器组件有以下对象:
l WebEngine提供了基本的网页浏览功能。
l 封装WebView一个WebEngine对象,HTML内容集成到一个应用程序的场景,并提供应用效果和转换的字段和方法的。它是一个扩展节点类。
更多的JavaFX的嵌入式浏览器的详细介绍, 请参阅JavaFX应用程序。
JavaFX的层叠样式表(CSS)提供了改变外观的能力,在不改变任何该应用程序的源代码的情况下,允许定制JavaFX应用程序的用户界面。CSS允许改变任何在JavaFX场景图的节点,并应用于异步节点。 JavaFX的CSS样式也可以很容易改变动运行中的场景。
图2展示了相同的一组UI控件两个不同的CSS样式的应用程序,从位于右上角的菜单中选择风格。
JavaFX的CSS是基于W3C的CSS 2.1版本规格,在第3版上进行一些补充。 JavaFX的CSS支持被扩展和设计成允许解析任何兼容的CSS解析器,这使得JavaFX和其他的(如HTML页面)的CSS样式可以混合使用。 所有的JavaFX属性名称的前缀都有"-fx- ",看上去和标准的HTML CSS兼容有所不同,其实只是JavaFX值的语义略有不同。
更多详细的关于JavaFX CSS信息,请参阅JavaFX应用程序外观的文章。
欢迎访问原创地址:http://weedria.iteye.com/