天天看點

JavaFX——(第一篇:介紹篇)什麼是JavaFXJavaFX的體系結構和架構關鍵特性如何建立JavaFX應用使用JavaFX Scene Builder

JavaFx平台是一個富用戶端平台解決方案,它能夠使用應用程式開發人員輕松的建立跨平台的富用戶端應用程式。它建構在Java技術的基礎之上,JavaFX平台提供了一組豐富的圖形和媒體API與高性能硬體加速圖形和媒體引擎,簡化開發資料驅動的企業用戶端應用程式。

JavaFX有以下優點:

因為JavaFX平台是用Java編寫的,Java開發人員可以利用現有的技能和工具來開發JavaFX應用程式。

因為java是廣泛使用的,是以很容易找到能輕易将JavaFX應用變成産品的開發人員。

因為跟Java技術使用的是相同的服務端和用戶端的平台,是以降低了應用企業解決方案所帶來的風險。

因為上述的優點是以開發成本也會降低。

JavaFX提供給開發者一個建立跨平台的企業級業務應用的開發架構和運作環境。

JavaFx平台是一個建構于java技術基本上的并且容易建立和部署富用戶端平台的跨平台的應用。

下圖說明JavaFx 2的整體架構,分别描述了各個部件和各部分是如何聯系起來的。在下面的JavaFX API的基礎上就可以運作你的JavaFx代碼。它包括JavaFX的高性能的圖形引擎叫Prism;小而高效的視窗系統,叫Glass;還有一個媒體引擎和一個web引擎。雖然這些元件都不是公開的,但是它們的說明能幫助你更好的了解如何運作一個JavaFX應用程式。

JavaFX——(第一篇:介紹篇)什麼是JavaFXJavaFX的體系結構和架構關鍵特性如何建立JavaFX應用使用JavaFX Scene Builder

           圖1.JavaFx 2 整體架構

場景圖

JavaFX的場景圖,顯示在整體架構的最頂層,是整體JavaFX應用的起始點。它是一個分層次的樹狀結構的結點來表示應用使用者接口的可視化元素。它即能處理輸入也能渲染輸出。

一個場景中單獨的元素叫節點。每一個節點都有一個ID,樣式類和邊界值。除了根結點外,每一個節點都有一個父結點并且有0到多個子節點。它還可以有如下屬性:

效果,例如模糊和陰影

透明度

變換參數

事件處理(例如:滑鼠、鍵盤和輸入)

特定的應用狀态

跟swing和AWT不同的是,JavaFX場景圖有布局、圖像和媒體等還有例如矩形和文本等。

在大多數應用中,場景圖中有很多容易使用的元件被使用。

<code>javafx.scene</code> API描述很多類型的元件,例如:

Nodes:包括Shapes (2-D and 3-D), images, media, embedded web browser, text, UI controls, charts, groups, and containers

State:Transforms (positioning and orientation of nodes), visual effects, and other visual state of the content

Effects:Simple objects that change the appearance of scene graph nodes, such as blurs, shadows, and color adjustment

Java APIs for JavaFX Features

JavaFX 2有一套完整的公共API顯示在最頂層。這些API能使你非常靈活的建立RIA應用。JavaFX平台結合了Java平台的最佳功能與綜合,身臨其境的媒體功能轉化成一種直覺的和全面的一站式的開發環境。這些新的Java API特性包括:

允許使用強大的Java特性:例如泛型、注釋、多線程等。

友善Web開發人員使用JavaFX從其他流行的動态語言,例如JRuby,Groovy和JavaScript。

允許Java開發人員使用其他系統語言,比如Groovy、為編寫大型或複雜的JavaFX應用程式。

允許使用綁定類似于JavaFX腳本語言。這包括支援高性能Lazy綁定,綁定表達式,綁定序清單達式,以及局部綁定。選擇的語言(比如Groovy)可以使用此綁定庫引入綁定文法類似于JavaFX腳本。

