成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

JavaFX架構與框架

2011-10-11 09:19:42來源:作者:

JavaFX 2.0平臺是基于Java技術的富客戶端平臺。它使應用程序開發者更加容易的開發和部署跨平臺的富互聯網應用(RIA)。JavaFX 2.0文檔包含了JavaFX 2.0所提供的功能的概述。

JavaFX 2.0平臺是基于Java技術的富客戶端平臺。它使應用程序開發者更加容易的開發和部署跨平臺的富互聯網應用(RIA)。JavaFX 2.0文檔包含了JavaFX 2.0所提供的功能的概述。

圖1描述了JavaFX 2.0平臺的架構組件。后面的部分將對每一個組件進行逐一的描述。在JavaFX通用API的下面是用來運行JavaFX代碼的引擎。這個引擎包括以下子組件:JavaFX高性能圖形引擎(Prism);新的更小但更有效率的窗體系統(Glass);媒體引擎和Web引擎。雖然這些組件不是包括在外的,但是他們的描述能幫助你更好地理解JavaFX應用是如何運行的。

JavaFX 2.0 架構圖
 

圖1 JavaFX 2.0 架構圖

場景(Scene Graph)

JavaFX的場景(Scene Graph)是JavaFX應用程序創建的開始點。它是一棵層次樹,其每個節點都代表了一個應用程序UI的視覺元素。它可以處理輸入并被渲染。

在場景中的一個元素叫做節點(node)。每個節點都有其ID,樣式類別和包圍盒(不熟悉計算機圖形學.....原文為bounding volume,我挺想翻譯為基準線或者輪廓線的)。在場景中的每個節點都有一個唯一的雙親節點和零到多個孩子結點。一個節點還可以包含:

l  效果(Effect),比如模糊或陰影效果

l  透明

l  變換

l  事件處理(比如鼠標、鍵盤或其他輸入方式)

l  應用程序定義的狀態

不同于Swing或者AWT,JavaFX的場景除了包含控制、布局管理器、圖像和媒體外,也有基本圖元,如矩形或者文字。

對于大多數用戶來說,場景簡化了用戶實現UI的工作,特別是用戶實現富UI的時候。在場景中繪制各種圖形可以被快捷地完成,而且可以使用如XML文檔一樣的聲明式方法。

javafx.scene API允許創建和定義許多種內容,如:

l  節點(Nodes):2D或者3D的圖形、圖像、媒體、嵌入式web瀏覽器、文字、UI控件、圖標、組和容器。

l  狀態(State):變換(節點的位置和方向),視覺效果和其他內容的視覺狀態。

l  動畫(Animation):場景對象在一段時間中的屬性變化

l  效果(Effects):可以修改場景節點的外觀,如模糊、陰影和顏色調整。

你可以從Working with the JavaFX Scene Graph文檔獲取更多的信息。

為實現JavaFX特征提供的Java API

如圖1中的最頂層顯示的那樣,JavaFX 2.0平臺包括一組完整的公共API。這些API為創建富客戶端應用提供無可比擬的自由度和靈活性。JavaFX平臺將Java平臺的如身臨其境般的媒體功能融入直觀的一站式綜合開發環境之中。這些新的Java API實現了JavaFX的以下特點:

l  允許使用強大的Java語言特征,如泛型、注解和多線程技術

l  對于Web開發人員,JavaFX提供使用動態語言編寫方式,如使用JRuby、Groovy和JavaScript

l  允許Java開發人員使用其他的系統語言去編寫龐大復雜的JavaFX應用,如Groovy

l  允許使用與JavaFX腳本語言類似的綁定機制(binding)。這包括提供高性能的延遲綁定機制,綁定表達式和序列表達式,部分綁定重求值(不理解....)。其他語言(如Groovy)可以使用如JavaFX腳本語言一樣的綁定庫來實現語法級別的綁定。

l  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平臺上實現了兩個圖形加速管道:

l  Prism:Prism處理渲染工作。他的渲染工作,包括3D渲染,都可以運行在硬件和軟件渲染單元之上。它負責處理光柵和渲染JavaFX場景。基于所使用的設備的不同,可能有以下的渲染途徑:

n  在Windows XP和Vista下使用DirectX 9

n  在Windows 7下使用DirectX 11

n  在Mac,Linux,嵌入式系統上使用OpenGL

n  如果硬件加速不可用,使用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系統都運行于兩個以上的線程:

l  JavaFX應用程序線程(JavaFX Application Thread):這是JavaFX應用開發人員所要使用的主要線程。任何“活著的”場景(指場景是窗口的一部分)都只能從這個線程訪問。然而,場景也可以從后臺線程創建,這使得開發人員可以從后臺線程創建復雜的場景而同時保證“活著的”場景中的動畫平滑而快速地播放。JavaFX應用程序線程與Swing或AWT得事件派發線程(EDT)不同,所以當把JavaFX代碼嵌入Swing應用中時,必須格外當心。

l  Prism渲染線程(Prism Render Thread):這個線程只處理渲染工作,而不干預事件派發線程。它允許第N幀播放時的同時,N+1幀正在被處理。這種能力對于提高并發處理能力有著極大地好處,尤其是在現代的多處理器系統中尤為出色。Prism渲染線程也可以開啟多個光柵線程去幫助分擔渲染工作。

l  媒體線程(Media Thread):這個線程運行于后臺并通過JavaFX應用程序線程所使用的場景來同步最新的幀。

脈搏(Pulse)

脈搏(Pulse,先這么翻譯吧,等官方翻譯出來再修改,其本質就是Repaint信號)是JavaFX應使用Prism去同步場景和場景中的元素狀態的標志。脈搏的最大速度為60幀/秒(FPS),而且無論何時只要場景中的動畫進行,那么就會發送脈搏通知。即使動畫沒有進行,當場景發生改變,也會發送脈搏通知。例如,當一個按鈕的位置發生了變化,那么就會安排一個脈搏通知。

