日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

JavaFX官方教程(二)之JavaFX体系结构

發(fā)布時間:2023/12/3 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaFX官方教程(二)之JavaFX体系结构 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

翻譯自? ?JavaFX體系結(jié)構(gòu)

本章提供了JavaFX體系結(jié)構(gòu)和生態(tài)系統(tǒng)的高級描述。

圖2-1說明了JavaFX平臺的架構(gòu)組件。圖中的部分描述了每個組件以及這些部件如何互連。JavaFX公共API下面是運行JavaFX代碼的引擎。它由包含JavaFX高性能圖形引擎的子組件組成,稱為Prism;?一個小而有效的窗口系統(tǒng),稱為玻璃;?媒體引擎和Web引擎。雖然這些組件未公開公開,但它們的描述可以幫助您更好地了解運行JavaFX應(yīng)用程序的內(nèi)容。

  • 場景圖

  • JavaFX功能的Java公共API

  • 圖形系統(tǒng)

  • 玻璃窗口工具包

  • 媒體和圖像

  • Web組件

  • CSS

  • UI控件

  • 布局

  • 二維和三維轉(zhuǎn)換

  • 視覺效果

圖2-1 JavaFX架構(gòu)圖


?

1、場景圖

JavaFX場景圖(如圖2-1中頂層的一部分所示)是構(gòu)建JavaFX應(yīng)用程序的起點。它是一個分層的節(jié)點樹,代表應(yīng)用程序用戶界面的所有可視元素。它可以處理輸入并可以呈現(xiàn)。

場景圖中的單個元素稱為節(jié)點。每個節(jié)點都有ID,樣式類和邊界卷。除場景圖的根節(jié)點外,場景圖中的每個節(jié)點都有一個父節(jié)點和零個或多個子節(jié)點。它還可以具有以下內(nèi)容:

  • 效果,如模糊和陰影

  • 不透明度

  • 變換

  • 事件處理程序(如鼠標(biāo),鍵和輸入法)

  • 特定于應(yīng)用程序的狀態(tài)

與Swing和Abstract Window Toolkit(AWT)不同,JavaFX場景圖除了包含控件,布局容器,圖像和媒體外,還包括圖形基元,如矩形和文本。

對于大多數(shù)用途,場景圖簡化了UI的使用,尤其是在使用豐富的UI時。可以使用javafx.animation API快速完成場景圖中各種圖形的動畫制作,并且聲明性方法(如XML doc)也可以很好地工作。

該javafx.sceneAPI允許創(chuàng)建和幾種類型的內(nèi)容,如規(guī)范:

  • 節(jié)點:形狀(2-D和3-D),圖像,媒體,嵌入式Web瀏覽器,文本,UI控件,圖表,組和容器

  • 狀態(tài):變換(節(jié)點的定位和方向),視覺效果和內(nèi)容的其他視覺狀態(tài)

  • 效果:用于更改場景圖節(jié)點外觀的簡單對象,例如模糊,陰影和顏色調(diào)整

有關(guān)更多信息,請參閱使用JavaFX場景圖文檔。

?

2、JavaFX功能的Java公共API

圖2-1中所示的JavaFX體系結(jié)構(gòu)的頂層提供了一整套支持富客戶端應(yīng)用程序開發(fā)的Java公共API。這些API為構(gòu)建富客戶端應(yīng)用程序提供了無與倫比的自由度和靈活性。JavaFX平臺將Java平臺的最佳功能與全面的沉浸式媒體功能結(jié)合到一個直觀,全面的一站式開發(fā)環(huán)境中。這些Java API for JavaFX功能:

  • 允許使用強大的Java功能,例如泛型,注釋,多線程和Lamda Expressions(在Java SE 8中引入)。

  • 使Web開發(fā)人員可以更輕松地使用其他基于JVM的動態(tài)語言(如Groovy和JavaScript)中的JavaFX。

  • 允許Java開發(fā)人員使用其他系統(tǒng)語言(如Groovy)來編寫大型或復(fù)雜的JavaFX應(yīng)用程序。

  • 允許使用綁定,包括支持高性能延遲綁定,綁定表達式,綁定序列表達式和部分綁定重新評估。替代語言(如Groovy)可以使用此綁定庫來引入類似于JavaFX Script的綁定語法。

  • 擴展Java集合庫以包括可觀察列表和映射,這允許應(yīng)用程序?qū)⒂脩艚缑孢B接到數(shù)據(jù)模型,觀察這些數(shù)據(jù)模型中的更改,并相應(yīng)地更新相應(yīng)的UI控件。

