JavaFX2.0 基礎教程 之 架構和框架

openkk 12年前發布 | 74K 次閱讀 JavaFX Java開發

1      JavaFX架構和框架

JavaFX2.0是基于Java技術構建的富客戶端平臺,使應用開發者易于創建和部署跨平臺的富互聯網應用(Rich Internet Application RIAs)。

圖-1描述了JavaFX2.0的架構性組件構成。這部分將描述圖表構成的每個組件以及這些組成部分如何交互。JavaFX公開APIs依存于真正 運行JavaFX代碼的應用引擎。它的構成子組件包括新的高性能圖形引擎(代號Prism)、新的體積小且高效的視窗體系(代號Glass)、媒體引擎、 web引擎。盡管這些組件沒有公開暴露,但關于這些的描述能有助于你更好地理解JavaFX應用是如何運作的。

圖-1 JavaFX2.0架構圖

1.1  場景圖

JavaFX場景圖(圖-1頂層部分)是構建JavaFX應用的起始點。它是應用圖形接口所有可視元素節點的層級節點樹,并能處理輸入及渲染。

場景圖中的單個元素稱為節點。每個節點有一個標識ID、樣式類及綁定量。每個節點有單一的父類以及零到多個子節點,節點也可有如下功能:

?  效果化,諸如模糊、陰影化處理;

?  不透明;

?  變換;

?  事件處理,諸如鼠標、鍵盤以及輸入方法等;

?  特定應用狀態處理。

不像在Swing和AWT(AbstractWindow Toolkit)中,JavaFX場景圖也有基本圖形,例如矩形、文本框,還有控件、布局容器、圖片以及媒介處理等。對于大多數使用,場景圖簡化了UIs 的工作,特別是在使用富UIs時。各種各樣的動畫能更快的完成,并且聲明式方法(如基于XML)也能很好的顯效運行。

這個javafx.scene的API允許創建和規范好幾種類型的內容,例如:

節點:圖形(2D和3D)、圖片、媒體、嵌入式頁面瀏覽器、文本框、UI控件、圖表、分組以及容器;

狀態:變換(節點位置和方向)、可視化效果以及其它可視化狀態內容;

動畫:隨時間變化的場景圖對象屬性特征;

效果:改變場景圖節點面貌的簡單效果對象,諸如模糊、陰影、顏色調整等。

關于場景圖這部更多信息,可以查看“基于JavaFX場景圖工作”部分文檔描述。

 

1.2  JavaFX特征API

JavaFX2.0平臺包括一套完整的公共APIs,如圖-1最頂層所示。這些APIs為構建富客戶端(RIAs)提供了空前的自由和靈活性。 JavaFX結合了Java平臺最好的功能,以全面的、引人入勝的媒體功能形成直觀、一站式開發環境。這些針對JavaFX特征的Java APIs有:

?  允許使用強大的java特性,如泛型、標注和多線程。

?  對于Web開發者來講,使用JavaFX進行開發,相比其它流行動態語言,如JRuby、Groovy和JavaScript,更為容易些。

?  允許Java開發者使用其它系統語言,如Groovy,來編寫大型的或復雜的JavaFX應用。

?  允許使用類似于JavaFX腳本語言綁定。這種綁定包括高性能“懶”綁定、綁定表達式、范圍序列表達式、局部綁定再賦值等。可選語言(如Groovy)也能引入使用類似JavaFX腳本的綁定語法。

?  擴展Java集合庫,包括可觀察Lists和Maps。這樣允許應用連接用戶界面和數據模型,觀察數據模型的變化,并一致性的更新相應UI控件。

JavaFX2.0 API和編程模型是JavaFX1.x產品線的延續,大多數的JavaFX APIs已經導入到Java中。有些APIs,如布局和媒體,以及其它許多相關細節,基于發行版JavaFX1.x用戶反饋,已經進行了改進并簡化。 JavaFX2.0依賴于更多的web標準,如樣式控制CSS、訪問性規范ARIA。其它附加web標準也在審查中。

1.3  圖形系統

JavaFX圖形系統(如圖-1藍色部分)是一個在JavaFX場景圖層下的細節實現,支持2D和3D場景圖。該圖形系統在系統圖形硬件加速渲染不足時,可實現軟件渲染。JavaFX2.0平臺實現的兩個圖形加速管道為:

1、Prism處理渲染工作。它能運行在硬件和軟件渲染器上,包括3-D。負責光柵化和渲染JavaFX場景。下列多個渲染途徑可基于設備使用:

2  Windows XP和Windows Vista上的DirectX 9;

2  Windows 7上的DirectX11 ;

2  Mac、linux及嵌入設備上的OpenGL;

2  Java2D(不能硬件加速時)。可能時完全硬件加速可用,但當不可用時,Java2D渲染途徑可用(因為Java2D渲染器發行于所有JREs中)。當處理3-D場景時,這是特別重要的。當然使用硬件渲染器時性能更好些。

