自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

手把手教你使用JavaFX

譯文
開發(fā) 后端
本文介紹了JavaFX的主要特性、應(yīng)用結(jié)構(gòu)、以及各個(gè)組件,并且以實(shí)例形式展示了如何使用JavaFX來構(gòu)建GUI應(yīng)用。

[[411015]]

【51CTO.com快譯】1.概述

JavaFX是一個(gè)可被用于構(gòu)建富互聯(lián)網(wǎng)應(yīng)用(Rich Internet Applications,RIA)的Java庫(kù)。它通過提供一組圖形和媒體包,使開發(fā)人員能夠設(shè)計(jì)、創(chuàng)建、測(cè)試、調(diào)試、以及部署富客戶端的應(yīng)用程序,并使之能夠在不同平臺(tái)上保持運(yùn)行的一致性。

通過提供豐富的圖形用戶界面,JavaFX可以實(shí)現(xiàn)專用于動(dòng)畫、2D和3D幾何、圖表、特殊效果、顏色漸變、圖形控件、以及多媒體(包括:音頻、視頻和圖像)的簡(jiǎn)單操作結(jié)構(gòu)與API。

2.JavaFX的主要特性

  • 跨平臺(tái)兼容性:JavaFX可被用于Windows、Linux、以及MacOSX等主流桌面操作系統(tǒng)。
  • Java庫(kù):作為一個(gè)Java庫(kù),JavaFX是由原生Java代碼編寫的類和接口所組成。
  • FXML:它是一種基于XML的聲明性標(biāo)記語(yǔ)言,可用于定義JavaFX應(yīng)用的用戶接口結(jié)構(gòu)。
  • WebView:作為一個(gè)Web組件,它使用WebKitHTML技術(shù)在JavaFX應(yīng)用程序中嵌入HTML內(nèi)容。在WebView中運(yùn)行的JavaScript可以實(shí)現(xiàn)與JavaAPI的相互調(diào)用。
  • Swing互操作性:現(xiàn)有的Swing應(yīng)用程序可以通過諸如嵌入式Web內(nèi)容、以及豐富的圖形媒體等JavaFX功能,來實(shí)現(xiàn)更新。相比使用Swing,我們更容易使用JavaFX來創(chuàng)建豐富的內(nèi)容。
  • 各種內(nèi)置的UI控件:JavaFX提供了開發(fā)全功能應(yīng)用所需的各種主要UI控件。
  • 類CSS樣式:JavaFX可以使用諸如CSS的標(biāo)準(zhǔn)Web技術(shù),來進(jìn)行外觀設(shè)計(jì)。同時(shí),它通過提供類似CSS的樣式,來改進(jìn)我們的應(yīng)用設(shè)計(jì)。
  • Canvas API:該API支持直接在由一個(gè)圖形元素組成的JavaFX場(chǎng)景區(qū)域內(nèi)繪圖。
  • 多點(diǎn)觸控支持:JavaFX針對(duì)底層平臺(tái)的功能,提供了對(duì)多點(diǎn)觸控操作的支持。
  • 集成圖形庫(kù):JavaFX提供了各種可用于2D和3D圖形的類。
  • 圖形管道:JavaFX支持那些基于硬件加速圖形渲染管道(hardware-accelerated graphics rendering pipeline,或被稱為Prism)的圖形。也就是說,當(dāng)與被支持的圖形卡或GPU一起使用時(shí),它能夠提供流暢的圖形。如果系統(tǒng)不支持某個(gè)圖形卡,那么Prism則會(huì)被默認(rèn)為軟件渲染棧。
  • 自包含的應(yīng)用部署模型:此類自包含應(yīng)用包具有所有應(yīng)用程序資源,以及Java和JavaFX運(yùn)行時(shí)的私有副本。它們作為可安裝在本機(jī)軟件包被分發(fā),并提供了與操作系統(tǒng)上本地應(yīng)用相同的安裝和啟動(dòng)體驗(yàn)。

3.JavaFX的應(yīng)用結(jié)構(gòu)