當發送脈搏信號后,場景中的元素的狀態就會根據渲染層進行同步。脈搏可以使應用程序開發者對于事件進行異步處理。這個重要的特點使得系統可以在一個脈搏來臨前將事件進行批量處理。

布局管理和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應用中實現以下功能:

l  渲染本地或遠程的HTML內容

l  支持歷史功能,并提供前進和后退導航

l  重新載入內容

l  向Web組件增加效果

l  編輯HTML內容

l  執行JavaScript命令

l  處理事件

這個嵌入式瀏覽器組件包括一下的類:

l  WebEngine 提供基本的Web頁訪問功能

l  WebView 封裝了一個WebEngine對象,可將HTML內容放入應用程序場景中,并提供域和方法來應用效果和變換。它是Node類的子類。

你可以閱讀Adding HTML Content to JavaFX Applications文檔來獲取更多的關于JavaFX嵌入式瀏覽器的細節。

CSS

在JavaFX中CSS提供了對于JavaFX中UI應用定制樣式而無需改變代碼的能力。CSS可以被異步地應用于任何JavaFX場景中的節點。JavaFX CSS樣式也可以在運行期間被簡單地賦予場景,并允許動態修改應用程序外觀。

圖2顯示了同一應用程序在兩個不同CSS樣式下的效果:

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包中。

JavaFX UI控件范例
 

圖3 JavaFX UI控件范例

你可以閱讀Using JavaFX UI Controls文檔和API文檔中的javafx.scene.control 包來獲取更多的細節信息。

布局

布局容器或窗格可被用于在JavaFX應用程序場景中動態、靈活地管理UI控件。JavaFX布局API包括以下容器類,這些類可以自動進行布局:

l  BorderPane將其內容節點分布于上、下、左、右、中間位置。

l  HBox將其內容節點水平布局于一行中

l  VBox將其內容節點垂直布局于一列中

l  StackPane將其內容節點以從后到前的順序布局于一個棧中

l  GridPane允許開發人員創建靈活行列數目的格子,并在格子中存放內容節點

l  FlowPane將其內容節點在水平方向或垂直方向上按順序布局,并以特定寬度和高度的邊界進行包裹。

l  TilePane將其內容節點布局于一致大小的單元中。

l  AnchorPane允許開發人員在上下左右或者中間創建錨節點。

在JavaFX應用中,想要實現希望的布局效果,可以綜合使用不同的容器。

你可以閱讀Working with Layouts in JavaFX文獻或查看API中的javafx.scene.layout包來獲取更多信息。

2D和3D變換

在JavaFX場景中的每個節點都可以使用javafx.scene.transform(原文這里應該是打錯了)進行二維坐標變換:

l  平移變換(translate):將一個節點從一個地方根據初始位置移動到另一個地方

l  拉伸變換(scale):將一個節點根據縮放因子進行縮放

l  扭曲變換(shear):將一個節點根據不垂直的x、y軸進行旋轉。

l  旋轉變換(rotate):將一個節點根據場景中的某個點進行旋轉

l  仿射變換(affine):(若干balabala...看計算機圖形學教材吧...)該變換不應被直接使用,而是應該使用Translate、Scale、Rotate、Shear來代替。

你可以閱讀Applying Transformations in JavaFX文檔或查看API中javafx.scene.transform包來獲取更多信息。

視覺效果

在JavaFX場景中使用視覺效果可以提升JavaFX應用的觀賞度。JavaFX效果主要是基于圖像點的,因此他可以應用于場景中的一組節點,像圖像一樣渲染節點并對其應用指定效果。

在JavaFX中有一些視覺效果,下面是一部分:

l  陰影(Drop Shadow):在給定的內容背后渲染陰影。

l  反射(Reflection):在內容的下面渲染反射效果

l  光照(Lighting):模擬光源照射在給定的內容上,可以將扁平的對象變得更加真實,3D化。

Creating Visual Effects文檔中有更多的如何使用視覺效果的例子。更多的視覺效果類參見API文檔中的javafx.scene.effect包。

部署

JavaFX應用可以通過三種不同的方式被部署于桌面或在瀏覽器中:

l  獨立(Standalone):JavaFX應用被安裝在本地磁盤中,并通過雙擊JAR文件來啟動。當用戶無需進行線上訪問或應用沒有線上功能時,這種模式是最理想的。

l  瀏覽器(Browser):在這種模式下,JavaFX應用被嵌入一個Web頁中并隨著Web頁被訪問而自動啟動。它可以跟Web頁中JavaScript進行交互。

l  網頁啟動(Web Start):這種模式下,用戶下載應用程序并在本地運行。一旦被下載,用戶在此之后就可以通過雙擊JNLP文件來啟動應用。

你可以閱讀Deploying JavaFX Applications document文檔來查看更多關于三種模式和如何準備JavaFX應用部署的信息。

原文地址:http://download.oracle.com/javafx/2.0/architecture/jfxpub-architecture.htm

主站蜘蛛池模板: 襄汾县| 睢宁县| 湄潭县| 突泉县| 漳浦县| 德昌县| 长沙市| 长泰县| 砀山县| 德清县| 栖霞市| 阳新县| 界首市| 尼木县| 中江县| 瓮安县| 万荣县| 承德县| 扶余县| 饶河县| 林周县| 田东县| 三门峡市| 开阳县| 娄底市| 东乡县| 钟祥市| 洪泽县| 伊宁市| 隆安县| 龙岩市| 焦作市| 遵义市| 灌云县| 哈密市| 仙桃市| 隆尧县| 海盐县| 望江县| 龙州县| 加查县|