JavaFX API和編程模型是JavaFX 1.x產(chǎn)品系列的延續(xù)。大多數(shù)JavaFX API已直接移植到Java。根據(jù)從JavaFX 1.x版本的用戶收到的反饋,一些API(例如布局和媒體)以及許多其他細節(jié)已得到改進和簡化。JavaFX更多地依賴于Web標(biāo)準(zhǔn),例如用于樣式控件的CSS和用于可訪問性規(guī)范的ARIA。還在審查其他網(wǎng)絡(luò)標(biāo)準(zhǔn)的使用。

?

3、圖形系統(tǒng)

JavaFX圖形系統(tǒng)(如圖2-1中的藍色所示)是JavaFX場景圖層下的實現(xiàn)細節(jié)。它支持2-D和3-D場景圖。當(dāng)系統(tǒng)上的圖形硬件不足以支持硬件加速渲染時,它提供軟件渲染。

JavaFX平臺上實現(xiàn)了兩個圖形加速管道:

  • 棱鏡過程渲染工作。它可以在硬件和軟件渲染器上運行,包括3-D。它負責(zé)JavaFX場景的光柵化和渲染。根據(jù)使用的設(shè)備,可能有以下多個渲染路徑:

    • Windows XP和Windows Vista上的DirectX 9

    • Windows 7上的DirectX 11

    • Mac,Linux,Embedded上的OpenGL

    • 無法進行硬件加速時的軟件渲染

      盡可能使用完全硬件加速路徑,但是當(dāng)它不可用時,使用軟件渲染路徑,因為軟件渲染路徑已經(jīng)分布在所有Java運行時環(huán)境(JRE)中。這在處理3-D場景時尤為重要。但是,使用硬件渲染路徑時性能會更好。

  • Quantum Toolkit將Prism和Glass Windowing Toolkit結(jié)合在一起,并將它們提供給堆棧中位于它們之上的JavaFX層。它還管理與呈現(xiàn)和事件處理相關(guān)的線程規(guī)則。

?

4、玻璃窗口工具包

Glass Windowing Toolkit,如圖2-1中間部分以米色顯示,是JavaFX圖形堆棧中的最低級別。其主要職責(zé)是提供本地操作服務(wù),例如管理窗口,計時器和曲面。它充當(dāng)依賴于平臺的層,將JavaFX平臺連接到本機操作系統(tǒng)。

Glass工具包還負責(zé)管理事件隊列。與管理自己的事件隊列的Abstract Window Toolkit(AWT)不同,Glass工具包使用本機操作系統(tǒng)的事件隊列功能來調(diào)度線程使用情況。與AWT不同,Glass工具包在與JavaFX應(yīng)用程序相同的線程上運行。在AWT中,AWT的原生一半在一個線程上運行,Java級別在另一個線程上運行。這引入了許多問題,其中許多問題都是通過使用單一JavaFX應(yīng)用程序線程方法在JavaFX中解決的。

主題

系統(tǒng)在任何給定時間運行以下兩個或多個線程。

  • JavaFX應(yīng)用程序線程:這是JavaFX應(yīng)用程序開發(fā)人員使用的主要線程。必須從該線程訪問任何“實時”場景,該場景是窗口的一部分。可以在后臺線程中創(chuàng)建和操作場景圖,但是當(dāng)其根節(jié)點附加到場景中的任何活動對象時,必須從JavaFX應(yīng)用程序線程訪問該場景圖。這使開發(fā)人員能夠在后臺線程上創(chuàng)建復(fù)雜的場景圖,同時保持“實時”場景的動畫流暢,快速。JavaFX應(yīng)用程序線程是與Swing和AWT事件調(diào)度線程(EDT)不同的線程,因此在將JavaFX代碼嵌入Swing應(yīng)用程序時必須小心。

  • Prism渲染線程:此線程與事件調(diào)度程序分開處理渲染。它允許在處理幀N + 1時渲染幀N.?這種執(zhí)行并發(fā)處理的能力是一個很大的優(yōu)勢,特別是在具有多個處理器的現(xiàn)代系統(tǒng)上。Prism渲染線程也可能有多個光柵化線程,有助于卸載需要在渲染中完成的工作。

  • 媒體線程:此線程在后臺運行,并使用JavaFX應(yīng)用程序線程通過場景圖同步最新幀。

脈沖

脈沖是向JavaFX場景圖指示是時候?qū)鼍皥D上的元素的狀態(tài)與Prism同步的事件。脈沖以每秒60幀(fps)的速度進行限制,并在場景圖上運行動畫時觸發(fā)。即使動畫未運行,當(dāng)場景圖中的某些內(nèi)容發(fā)生變化時,也會調(diào)度脈沖。例如,如果改變按鈕的位置,則調(diào)度脈沖。

