JavaFX 2.0平台是基於Java技術的富client平台。它使應用程序開發人員更加easy的開發和部署跨平台的富互聯網應用(RIA)。JavaFX 2.0文檔包括了JavaFX 2.0所提供的功能的概述。
圖1描寫敘述了JavaFX 2.0平台的架構組件。后面的部分將對每個組件進行逐一的描寫敘述。
在JavaFX通用API的以下是用來執行JavaFX代碼的引擎。這個引擎包含以下子組件:JavaFX高性能圖形引擎(Prism);新的更小但更有效率的窗口系統(Glass);媒體引擎和Web引擎。盡管這些組件不是包含在外的。可是他們的描寫敘述能幫助你更好地理解JavaFX應用是怎樣執行的。

圖1 JavaFX 2.0 架構圖
場景(Scene Graph)
JavaFX的場景(Scene Graph)是JavaFX應用程序創建的開始點。它是一棵層次樹,其每一個節點都代表了一個應用程序UI的視覺元素。它能夠處理輸入並被渲染。
在場景中的一個元素叫做節點(node)。每一個節點都有其ID,樣式類別和包圍盒(不熟悉計算機圖形學.....原文為bounding volume,我挺想翻譯為基准線或者輪廓線的)。
在場景中的每一個節點都有一個唯一的雙親節點和零到多個孩子結點。一個節點還能夠包括:
◆ 效果(Effect),比方模糊或陰影效果
◆ 透明
◆ 變換
◆ 事件處理(比方鼠標、鍵盤或其它輸入方式)
◆ 應用程序定義的狀態
不同於Swing或者AWT。JavaFX的場景除了包括控制、布局管理器、圖像和媒體外,也有基本圖元,如矩形或者文字。
對於大多數用戶來說,場景簡化了用戶實現UI的工作。特別是用戶實現富UI的時候。在場景中繪制各種圖形能夠被快捷地完畢,並且能夠使用如XML文檔一樣的聲明式方法。
javafx.scene API同意創建和定義很多種內容,如:
◆ 節點(Nodes):2D或者3D的圖形、圖像、媒體、嵌入式web瀏覽器、文字、UI控件、圖標、組和容器。
◆ 狀態(State):變換(節點的位置和方向),視覺效果和其它內容的視覺狀態。
◆ 動畫(Animation):場景對象在一段時間中的屬性變化
◆ 效果(Effects):能夠改動場景節點的外觀,如模糊、陰影和顏色調整。
你能夠從Working with the JavaFX Scene Graph文檔獲取很多其它的信息。
為實現JavaFX特征提供的Java API
如圖1中的最頂層顯示的那樣,JavaFX 2.0平台包含一組完整的公共API。這些API為創建富client應用提供無可比擬的自由度和靈活性。JavaFX平台將Java平台的如身臨其境般的媒體功能融入直觀的一站式綜合開發環境之中。這些新的Java API實現了JavaFX的下面特點:
◆ 同意使用強大的Java語言特征,如泛型、注解和多線程技術
◆ 對於Web開發者,JavaFX提供使用動態語言編寫方式,如使用JRuby、Groovy和JavaScript
◆ 同意Java開發者使用其它的系統語言去編寫龐大復雜的JavaFX應用,如Groovy
◆ 同意使用與JavaFX腳本語言類似的綁定機制(binding)。這包含提供高性能的延遲綁定機制。綁定表達式和序列表達式,部分綁定重求值(不理解....)。
其它語言(如Groovy)能夠使用如JavaFX腳本語言一樣的綁定庫來實現語法級別的綁定。
◆ JavaFX擴展了Java集合庫,增加了observable lists和maps。這同意應用程序將UI和數據模型進行連接,UI能夠觀測數據模型的改變並進行直接更新。
JavaFX 2.0 API和編程模型是JavaFX 1.x的延續。大部分JavaFX API都與Java直接相連。一些API已經依據JavaFX 1.x使用者的反饋進行了更新(包含性能和易用性的提升),如布局管理(Layout)和媒體(Media)。並且JavaFX 2.0更加支持Web標准。如能夠使用CSSS作為樣式控制和使用無障礙規范建立ARIA。很多其它的Web標准也正在審核之中。
圖形系統
在圖1中用藍色的部分是JavaFX圖形系統。
它是JavaFX場景層的下層細節實現。
它為2D和3D的場景提供支持。
當系統的圖形硬件設備無法支持硬件渲染的時候,它提供軟件渲染支持。
在JavaFX平台上實現了兩個圖形加速管道:
Prism:Prism處理渲染工作。他的渲染工作。包含3D渲染,都能夠執行在硬件和軟件渲染單元之上。它負責處理光柵和渲染JavaFX場景。
基於所使用的設備的不同,可能有下面的渲染途徑:
◆ 在Windows XP和Vista下使用DirectX 9
◆ 在Windows 7下使用DirectX 11
◆ 在Mac,Linux,嵌入式系統上使用OpenGL
◆ 假設硬件加速不可用。使用Java2D
假設可用時,全部的硬件加速途徑都將被使用。但假設不可用,Java2D渲染途徑將被使用。這是因為該渲染技術已經包括在JRE中。這可能在進行3D場景處理時非常重要。可是一旦硬件渲染途徑可用,性能就會比較好。
l Quantum Toolkit:Quantum Toolkit將Prism和Glass窗體工具結合在一起並使在整個JavaFX層次結構中上層組件可用。它也同一時候管理着與事件處理相對的渲染線程規則。
Glass窗體工具
在圖1中間所看到的的Glass窗體工具是JavaFX 2.0圖形棧中最底層的框架。
他的主要責任是提供本地系統服務,比方說控制窗體。計時器或外觀。它作為平台依賴層銜接着JavaFX平台和操作系統。
Glass工具包也為事件隊列提供管理功能。不同於AWT管理其自身所具有的事件隊列。Glass工具包使用操作系統事件隊列去管理線程。相同不同於AWT的是,Glass工具包與JavaFX應用執行於同一線程。而在AWT中。原生AWT執行於一個線程而Java層次執行於還有一個線程。這樣會帶來很多問題,而JavaFX使用單一JavaFX線程來解決這類問題。
線程
不論什么時候,整個JavaFX系統都執行於兩個以上的線程:
◆ JavaFX應用程序線程(JavaFX Application Thread):這是JavaFX應用開發者所要使用的主要線程。不論什么“活着的”場景(指場景是窗體的一部分)都僅僅能從這個線程訪問。然而,場景也能夠從后台線程創建。這使得開發者能夠從后台線程創建復雜的場景而同一時候保證“活着的”場景中的動畫平滑而高速地播放。JavaFX應用程序線程與Swing或AWT得事件派發線程(EDT)不同,所以當把JavaFX代碼嵌入Swing應用中時。必須格外當心。
◆ Prism渲染線程(Prism Render Thread):這個線程僅僅處理渲染工作,而不干預事件派發線程。它同意第N幀播放時的同一時候,N+1幀正在被處理。這樣的能力對於提高並發處理能力有着極大地優點,尤其是在現代的多處理器系統中尤為出色。Prism渲染線程也能夠開啟多個光柵線程去幫助分擔渲染工作。
◆ 媒體線程(Media Thread):這個線程執行於后台並通過JavaFX應用程序線程所使用的場景來同步最新的幀。
脈搏(Pulse)
脈搏(Pulse。先這么翻譯吧。等官方翻譯出來再改動。其本質就是Repaint信號)是JavaFX應使用Prism去同步場景和場景中的元素狀態的標志。脈搏的最大速度為60幀/秒(FPS),並且不管何時僅僅要場景中的動畫進行。那么就會發送脈搏通知。即使動畫沒有進行,當場景發生改變。也會發送脈搏通知。比如。當一個button的位置發生了變化。那么就會安排一個脈搏通知。
當發送脈搏信號后,場景中的元素的狀態就會依據渲染層進行同步。脈搏能夠使應用程序開發人員對於事件進行異步處理。這個重要的特點使得系統能夠在一個脈搏來臨前將事件進行批量處理。
布局管理和CSS也關聯於脈搏信號。場景的眾多變化可能導致多次布局或CSS的更新,這樣的更新會導致性能的減少。
JavaFX系統會自己主動地在每次脈搏信號來暫時將CSS或布局進行發送,從而避免系統性能下降。應用程序開發者也能夠手動觸公布局或CSS變更通知的發送。
Glass窗體工具負責使用高性能的系統原生計時器來發送脈搏信號。
媒體與圖像
JavaFX媒體功能是通過javafx.scene.media API實現的。JavaFX提供顯示和音頻媒體功能。
支持MP3。AIFF,WAV音頻文件和FLV視頻文件。
JavaFX媒體功能由三個組件提供:媒體對象代表着媒體文件,媒體播放器用來播放媒體文件,媒體視圖是代表着媒體的節點。
在圖1中綠色的部分是媒體引擎組件。這部分已經在JavaFX 2.0中被全然又一次設計了,添加了性能和穩定性。並提供了跨平台一致性。你能夠閱讀Incorporating Media Assets into JavaFX Applications文檔來獲取很多其它的信息。
嵌入式瀏覽器
JavaFX嵌入式瀏覽器是JavaFX新的UI組件。它通過API提供了Web顯示和訪問的所有功能。圖1中橙色的部分是基於WebKit的Web引擎組件(WebKit是一款支持HTML5、CSS、Javascript、Dom和SVG的開源Web瀏覽器引擎)。
它使開發者能夠在他們的Java應用中實現下面功能:
◆ 渲染本地或遠程的HTML內容
◆ 支持歷史功能,並提供前進和后退導航
◆ 又一次加載內容
◆ 向Web組件添加效果
◆ 編輯HTML內容
◆ 運行JavaScript命令
◆ 處理事件
這個嵌入式瀏覽器組件包含一下的類:
◆ WebEngine 提供主要的Web頁訪問功能
◆ WebView 封裝了一個WebEngine對象,可將HTML內容放入應用程序場景中。並提供域和方法來應用效果和變換。
它是Node類的子類。
你能夠閱讀Adding HTML Content to JavaFX Applications文檔來獲取很多其它的關於JavaFX嵌入式瀏覽器的細節。
CSS
在JavaFX中CSS提供了對於JavaFX中UI應用定制樣式而無需改變代碼的能力。
CSS能夠被異步地應用於不論什么JavaFX場景中的節點。
JavaFX CSS樣式也能夠在執行期間被簡單地賦予場景,並同意動態改動應用程序外觀。
圖2顯示了同一應用程序在兩個不同CSS樣式下的效果:

圖2 CSS樣式范例
JavaFX CSS基於W3C CSS ver2.1版本號規范與如今正在使用的ver3版本號的一部分。
JavaFX CSS能夠使用不論什么CSS解析器。甚至那些不支持JavaFX擴展的部分的。這樣能夠將為JavaFX和為其它目的(如HTML頁)所寫的CSS混合為一個文件。
因為JavaFX具有輕微不同的詞法。全部的JavaFX屬性名都以“-fx-”開頭,包含那些可兼容於標准HTML的CSS。
你能夠閱讀 Skinning JavaFX Applications with CSS文章來獲取很多其它的信息。
UI控件
JavaFX中UI控件能夠通過使用場景中的節點的API來實現。
它們從JavaFX平台的豐富的可視化特點中獲得優勢並在跨平台時有着輕微的不同。JavaFX CSS同意為UI控件定制主題和皮膚。
圖3顯示了一些如今支持的控件。新的控件,如TitlePane或Accordion。都將在JavaFX 2.0 SDK中被引入。
這些控件位於javafx.scene.control包中。

圖3 JavaFX UI控件范例
你能夠閱讀Using JavaFX UI Controls文檔和API文檔中的javafx.scene.control 包來獲取很多其它的細節信息。
布局
布局容器或窗格可被用於在JavaFX應用程序場景中動態、靈活地管理UI控件。JavaFX布局API包含下面容器類,這些類能夠自己主動進行布局:
◆ BorderPane將其內容節點分布於上、下、左、右、中間位置。
◆ HBox將其內容節點水平布局於一行中
◆ VBox將其內容節點垂直布局於一列中
◆ StackPane將其內容節點以從后到前的順序布局於一個棧中
◆ GridPane同意開發者創建靈活行列數目的格子。並在格子中存放內容節點
◆ FlowPane將其內容節點在水平方向或垂直方向上按順序布局,並以特定寬度和高度的邊界進行包裹。
◆ TilePane將其內容節點布局於一致大小的單元中。
◆ AnchorPane同意開發者在上下左右或者中間創建錨節點。
在JavaFX應用中,想要實現希望的布局效果。能夠綜合使用不同的容器。
你能夠閱讀Working with Layouts in JavaFX文獻或查看API中的javafx.scene.layout包來獲取很多其它信息。
2D和3D變換
在JavaFX場景中的每一個節點都能夠使用javafx.scene.transform(原文這里應該是打錯了)進行二維坐標變換:
◆ 平移變換(translate):將一個節點從一個地方依據初始位置移動到還有一個地方
◆ 拉伸變換(scale):將一個節點依據縮放因子進行縮放
◆ 扭曲變換(shear):將一個節點依據不垂直的x、y軸進行旋轉。
◆ 旋轉變換(rotate):將一個節點依據場景中的某個點進行旋轉
◆ 仿射變換(affine):(若干balabala...看計算機圖形學教材吧...)該變換不應被直接使用,而是應該使用Translate、Scale、Rotate、Shear來取代。
你能夠閱讀Applying Transformations in JavaFX文檔或查看API中javafx.scene.transform包來獲取很多其它信息。
視覺效果
在JavaFX場景中使用視覺效果能夠提升JavaFX應用的欣賞度。JavaFX效果主要是基於圖像點的。因此他能夠應用於場景中的一組節點。像圖像一樣渲染節點並對其應用指定效果。
在JavaFX中有一些視覺效果,以下是一部分:
◆ 陰影(Drop Shadow):在給定的內容背后渲染陰影。
◆ 反射(Reflection):在內容的以下渲染反射效果
◆ 光照(Lighting):模擬光源照耀在給定的內容上,能夠將扁平的對象變得更加真實,3D化。
在Creating Visual Effects文檔中有很多其它的怎樣使用視覺效果的樣例。很多其它的視覺效果類參見API文檔中的javafx.scene.effect包。
部署
JavaFX應用能夠通過三種不同的方式被部署於桌面或在瀏覽器中:
◆ 獨立(Standalone):JavaFX應用被安裝在本地磁盤中,並通過雙擊JAR文件來啟動。當用戶無需進行線上訪問或應用沒有線上功能時。這樣的模式是最理想的。
◆ 瀏覽器(Browser):在這樣的模式下。JavaFX應用被嵌入一個Web頁中並隨着Web頁被訪問而自己主動啟動。它能夠跟Web頁中JavaScript進行交互。
◆ 網頁啟動(Web Start):這樣的模式下。用戶下載應用程序並在本地執行。一旦被下載。用戶在此之后就能夠通過雙擊JNLP文件來啟動應用。
你可以閱讀Deploying JavaFX Applications document文檔看到很多其他的三款車型以及如何准備JavaFX信息化應用部署。