如上圖所示,JavaFX使用一個(gè)劇院模型,來比喻圖形應(yīng)用的建模。

舞臺(tái)(Stage)

  • 舞臺(tái)代表了頂級(jí)容器或窗口。它包含JavaFX應(yīng)用中的所有對(duì)象。
  • 它是由JavaFX.stage.Stage類所定義的。
  • 我們可以通過傳遞其尺寸(即:高度和寬度),來指定舞臺(tái)的大小。
  • 舞臺(tái)被分為內(nèi)容區(qū)域和裝飾區(qū)域(即:標(biāo)題欄和邊框)。

場(chǎng)景(Scene)

  • 場(chǎng)景表示JavaFX應(yīng)用程序的物理內(nèi)容。它包含了所有單獨(dú)的控件或組件。
  • 它是由JavaFX.scene.Scene類所定義的。
  • 一個(gè)應(yīng)用可以有多個(gè)場(chǎng)景,但在任何給定時(shí)間內(nèi),舞臺(tái)上只能顯示一個(gè)場(chǎng)景。
  • 場(chǎng)景的大小可以通過將其尺寸(即:高度和寬度)、連同根節(jié)點(diǎn)一起,傳遞給其構(gòu)造函數(shù)來指定。

場(chǎng)景圖(Scene Graph)

  • 場(chǎng)景圖是表示場(chǎng)景內(nèi)容的樹狀數(shù)據(jù)結(jié)構(gòu)(分層)。所有可視組件,包括:控件、布局等,都是場(chǎng)景圖的一部分。
  • 場(chǎng)景圖組件必須被附加到待顯示的場(chǎng)景中,并且必須被進(jìn)一步附加到舞臺(tái)中,才能使得整個(gè)場(chǎng)景可見。

節(jié)點(diǎn)(Nodes)

  • 節(jié)點(diǎn)是場(chǎng)景圖的視覺與圖形對(duì)象。
  • 場(chǎng)景圖的節(jié)點(diǎn)是由JavaFX.scene.Node類所定義的。
  • 一個(gè)節(jié)點(diǎn)可以包括:
  1. 各種幾何或圖形對(duì)象:2D、3D。
  2. 各種UI控件:Button、CheckBox、ChoiceBox、以及TextArea等。
  3. 各種容器或布局板式:BorderPane、GridPane、以及FlowPane等。
  4. 各種媒體元素:Audio、Video、以及Image對(duì)象。
  • 節(jié)點(diǎn)有以下類型:
  1. 根節(jié)點(diǎn):是場(chǎng)景圖中的第一個(gè)節(jié)點(diǎn)。
  2. 分支與父節(jié)點(diǎn):諸如Group、Region、以及StackPane等,都帶有各種子節(jié)點(diǎn)。
  3. 葉子節(jié)點(diǎn):諸如Rectangle、Ellipse、Box、ImageView、以及MediaView等,都帶有各種子節(jié)點(diǎn)。

4.JavaFX的各個(gè)組件

JavaFX帶有大量?jī)?nèi)置的GUI組件,其中包括:按鈕、文本字段、表格、樹、菜單、圖表等。下面我們將重點(diǎn)討論一些主要的組件。

控件

  • JavaFX控件是在JavaFX應(yīng)用程序中,提供某種控制功能的JavaFX組件。
  • 為了使控件可見,它必須被附加到某個(gè)場(chǎng)景對(duì)象的場(chǎng)景圖上。
  • 控件通常會(huì)被嵌套在一些JavaFX布局組件中,這些組件管理著控件之間的布局。
  • 一些常見的JavaFX控件包括:Button、CheckBox、Label、Menu、RadioButton、TableView、TextField、以及TreeView等。

布局

  • JavaFX布局是一些包含了其他組件的組件。也就是說,布局組件管理著那些嵌套在自身的組件布局。
  • JavaFX布局組件有時(shí)也被稱為父組件,畢竟它們包含著子組件。同時(shí),布局組件是JavaFX類JavaFX.scene.Parent的子類。
  • 為了可見,布局組件必須被附加到某個(gè)場(chǎng)景對(duì)象的場(chǎng)景圖之中。
  • 我們可以在其他布局組件中嵌套布局組件。這對(duì)于實(shí)現(xiàn)特定的布局是非常實(shí)用的。
  • 常見的JavaFX布局包括: Group、Pane、HBox、VBox、BorderPane、StackPane、以及GridPane等。