擴充Java collections庫來包括list和map等,根據集合内容的變化在界面上及時顯示以監控其對象的變化。

JavaFX 2向下相容JavaFX 1.x。大多數的API都可以相容,有一些API,例如Layout和Media等也有了相當大的改進。JavaFX 2支援更多的web标準,例如CSS樣式等。在後面也會支援更多的的标準。

圖形系統

JavaFX 2的圖形系統就是圖1中标藍的部分,是JavaFX場景圖的具體實作。它即包括2-D也包括3-D場景。它提供對硬體渲染的軟體優化。

JavaFX 2平台的圖形加速實作:

Prism:流程渲染工作。它能夠運作硬體和軟體渲染包括3-D。能夠渲染JavaFX場景。對于使用的社備有多個使用的路徑:

DirectX 9 在 Windows XP和Windows Vista上

DirectX 11在Windows 7上

OpenGL在Mac, Linux, 嵌入式

Java2D的硬體加速是不可能的

完全硬體加速的路徑時,使用是可能的,但當它不是有效的,使用Java2D渲染路徑,因為Java2D渲染路徑已經分布在所有的Java運作時環境(jre)。這是特别重要的,當處理3 d場景。然而,性能更好的硬體渲染路徑時使用。

Quantum Toolkit:綁定Prism和windows工具,使它們可以用于JavaFX。它還負責線程相關的規則和事件處理。

Glass Windowing Toolkit

Glass Windowing Toolkit在圖1的中間部分,它的主要的作用是提供本地操作服務,例如:管理視窗、定時器和外觀。它提供服務用于連接配接JavaFX平台和本地作業系統。

Glass Toolkit也能夠處理事件隊列。和AWT不同的是,它不僅管理自己的事件隊列還管理本地作業系統的事件。還有和AWT不同的是,Glass Toolkit運作一個JavaFX線程而AWT運作一個線程、java運作一個線程。通過這種方式解決了很多問題。

Threads

下面的線程是系統啟動後就會運作的,包括:

JavaFX application thread:這個是JavaFX應用的主線程。

Prism render thread:這個線程分别處理通過各自的事件分發程式。用于渲染事件分發。

Media thread:這個程式運作在背景通過最後的幀使用JavaFX應用線程。

Pulse

一個pulse是一個事件能訓示場景圖随時間變化的狀态。一個pulse正常運作是每秒60幀。甚至場景的動畫沒有改變pulse也可能發生變化。例如:當一個按鈕的位置發生改變,那麼pulse将被改變。

當一個pulse被觸發,那麼相應的改變也會同步的渲染層。pulse能使應用開發者處理異步的事件。這個重要的屬性允許系統批量的執行事件在pulse上。

Layout and CSS也有pulse事件。場景圖上的許多改變将導緻布局和CSS變化。系統将自動優化性能通過pulse。應用開發者可以通過手動的方式觸釋出局以根據需要。

Glass Windowing Toolkit應用于執行pulse事件。

Media and Images

JavaFX的media功能能夠通過<code>javafx.scene.media</code>被有效的使用。提供如mp3、AIFF、FLV等檔案的處理。JavaFX media提供了3種元件:媒體對象作為一個媒體檔案、媒體播放器播放一個媒體檔案、使用MediaView作為結點顯示媒體檔案。

媒體引擎元件顯示在圖1的綠色部分,在JavaFX 2中進行了重新設計并且改進了性能,進行了相關的擴充。

Embedded Browser

JavaFX的内置浏覽器是JavaFX的新的使用者接口,它可以提供全web浏覽功能通過這個API。這個部分顯示在圖1中的橙色的部分,它基于WebKit,這個開源的浏覽器引擎能提供支援對HTML5, CSS, JavaScript, DOM, and SVG。它能在java應用中開發下面的特性:

從本地或遠端的URL渲染HTML的内容

支援曆史浏覽并且提供回退和前進導航

重新加載内容

web元件的應用效果

編輯HTML内容