觸發(fā)脈沖時,場景圖上元素的狀態(tài)將向下同步到渲染層。脈沖使應(yīng)用程序開發(fā)人員能夠以異步方式處理事件。這一重要功能允許系統(tǒng)批量處理脈沖上的事件。

布局和CSS也與脈沖事件有關(guān)。場景圖中的大量更改可能導(dǎo)致多個布局或CSS更新,這可能會嚴重降低性能。系統(tǒng)每個脈沖自動執(zhí)行一次CSS和布局傳遞,以避免性能下降。應(yīng)用程序開發(fā)人員還可以根據(jù)需要手動觸發(fā)布局過程,以便在脈沖之前進行測量。

Glass Windowing Toolkit負責(zé)執(zhí)行脈沖事件。它使用高分辨率本機定時器來執(zhí)行。

?

5、媒體和圖像

JavaFX媒體功能可通過javafx.scene.mediaAPI獲得。JavaFX支持視覺和音頻媒體。支持MP3,AIFF和WAV音頻文件和FLV視頻文件。JavaFX媒體功能作為三個單獨的組件提供:Media對象表示媒體文件,MediaPlayer播放媒體文件,MediaView是顯示媒體的節(jié)點。

Media Engine組件(如圖2-1中的綠色所示)在設(shè)計時考慮了性能和穩(wěn)定性,并提供跨平臺的一致行為。有關(guān)更多信息,請閱讀將媒體資產(chǎn)合并到JavaFX應(yīng)用程序文檔中。

?

6、Web組件

Web組件是基于Webkit的JavaFX UI控件,通過其API提供Web查看器和完整瀏覽功能。此Web Engine組件(如圖2-1中的橙色所示)基于WebKit,WebKit是一個支持HTML5,CSS,JavaScript,DOM和SVG的開源Web瀏覽器引擎。它使開發(fā)人員能夠在其Java應(yīng)用程序中實現(xiàn)以下功能:

  • 從本地或遠程URL呈現(xiàn)HTML內(nèi)容

  • 支持歷史記錄并提供后退和前進導(dǎo)航

  • 重新加載內(nèi)容

  • 將效果應(yīng)用于Web組件

  • 編輯HTML內(nèi)容

  • 執(zhí)行JavaScript命令

  • 處理事件

此嵌入式瀏覽器組件由以下類組成:

  • WebEngine?提供基本的網(wǎng)頁瀏覽功能。

  • WebView封裝WebEngine對象,將HTML內(nèi)容合并到應(yīng)用程序的場景中,并提供應(yīng)用效果和轉(zhuǎn)換的字段和方法。它是一個Node類的擴展。

此外,可以通過JavaScript控制Java調(diào)用,反之亦然,以允許開發(fā)人員充分利用這兩種環(huán)境。有關(guān)JavaFX嵌入式瀏覽器的更詳細概述,請參閱向HTMLFX應(yīng)用程序添加HTML內(nèi)容文檔。

?

7、CSS

JavaFX級聯(lián)樣式表(CSS)提供了將自定義樣式應(yīng)用于JavaFX應(yīng)用程序的用戶界面而無需更改任何應(yīng)用程序源代碼的功能。CSS可以應(yīng)用于JavaFX場景圖中的任何節(jié)點,并以異步方式應(yīng)用于節(jié)點。JavaFX CSS樣式也可以在運行時輕松分配給場景,從而允許應(yīng)用程序的外觀動態(tài)更改。

圖2-2演示了將兩種不同的CSS樣式應(yīng)用于同一組UI控件。

圖2-2 CSS樣式表示例

JavaFX CSS基于W3C CSS 2.1版規(guī)范,并在版本3的當(dāng)前工作中添加了一些內(nèi)容.JavaFX CSS支持和擴展旨在允許任何兼容的CSS解析器干凈地解析JavaFX CSS樣式表,即使是不支持JavaFX擴展。這樣就可以將JavaFX的CSS樣式和其他用途(例如HTML頁面)混合到一個樣式表中。所有JavaFX屬性名稱都以供應(yīng)商擴展名“?-fx-”?為前綴,包括那些似乎與標(biāo)準(zhǔn)HTML CSS兼容的屬性,因為某些JavaFX值的語義略有不同。

有關(guān)JavaFX CSS的更多詳細信息,請參閱使用CSS獲取JavaFX應(yīng)用程序文檔。

?

8、UI控件