圖表(Charts)

JavaFX帶有一組內(nèi)置的即用型圖表組件,用戶可避免每次在需要基本圖表時(shí),不得不從頭開始編寫圖表。

2D/3D圖形(2D/3D Graphics)

JavaFX包含了可以讓用戶在屏幕上輕松地繪制2D/3D圖形的功能。

音頻(Audio)

用戶能夠輕松地在JavaFX應(yīng)用中播放音頻。該功能對(duì)于游戲和教育類的應(yīng)用是非常實(shí)用的。

視頻(Video)

用戶同樣也能夠輕松地在JavaFX應(yīng)用中播放視頻。該功能對(duì)于流媒體應(yīng)用、游戲、以及教育類應(yīng)用同樣非常實(shí)用。

網(wǎng)頁(yè)視圖(WebView)

JavaFX包含了一個(gè)基于WebKitHTML技術(shù)的WebView組件。該組件能夠使用HTML和CSS,來顯示各種網(wǎng)頁(yè)。

5.如何使用JavaFX來構(gòu)建GUI應(yīng)用

在此,我們將創(chuàng)建一個(gè)簡(jiǎn)單的JavaFX應(yīng)用。如下圖所示,該應(yīng)用由加載GIF、加載文本、十字關(guān)閉按鈕控件、以及背景所組成。如果您想獲得并研究其源代碼,請(qǐng)參見--https://gist.github.com/mansi7babbar/c0547010ab91c17f515c1fd4677cc4a2。

[[411017]]

下面,讓我們來一起討論構(gòu)建該JavaFX應(yīng)用程序的具體步驟:

設(shè)置入口點(diǎn):

  • 我們從JavaFX.application.Application處擴(kuò)展一個(gè)JavaFX GUI程序。
  • 它是JavaFX應(yīng)用的入口點(diǎn)。

定義啟動(dòng)方法:

  • JavaFXSeeder類繼承了Application類,并實(shí)現(xiàn)了其抽象方法start()。
  • 在此方法中,我們將為JavaFX圖形編寫整個(gè)代碼。

設(shè)定場(chǎng)景:

  • 通過指定場(chǎng)景圖的root(其類型為JavaFX.scene.Group),來分配JavaFX.scene.Scene。
  • 我們還可以傳遞兩個(gè)double類型的參數(shù),以表示場(chǎng)景的高度和寬度。

設(shè)置舞臺(tái):

  • 首先設(shè)置JavaFX.stage.Stage對(duì)象,并使用setTitle()方法來設(shè)置舞臺(tái)的標(biāo)題,以及使用setScene()方法將場(chǎng)景附加到舞臺(tái)上。
  • 使用show()方法顯示場(chǎng)景的內(nèi)容。
  • 平臺(tái)自行創(chuàng)建primaryStage舞臺(tái)對(duì)象,并作為參數(shù),傳遞給場(chǎng)景類的開始方法。
  • 設(shè)置舞臺(tái)的寬度、高度、任務(wù)欄圖標(biāo)、以及舞臺(tái)風(fēng)格。
  • 通過調(diào)用舞臺(tái)對(duì)象的setAlwaysOnTop(),將當(dāng)前的應(yīng)用設(shè)置到其他應(yīng)用之上。

設(shè)置外部布局:

  • 在此,我們使用JavaFX.scene.layout.StackPane作為頂級(jí)布局節(jié)點(diǎn),以便將其子節(jié)點(diǎn)布局在一個(gè)從后向前的棧(back-to-front stack)中。
  • 我們可以為該StackPane分配一個(gè)唯一的ID和尺寸數(shù)值。
  • 我們也可以使用setOnMousePressed()和setOnMouseDragged()兩個(gè)事件來處理程序,并在外部布局上添加鼠標(biāo)拖動(dòng)事件。
  • 使用setAlignment()設(shè)置布局在屏幕上的具體位置。