執行JavaScript指令

處理事件

内容浏覽器由以下類組成:

Web引擎提供基本的網頁浏覽功能。

一個Web引擎 WebView封裝對象,包含HTML内容到一個應用程式的場景,并提供了字段和方法應用效果和轉換。這是一個擴充節點的類。

CSS

JavaFX層疊樣式表(CSS)提供了定制樣式應用能力的使用者界面的一個JavaFX應用程式,而無需更改任何應用程式的源代碼。CSS可以應用于任何節點在JavaFX場景圖和應用于異步的節點。JavaFX的CSS樣式也可以輕松地配置設定到在運作時的場景,讓應用程式的外觀動态更改。

下圖就是兩個應用了兩個不同的樣式但是元件相同的示例。

JavaFX——(第一篇:介紹篇)什麼是JavaFXJavaFX的體系結構和架構關鍵特性如何建立JavaFX應用使用JavaFX Scene Builder

                      圖2

JavaFX CSS是基于W3C CSS 2.1版規範,并且能支援一些CSS 3的功能。JavaFX的CSS支援和擴充已經被設計為允許JavaFX的CSS樣式表是解析幹淨地通過任何相容CSS解析器,甚至不支援JavaFX擴充。這使得混合的CSS樣式為JavaFX以及其他用途(例如HTML頁面)成一個單一的樣式表。所有JavaFX屬性名稱加上字首供應商擴充的“fx -”,包括那些可能似乎符合标準的HTML的CSS,因為一些JavaFX值都有略微不同的語義。

UI Controls

他們可以充分利用豐富的視覺特征的JavaFX平台,可以在不同的平台。JavaFX CSS允許主題和皮膚的UI控件。

圖3列出了一部分可以使用的元件,它們都在<code>javafx.scene.control</code>下。

JavaFX——(第一篇:介紹篇)什麼是JavaFXJavaFX的體系結構和架構關鍵特性如何建立JavaFX應用使用JavaFX Scene Builder

              圖3

Layout

與其它常見布局類似。

Deployment

JavaFX有三種部署方式:

單獨運作:可以安裝在本地輕按兩下進行運作。這種方式使用者可以不線上的方式進行通路。

浏覽器:在這種方式下,JavaFX被嵌入到一個web頁中自動加載,它能通過頁面的javascript與頁面上的元素進行互動。

web啟動:這種方式需要先進行下載下傳,一旦下載下傳完成,使用者能啟動應用通過下載下傳的JNLP檔案。

主要包括以下特性:

完全整合JDK7。

提供相似的文法特性同Java API。

新的圖像處理引擎。

FXML,一種基于xml的語言來定義JavaFX應用。

一個新的媒體引擎,支援播放多媒體内容的網頁。

web能力的擴充。

各種各樣的内置的UI控件,包括圖表、表格、菜單和窗格等。

非常容易打包通過上面介紹的幾種方式。

跨平台。

與Java API相同的API格式。

下載下傳最新版本的JDk并且支援JavaFX。

安裝并且配置,按照向導建立一個簡單的應用。

下載下傳JavaFX Scene Builder并且編譯和運作。

下載下傳JavaFX Scene Builder。

注意:

JavaFX場景建構器沒有依賴任何特定IDE。您可以運作它作為一個獨立的工具來建立您的UI布局和編輯結果FXML檔案使用一個文本編輯器,你的選擇。如果您選擇使用本教程外的NetBeans IDE,有部分在本教程中,強調需要做什麼來連接配接布局,您建構樣例應用程式的Java源代碼,應用樣式表,并運作樣例應用程式使用Apache Ant實用程式。

JavaFX Scene Builder的操作界面。

                            圖4

可以選擇使用netbeans打開也可以使用Scene Builder打開。

我們選擇從netbeans導入。

                        圖5

因為netbeans裡沒有設計界面,是以界面的設計工作交給JavaFX Scene Builder,我們可以運作應用得到如下效果。

                          圖6