通過JavaFX API提供的JavaFX UI控件是通過使用場景圖中的節(jié)點構(gòu)建的。他們可以充分利用JavaFX平臺的視覺豐富功能,并可跨不同平臺移植。JavaFX CSS允許UI控件的主題和外觀。

圖2-3顯示了當(dāng)前支持的一些UI控件。這些控件位于javafx.scene.control包中。

圖2-3 JavaFX UI控件示例

有關(guān)所有可用JavaFX UI控件的更多詳細信息,請參閱使用JavaFX UI控件和該程序包的API文檔javafx.scene.control。

?

9、布局

布局容器或窗格可用于允許JavaFX應(yīng)用程序的場景圖內(nèi)的UI控件的靈活和動態(tài)布置。JavaFX Layout API包括以下容器類,可自動執(zhí)行常見的布局模型:

  • 本BorderPane類勾畫出其內(nèi)容節(jié)點上,下,左,右,或中心區(qū)域。

  • 該HBox級水平排列其內(nèi)容節(jié)點在單行。

  • 所述VBox類垂直排列其內(nèi)容節(jié)點在單個列中。

  • 該StackPane班將它的內(nèi)容節(jié)點在后到前的單堆。

  • 本GridPane類允許開發(fā)人員創(chuàng)建的行和列的靈活的網(wǎng)格中,奠定了內(nèi)容節(jié)點。

  • 所述FlowPane類安排其內(nèi)容節(jié)點在水平或垂直的“流”,纏繞在指定的寬度(對于水平)或高度(對于垂直)的邊界。

  • 該TilePane班將它的內(nèi)容節(jié)點,大小均勻的布局單元格或瓷磚

  • 在AnchorPane類允許開發(fā)人員創(chuàng)建錨節(jié)點的頂部,底部,左側(cè),或中心的布局。

為了實現(xiàn)所需的布局結(jié)構(gòu),可以將不同的容器嵌套在JavaFX應(yīng)用程序中。

要了解有關(guān)如何使用布局的更多信息,請參閱JavaFX中的使用布局文章。有關(guān)JavaFX布局API的更多信息,請參閱該javafx.scene.layout軟件包的API文檔。

?

10、二維和三維轉(zhuǎn)換

可以使用以下javafx.scene.tranform類在xy坐標(biāo)中轉(zhuǎn)換JavaFX場景圖中的每個節(jié)點:

  • translate?- 沿x,y,z平面相對于其初始位置將節(jié)點從一個位置移動到另一個位置。

  • scale?- 根據(jù)縮放因子,調(diào)整節(jié)點的大小,使其在x,y,z平面中顯得更大或更小。

  • shear?- 旋轉(zhuǎn)一個軸,使x軸和y軸不再垂直。節(jié)點的坐標(biāo)移動指定的乘數(shù)。

  • rotate?- 圍繞場景的指定軸點旋轉(zhuǎn)節(jié)點。

  • affine?- 執(zhí)行從2-D / 3-D坐標(biāo)到其他2-D / 3-D坐標(biāo)的線性映射,同時保留線的“直線”和“平行”屬性。此類應(yīng)用使用Translate,Scale,Rotate,或Shear變換,而不是直接使用的類。

要了解有關(guān)使用轉(zhuǎn)換的更多信息,請參閱JavaFX文檔中的應(yīng)用轉(zhuǎn)換。有關(guān)javafx.scene.transformAPI類的更多信息,請參閱API文檔。

?

11、視覺效果

JavaFX場景圖中富客戶端接口的開發(fā)涉及使用Visual Effects或Effects來實時增強JavaFX應(yīng)用程序的外觀。JavaFX效果主要是基于圖像像素的,因此,它們采用場景圖中的節(jié)點集,將其渲染為圖像,并將指定的效果應(yīng)用于它。

JavaFX中可用的一些視覺效果包括使用以下類:

  • Drop Shadow?- 在應(yīng)用效果的內(nèi)容后面呈現(xiàn)給定內(nèi)容的陰影。

  • Reflection?- 在實際內(nèi)容下方呈現(xiàn)內(nèi)容的反映版本。

  • Lighting?- 模擬照射在給定內(nèi)容上的光源,并使平面物體具有更逼真的三維外觀。

有關(guān)如何使用某些可用視覺效果的示例,請參閱“?創(chuàng)建視覺效果”文檔。有關(guān)所有可用視覺效果類的更多信息,請參閱該包的API文檔javafx.scene.effect。

總結(jié)

以上是生活随笔為你收集整理的JavaFX官方教程(二)之JavaFX体系结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。