設(shè)置內(nèi)部布局:

  • 外部布局節(jié)點(diǎn)具有三個(gè)子節(jié)點(diǎn),即:Image、JavaFX.scene.layout.HBox和JavaFX.scene.layout.VBox。
  • HBox將其內(nèi)容節(jié)點(diǎn)水平排列在一行中。VBox將其內(nèi)容節(jié)點(diǎn)垂直排列在單個(gè)列中。
  • 我們可以將各個(gè)節(jié)點(diǎn)添加到同一個(gè)布局控件中。其中,getChildren().add()可用于單個(gè)節(jié)點(diǎn),而getChildren().addAll()則適用于多個(gè)節(jié)點(diǎn)。

設(shè)置控件:

  • JavaFX在JavaFX.scene.control包中提供了大量控件(或組件)。
  • 構(gòu)造一個(gè)Button控件,將其放置在窗口的右上角,然后通過setOnAction()方法,將JavaFX.event.EventHandler添加到Button上。
  • 我們可以通過實(shí)例化這個(gè)類,以將JavaFX.scene.shape.Text嵌入一個(gè)JavaFX場(chǎng)景中,然后可以設(shè)置文本的字體、顏色、以及位置等要素。
  • 我們可以通過實(shí)例化JavaFX.scene.image.Image類,在JavaFX中加載一個(gè)圖像。在完成加載后,我們可以通過實(shí)例化ImageView類,來設(shè)置圖像的視圖,并將圖像傳遞給其構(gòu)造函數(shù)。

啟動(dòng)程序:

  • 在main()方法中,我們必須使用launch()方法來啟動(dòng)應(yīng)用程序。
  • 該方法會(huì)在內(nèi)部調(diào)用Application類的start()方法。

6.小結(jié)

在上文中,我們既討論了JavaFX的工作原理、關(guān)鍵特性和強(qiáng)大功能,又研究了JavaFX的應(yīng)用結(jié)構(gòu),以及如何將場(chǎng)景、舞臺(tái)、場(chǎng)景圖和節(jié)點(diǎn),構(gòu)建成為圖形應(yīng)用。我們還通過創(chuàng)建了一個(gè)簡(jiǎn)單的JavaFX應(yīng)用程序,來展示了由JavaFX提供的大量?jī)?nèi)置GUI組件。

原文標(biāo)題:JavaFX—OverviewwithHands-on,作者:MansiBabbar

【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】

 

責(zé)任編輯:華軒 來源: 51CTO
相關(guān)推薦

2022-12-07 08:42:35

2021-08-02 07:35:19

Nacos配置中心namespace

2011-01-10 14:41:26

2011-05-03 15:59:00

黑盒打印機(jī)

2021-01-19 09:06:21

MysqlDjango數(shù)據(jù)庫(kù)

2020-05-15 08:07:33

JWT登錄單點(diǎn)

2021-03-12 10:01:24

JavaScript 前端表單驗(yàn)證

2022-07-22 12:45:39

GNU

2021-12-15 08:49:21

gpio 子系統(tǒng)pinctrl 子系統(tǒng)API

2022-10-30 10:31:42

i2ccpuftrace

2022-07-27 08:16:22

搜索引擎Lucene

2022-01-08 20:04:20

攔截系統(tǒng)調(diào)用

2022-03-14 14:47:21

HarmonyOS操作系統(tǒng)鴻蒙

2023-04-26 12:46:43

DockerSpringKubernetes

2021-02-26 11:54:38

MyBatis 插件接口

2011-02-22 13:46:27

微軟SQL.NET

2021-12-28 08:38:26

Linux 中斷喚醒系統(tǒng)Linux 系統(tǒng)

2020-08-12 09:07:53

Python開發(fā)爬蟲

2020-12-08 10:32:15

Python郵件tcp

2022-04-12 08:46:12

i2c-tools開源工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)