什麽是JavaFX
什麽是JavaFX
JavaFx平臺是一個富客戶端平臺解決方案,它能夠使用應用程序開發人員輕松的創建跨平臺的富客戶端應用程序。它構建在Java技術的基礎之上,JavaFX平臺提供了一組豐富的圖形和媒體API與高性能硬件加速圖形和媒體引擎,簡化開發數據驅動的企業客戶端應用程序。
JavaFX有以下優點:
- 因為JavaFX平臺是用Java編寫的,Java開發人員可以利用現有的技能和工具來開發JavaFX應用程序。
- 因為java是廣泛使用的,所以很容易找到能輕易將JavaFX應用變成產品的開發人員。
- 因為跟Java技術使用的是相同的服務端和客戶端的平臺,所以降低了應用企業解決方案所帶來的風險。
- 因為上述的優點所以開發成本也會降低。
- JavaFX提供給開發者一個創建跨平臺的企業級業務應用的開發框架和運行環境。
JavaFX的體系結構和框架
JavaFx平臺是一個構建於java技術基本上的並且容易創建和部署富客戶端平臺的跨平臺的應用。
下圖說明JavaFx 2的整體架構,分別描述了各個部件和各部分是如何聯系起來的。在下面的JavaFX API的基礎上就可以運行你的JavaFx代碼。它包括JavaFX的高性能的圖形引擎叫Prism;小而高效的窗口系統,叫Glass;還有一個媒體引擎和一個web引擎。雖然這些組件都不是公開的,但是它們的說明能幫助你更好的理解如何運行一個JavaFX應用程序。
圖1.JavaFx 2 整體架構
場景圖
JavaFX的場景圖,顯示在整體框架的最頂層,是整體JavaFX應用的起始點。它是一個分層次的樹狀結構的結點來表示應用用戶接口的可視化元素。它即能處理輸入也能渲染輸出。
一個場景中單獨的元素叫節點。每一個節點都有一個ID,樣式類和邊界值。除了根結點外,每一個節點都有一個父結點並且有0到多個子節點。它還可以有如下屬性:
- 效果,例如模糊和陰影
- 透明度
- 變換參數
- 事件處理(例如:鼠標、鍵盤和輸入)
- 特定的應用狀態
跟swing和AWT不同的是,JavaFX場景圖有布局、圖像和媒體等還有例如矩形和文本等。
在大多數應用中,場景圖中有很多容易使用的組件被使用。
javafx.scene
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功能能夠通過javafx.scene.media
被有效的使用。提供如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樣式也可以輕松地分配到在運行時的場景,讓應用程序的外觀動態更改。
下圖就是兩個應用了兩個不同的樣式但是組件相同的示例。
圖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列出了一部分可以使用的組件,它們都在javafx.scene.control
下。
圖3
Layout
與其它常見布局類似。
Deployment
JavaFX有三種部署方式:
單獨運行:可以安裝在本地雙擊進行運行。這種方式用戶可以不在線的方式進行訪問。
瀏覽器:在這種方式下,JavaFX被嵌入到一個web頁中自動加載,它能通過頁面的javascript與頁面上的元素進行交互。
web啟動:這種方式需要先進行下載,一旦下載完成,用戶能啟動應用通過下載的JNLP文件。
關鍵特性
主要包括以下特性:
- 完全整合JDK7。
- 提供相似的語法特性同Java API。
- 新的圖像處理引擎。
- FXML,一種基於xml的語言來定義JavaFX應用。
- 一個新的媒體引擎,支持播放多媒體內容的網頁。
- web能力的擴展。
- 各種各樣的內置的UI控件,包括圖表、表格、菜單和窗格等。
- 非常容易打包通過上面介紹的幾種方式。
- 跨平臺。
- 與Java API相同的API格式。
如何創建JavaFX應用
- 下載最新版本的JDk並且支持JavaFX。
- 安裝並且配置,按照向導創建一個簡單的應用。
- 下載JavaFX Scene Builder並且編譯和運行。
使用JavaFX Scene Builder
下載JavaFX Scene Builder。
註意:
JavaFX場景構建器沒有依賴任何特定IDE。您可以運行它作為一個獨立的工具來創建您的UI布局和編輯結果FXML文件使用一個文本編輯器,你的選擇。如果您選擇使用本教程外的NetBeans IDE,有部分在本教程中,強調需要做什麽來連接布局,您構建樣例應用程序的Java源代碼,應用樣式表,並運行樣例應用程序使用Apache Ant實用程序。
JavaFX Scene Builder的操作界面。
圖4
下載示例文件IssueTrackingLite.zip
可以選擇使用netbeans打開也可以使用Scene Builder打開。
我們選擇從netbeans導入。
圖5
因為netbeans裏沒有設計界面,所以界面的設計工作交給JavaFX Scene Builder,我們可以運行應用得到如下效果。
什麽是JavaFX