2、QuantumToolkit 把Prism和GlassWindowing Toolkit連接在一起,并使它們在堆棧上對JavaFX層可用。它也管理著與事件處理相對與渲染有關的線程規則。

1.4  視窗工具Glass

如圖-1中部位置所示,Glass視窗包是JavaFX2.0圖形堆棧最底層框架。它的主要職責是提供本地化操作服務,諸如管理窗口、定時器以及外觀等。作為平臺相關層,它負責連接JavaFX平臺和本地操作系統。

Glass工具包也負責管理事件隊列。它不像AWT自我管理事件隊列,Glass使用本地操作系統的事件隊列功能來安排線程使用。也不像 AWT,Glass作為JavaFX應用運行在相同的線程上。在AWT中,本地一半的AWT事件運行在一個線程上,而Java層的運行在另一個線程上。這 許多問題,在JavaFX中通過使用單應用線程方法得到了解決。

 

1.5  線程

 

在任何給的時間內,系統運行兩個或更多個如下線程。

JavaF應用線程:這是JavaFX應用開發者使用的主要線程。在任何“實時”場景中,作為視窗場景一 部分,必須通過此線程進入訪問。但是,場景也能從后臺線程中創建,這使得開發者能夠基于后臺線程創建復雜場景,以便能在實時性動畫場景中保持畫質的滑順和 快速。JavaFX應用線程是與Swing和AWT的時事件發線程(EDT)不同的,因此必須小心在Swing應用中嵌入JavaFX代碼。

Prism渲染線程:此線程基于事件分發來分別處理渲染工作。這使得在N+1幀被處理時,N幀能被渲染。這種能力對執行并發處理是非常有利的,特別是現代多處理器系統。Prism渲染器線程也可有多個柵格化線程,這有助于需要在渲染時完成的過負荷的工作。

媒體線程:這個線程運行在后臺,使用JavaFX應用線程通過場景圖同步最新幀。

1.6  Pulse(脈沖事件)

一次Pulse是一個事件,它指示JavaFX布景用Prism適時同步場景中元素狀態。一次Pulse最大控制在每秒(fps)60幀內,并可由 場景圖中運行的動畫任意時刻觸發。即使動畫沒有運行,當場景圖中有什么變化時,一次Pulse也被預定。當一次Pulse觸發,場景圖中元素狀態被向下同 步到渲染層。一次Pulse使開發者有方法處理異步事件。這是個重要的特性,使系統能在Pulse上批量處理和執行事件。

布局和CSS也被聯系到Pulse事件。場景圖中許多改變能引起多布局或CSS更新,這可能會嚴重降低性能。系統每次Pulse自動執行CSS和布局傳遞可以避免性能降級。在需要測量前一個Pulse時,應用開發者也能自動觸發布局或CSS傳遞。

Glass視窗包負責執行Pulse事件。它使用高解析度本地時間來做執行。

 

1.7  媒體和圖片

JavaFX媒體處理功能通過包javafx.scene.media包的APIs調用。JavaFX支持可視化和音頻媒體,支持的媒體格式有 MP3、AIFF、WAV音頻文件以及FLV視頻文件。JavaFX媒體功能通過三個獨立組件實現:媒體對象代表一個媒體文件,媒體播放器播放媒體文件, 媒體視圖是一個展示媒介的節點。

為提高媒體引擎組件(圖-1綠色部分)穩定性能,在2.0中已經完成重新設計了:既提高性能,也提供了跨平臺一致性行為表現。

 

1.8  嵌入瀏覽器

嵌入瀏覽器是JavaFX新的用戶界面組件,基于APIs它提供一個web查看器和一個完整的瀏覽功能。如圖-1中橘色部分,web引擎組件基于 Webkit,它是個一個開源的、支持HTML5、CSS、Javascript、DOM、以及SVG等的web瀏覽器引擎。這使開發者能夠在java應 用中實現如下特性:

?  從本地或遠程URL渲染HTML內容(以html方式瀏覽內容);

?  支持瀏覽歷史,實現回退和前進導航;

?  重載內容;

?  對web組件應用效果化處理;

?  編輯HTML內容;

?  執行Javascript命令;

?  處理事件。

 

嵌入瀏覽器組件有下面相關類構成:

?  WebEngine:提供基本頁面瀏覽能力;

?  WebView:封裝了一個WebEngine對象,把HTML內容合并到應用場景中,并提供字段和方法應用效果化和轉換。這是個Node類的擴展。

更多內容可以查看JavaFX嵌入瀏覽器相關介紹。

 

1.9  CSS(層疊樣式)

在不需要改變任何源碼情況下,CSS為JavaFX應用提供了定制式樣風格能力。CSS可應用到場景圖中任何節點及異步節點。CSS樣式很容易實時應用到場景中,允許應用程序動態改變面貌。圖-2演示了同樣UI控件在兩類CSS中的不同樣式:

圖-2 CSS樣式表示例

JavaFX CSS是基于W3C的CSS2.1版規范,并帶有一些3.0版內容。JavaFX的CSS支持和擴展被設計為可被任何兼容的CSS解析器清晰解析,甚至不 支持JavaFX擴展的解析器。這可以使JavaFX得CSS和其它目的CSS(如HTML頁面)混合為單一式樣單。所有javafx屬性名帶有廠商擴展 “-fx-”前綴,包括那些可能是兼容標準的HTML的CSS。因為有些Javafx值有略微不同的語義。

更多JavaFX有關CSS請查閱相關專題: SkinningJavaFX Applications with CSS.

 

1.10 UI控件

JavaFX可用界面控件(UI Controls)經JavaFX API在場景圖中通過使用節點被構建。這些控件能完全利用可視化豐富JavaFX平臺特性的的好處,并能輕便夸不同平臺。CSS允許UI控件實現不同主題和外觀。

圖-3展示了當前支持的圖形界面控件。新的Java UI控件,像TitlePane或Accordion已經引入到JavaFX2.0的SDK中,這些新組建在javafx.scene.control包中。

Description of Figure 3 follows

圖-3 JavaFX UI控件示例

更多界面控件信息,請查閱相關主題介紹: UsingJavaFX UI Controls  和 API documentation

 

1.11 布局設計(Layout)

在JavaFX應用場景圖中,布局容器或面板用于靈活和動態性布置UI控件位置。布局API包括如下常見的自動化布局模型的容器類:

?  BorderPane類:把內容節點框設在頂部、底部、右部、左部以及中間區域;

?  HBox類:在單行內水平放置內容節點;

?  VBox類:在單列中垂直放置內容節點;

?  StackPane類:在一個從后到前單棧中放置內容節點;

?  GridPane類:使開發者創建靈活的行列網格來安置內容節點;

?  FlowPane類:以水平或垂直“流化”形式放置內容節點,且包裝在指定寬(對水平)或高(對垂直)邊界內;

?  TilePane類:以一致尺寸的單元格或標題欄放置內容節點;

?  AnchorPane類:使開發者可以在布局的頂部、底部、左邊、或中部創建錨節點。

為了得到一個理想的布局結構,不同容器可在JavaFX應用中嵌套使用。

需要學習更多布局應用,請查看“Working with Layouts in JavaFX”相關文章。相應的布局API詳情,可查看javafx.scene.layout包。

1.12 2D和3D轉換

場景圖中的每個節點都可使用javafx.scene.tranform中的類基于X-Y坐標進行轉變:

?  Translate:可以相對初始位置,沿著XYZ把節點從一個位置面移到另一個位置面;

?  Scale:基于放縮因子,在XYZ方向上重設一個節點的大小;

?  Shear:旋轉一軸,使X和Y軸不在垂直,使節點的坐標基于指定的乘數被改變;

?  Rotate:以指定的的軸點旋轉場景中的節點;

?  Affine:執行從一個2D/3D坐標到另一個2D/3D坐標的線性映射,同時保留“直線”和“并行”的直線特性。這個類應該和TranslateScaleRotate, or Shear  轉換類一起使用,而不是直接使用。

需要學習更多關于JavaFX的轉換內容,查看“ ApplyingTransformations in JavaFX”文檔。

1.13 可視化效果

基于JavaFX場景圖的富客戶界面的開發,主要包括可視化效果的使用或是應用外觀效果的實時性強化。JavaFX效果主要是基于像素的圖像應用,也就是把場景圖中的一套節點作為一個圖片渲染,并能對它應用指定的效果處理。

JavaFX中一些有效可視化效果處理類如下:

?  Drop Shadow(拖放陰影):在應用效果的內容后渲染相應內容的陰影;

?  Reflection(倒影):在實際內容對象下面渲染相應的倒影;

?  Lighting(照射):在給定的內容對象上模擬發亮光源,并能形成平面對象,呈現一個真實的、3-D的面貌。

更多效果示例,請參考“ Creating Visual Effects”文檔。相應的API可查看javafx.scene.effect包。

 

1.14 部署

JavaFX應用程序可以三種不同的部署模式部署在桌面或瀏覽器中:

?  單機部署(Standalone):應用程序安裝在本地驅動,并可雙擊相應JAR文件運行。這種模式在用戶不需要或沒有聯機訪問時是理想選擇。

?  瀏覽器部署(Browser):這種模式中,應用程序被嵌入到頁面中,當訪問頁面時自動啟動程序。這通過Javascript可實現和頁面交互;

?  Web Start方式:這種模式需要從網上中心位置應用程序,然后在桌面上運行之。一旦下載完成,用戶可雙擊JNLP來運行相應的應用程序。

更多信息可查看“Deploying JavaFX Applications document”內容。

轉自:http://blog.csdn.net/s_ghost/article/details/7311549

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!