JavaFX學習教程二

一、JavaFX 體系結構

JavaFX 場景圖(Scene Graph)是構建 JavaFX 應用程序的起點,一種樹狀數據結構,用于排列(和分組)圖形對象,以便于邏輯表示。

stage:舞臺,操作系統窗口的 JavaFX 表示,是所有節點的容器,是根節點

node:節點,場景圖中的單個元素被稱為節點,每個節點都有ID、樣式類、邊界體積。(Each node has an ID, style class, and bounding volume)

它還具有以下:

  • Effects, such as blurs and shadows模糊或者陰影效果

  • Opacity不透明度

  • Transforms變換(位置、縮放、旋轉)

  • Event handlers (such as mouse, key and input method)事件處理、鍵鼠輸入

  • An application-specific state

JavaFX 場景圖除了包含控件、布局容器、圖像和媒體外,還包括圖形基元(如矩形和文本)。

一般來說JavaFX程序結構可以理解為:舞臺-》場景-》布局-》控件

以上圖片的代碼實現如下:

public class HelloApp extends Application {@Overridepublic void start(Stage stage) throws Exception {Text text = new Text("Hello World")//文本控件HBOX hbox =new HBOX();//橫向布局hbox.getchildren().add(text);//布局添加控件stage.setScene(new Scene(hbox, 300, 300);//新建場景,添加布局stage.show();//舞臺展示場景}public static void main(String[] args) {launch(args);}
}

二、FXML文件

FXML 是一種可編寫腳本的、基于 XML 的標記語言,用于構造 Java 對象圖。它為在過程代碼中構造此類圖形提供了一種方便的替代方法,并且非常適合于定義 JavaFX 應用程序的用戶界面,因為 XML 文檔的層次結構與 JavaFX 場景圖的結構非常相似。

FXML是一種以XML(Extensible Markup Language)的格式表示JavaFX界面對象的文件,FXML文件中的每一個元素可以映射到JavaFX中的一個類,每個FXML元素的屬性或者其子元素都可以映射為該對應JavaFXML類的屬性的文件,可以理解為界面的代碼表現形式

可以通過使用FXML簡化JavaFX 應用程序的開發

In FXML, an XML element represents one of the following: XML元素有以下:

  • A class instance 實例類
  • A property of a class instance 實例類屬性
  • A "static" property 靜態屬性
  • A "define" block 定義塊
  • A block of script code?腳本代碼塊

三、Controller類文件?

用來綁定這個fxml文件用的,用于控制這個界面的一些操作,實現一些功能,這和我們開發web項目的時候的controller含義基本相同。

四、Scene Builder?

JavaFX Scene Builder 是一種可視化布局工具,可讓用戶快速設計 JavaFX 應用程序用戶界面,而無需編碼。用戶可以將 UI 組件拖放到工作區、修改其屬性、應用樣式表,并且他們正在創建的布局的 FXML 代碼將在后臺自動生成。結果是一個 FXML 文件,然后可以通過將 UI 綁定到應用程序的邏輯來與 Java 項目結合。

這個軟件的作用就是將我們拖拽產生的界面UI生成對應的前端代碼這樣一來,后臺邏輯我們可以利用Java來寫,前臺頁面可以利用Scene Builder自動生成。

下載地址:Scene Builder - Gluon (gluonhq.com)

五、利用SceneBuilder設計界面實例

入門可以參考官方給出的教程第 II 部分:使用 Scene Builder 構建 JavaFX 應用程序(發行版 2) (oracle.com)

SceneBuilder軟件詳細說明可參考

JavaFX_二木成林的博客-CSDN博客

我這邊以設計登錄界面為例

截圖如下:

層次結構截圖如下:

當設計完界面之后需要

1)設置重要控件的fx:id

2)設置重要控件的觸發事件

3)綁定控制類

4)查看

設置重要控件的fx:id

在JavaFX中,fx:id是一個屬性,用于將FXML文件中的UI組件與Java控制器類中的成員變量進行綁定。通過這種綁定,可以在控制器類中直接訪問和操作FXML文件中的UI組件。

選中控件,可以在監控器界面的Code這里,看到fx:id,點擊之后可以進行設置。

設置重要控件的觸發事件

例如給登錄按鈕設置點擊觸發的登錄功能,需要在上圖的code這一欄中的On Action綁定Login事件,而這個事件的執行流程會在控制類中實現。

On Action屬性用于將UI組件的用戶操作與事件處理邏輯關聯起來,提供了一種方便的方法來響應用戶交互。在FXML文件中通過屬性直接指定處理方法

在控制類中寫Login方法時,需要被注解 @FXML 標記,表明它是一個FXML文件中的控件事件處理方法。當用戶點擊按鈕時,JavaFX 應用程序會自動調用該方法。

即如下:

綁定控制類

為了使設計頁面能執行編程邏輯需要與Controller類進行綁定

在下圖的位置填入java項目中類的位置即可。

在軟件中,也可以直接獲取controller代碼,view->Show Sample Controller Skeleton就可以復制對應的controller代碼

六、創建項目

參考:超詳細的JavaFX項目的創建、構建、打包教程_javafx教程-CSDN博客

因為JDK8中集成了JavaFX,所以在JDK8環境下創建JavaFX程序很簡單。只需像創建普通Java項目一樣創建項目,在代碼中導入JavaFX相關包即可編寫并直接運行即可運行JavaFX程序。

Java 8+:

在JDK8后的JDK版本不再集成JavaFX,我們需要自己向項目中引入JavaFX,所以創建JavaFX項目會復雜一些。

我們此處采用創建Maven或Gradle項目并引入依賴的辦法來引入JavaFX。如果不使用Maven,也可以在Project Structure中通過給項目添加依賴的方式,來使用和運行JavaFX程序。但是此種方式不利于管理項目,在后續打包過程中也會遇到許多困難與問題,所以不推薦。

pom.xml需要添加openjfx的依賴和插件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>WrapSystem</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.18</version></dependency><dependency><groupId>org.openjfx</groupId><artifactId>javafx-controls</artifactId><version>17.0.0.1</version></dependency><dependency><groupId>org.openjfx</groupId><artifactId>javafx-fxml</artifactId><version>17.0.0.1</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.10.1</version><configuration><source>11</source><target>11</target></configuration></plugin><plugin><groupId>org.openjfx</groupId><artifactId>javafx-maven-plugin</artifactId><version>0.0.8</version><executions><execution><!-- Default configuration for running with: mvn clean javafx:run --><id>default-cli</id><configuration><mainClass>main</mainClass><launcher>app</launcher><jlinkZipName>app</jlinkZipName><jlinkImageName>app</jlinkImageName><noManPages>true</noManPages><stripDebug>true</stripDebug><noHeaderFiles>true</noHeaderFiles></configuration></execution></executions></plugin></plugins></build>
</project>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/15594.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/15594.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/15594.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Nodejs+Socket.io+Web端完成聊天

前言 源碼獲取:nodeexpresssocket.ioweb: 聊天demo (gitee.com) 目錄結構 后端依賴 啟動方式 前端是html正常啟動 后端是node app.js 后端app.js核心代碼 const express require(express) const app express() var http require(http).Server(app) var io require(so…

掌握C++回調:按值捕獲、按引用捕獲與弱引用

文章目錄 一、按引用捕獲和按值捕獲1.1 原理1.2 案例 二、弱引用2.1 原理2.2 案例一2.3 案例二&#xff1a;使用base庫的弱引用 三、總結 在C回調中&#xff0c;當使用Lambda表達式捕獲外部變量時&#xff0c;有兩種捕獲方式&#xff1a;按值捕獲和按引用捕獲。 一、按引用捕獲…

Matlab自學筆記三十:元胞數組的修改、添加、刪除和連接

1.說明 元胞數組的子數組或元素也是元胞型的&#xff0c;其元素內容&#xff08;值&#xff09;是本身類型&#xff0c;因此&#xff0c;在添、刪、改和連接處理時&#xff0c;必須明確每個元素的值的類型和大小&#xff0c;否則&#xff0c;編程報錯是不可避免的了。看本文前…

Python 點云裁剪

點云裁剪 一、介紹1.1 概念1.2 函數講解二、代碼示例2.1 代碼實現2.2 代碼講解三、結果示例一、介紹 1.1 概念 點云裁剪 :根據待裁剪對象的多邊形體積(json文件)實現點云的裁剪。 1.2 函數講解 下面代碼示例中主要用到了兩個函數。 讀取待裁剪對象的多邊形體積信息(json文…

淺談C++函數

目錄 一、函數的概念二、調用函數的兩個前提三、函數傳參的三種形式四、函數返回類型 一、函數的概念 函數是C程序的基本模塊&#xff0c;通常一個C程序由一個或多個函數組成。函數可以完成用戶指定的任務&#xff0c;一般分為庫函數和用戶自定義的函數。函數由函數頭和函數體…

先進制造aps專題六 aps軟件開發最大的難點,設備甘特圖開發

aps軟件開發最大的難點&#xff0c;設備甘特圖開發 一般認為&#xff0c;aps軟開發中&#xff0c;算法是難的&#xff0c;排程算法難&#xff0c;優化算法更難&#xff0c;但其實最大的難點是設備甘特圖開發 aps軟件設備甘特圖開發的幾個難點如下 1 和項目甘特圖一行顯示一個…

02. Flink 快速上手

02. Flink 快速上手 1、創建項目導入依賴 pom文件&#xff1a; <properties><flink.version>1.17.0</flink.version> </properties><dependency><groupId>org.apache.flink</groupId><artifactId>flink-streaming-java<…

k8s配置pods滾動發布

背景 采用微服務架構部署的應用&#xff0c;部署方式都要用到容器化部署k8s容器編排&#xff0c;最近我在公司負載的系統也是用的上述架構部署&#xff0c;但是隨著系統的運行&#xff0c;用戶提的需求就會越多&#xff0c;每次更新的話都要停機發布&#xff0c;最用戶側來說就…

【C語言刷題系列】求一個數組中兩個元素a和b的和最接近整數m

&#x1f493; 博客主頁&#xff1a;倔強的石頭的CSDN主頁 &#x1f4dd;Gitee主頁&#xff1a;倔強的石頭的gitee主頁 ? 文章專欄&#xff1a;C語言刷題系列 目錄 一、問題描述 二、解題思路 解題思路&#xff1a; 解題步驟: 三、C語言代碼實現及測試 一、問題描述 給定一…

指北者智能音樂學習機隆重亮相廣州國際樂器展

2024年5月23-26日廣州國際樂器展覽會在廣交會展館B區隆重開幕&#xff0c;本屆展會開設5大展廳、50000平方米的主題展區&#xff0c;吸引了700多家國內外參展商參展&#xff0c;打造集展示、商貿、文化交流、文娛于一體的廣闊平臺。深圳市指北科技有限公司也攜旗下品牌指北者智…

AWS云服務器每月費用高昂,如何優化達到節省目的?

AWS云服務器每月費用可能因不同的使用情況和配置而有所不同。為了優化并節省AWS云服務器的費用&#xff0c;aws的合作伙伴九河云提供了一些建議&#xff1a; &#xff08;1&#xff09;調整實例大小&#xff1a;確保你使用的實例大小與你的工作負載相匹配。實例的容量每增加一倍…

Gopeed的高級用法

Gopeed是一個開源全平臺下載器&#xff0c;具體簡介請參考&#xff1a; “狗屁下載器”&#xff1f;Gopeed - 開源全平臺下載器 (免費輕量 / 比 Aria2 好用 / 遠程下載) - 異次元軟件世界 (iplaysoft.com) 這里主要介紹下自己摸索出來的 Gopeed 的高級做法。 有的網站添加的…

時政|醫療結果互認

背景&#xff08;存在的問題&#xff09; 看同一種病&#xff0c;換一家醫院甚至換一個院區、換一個科室&#xff0c;檢查檢驗還得再來一遍&#xff0c;費錢又費時。開展檢查檢驗結果互認&#xff0c;可以明顯減輕患者就醫負擔。患者不用做重復檢查&#xff0c;也可節約就醫時…

基于JSP/Servlet校園二手交易平臺(二)

目錄 2 開發技術及開發環境 2.1 Java語言簡介 2.2 J2EE技術介紹 2.3 Servlet/JSP技術 2.4 MVC 簡介 2.5 Struts 技術 2.6 Hibernate 技術 2.6.1 應用程序的分層體系結構 2.6.2 Hibernate的應用及API簡介 2.7 開發環境及環境配置 2.7.1 Java/JSP系統環境 2.7.2 JSP環…

D365 SysDictTable\SysDictField

文章目錄 前言一、示例 前言 SysDictField 和 SysDictTable 用于訪問表和字段的元數據信息。 一、示例 循環表&#xff0c;使對應數據源的字段禁止編輯 public void fieldNoAllowEdit(Common _common,formDataSource fds,boolean aE false){TableId tab…

小程序-購物車-基于SKU電商規格組件實現

SKU 概念&#xff1a; 存貨單位&#xff08; Stock Keeping Unit &#xff09;&#xff0c; 庫存 管理的最小可用單元&#xff0c;通常稱為“單品”。 SKU 常見于電商領域&#xff0c;對于前端工程師而言&#xff0c;更多關注 SKU 算法 &#xff0c;基于后端的 SKU 數據…

(二)vForm 動態表單設計器之下拉、選擇

系列文章目錄 &#xff08;一&#xff09;vForm 動態表單設計器之使用 目錄 系列文章目錄 前言 一、后端需提供接口 二、組件配置 總結 前言 動態表單下拉、選擇等組件&#xff0c;大概率要使用數據庫中的數據&#xff0c;那么vForm如何拿到數據庫中的數據呢&#xff1f;跟隨…

僵尸進程、孤兒進程、守護進程

【一】僵尸進程和孤兒進程 【1】引入 我們知道在unix/linux中&#xff0c;正常情況下&#xff0c;子進程是通過父進程創建的&#xff0c;子進程在創建新的進程。 子進程的結束和父進程的運行是一個異步過程,即父進程永遠無法預測子進程 到底什么時候結束。 當一個 進程完成它…

動物合并消除休閑游戲源碼 Animal Merge 益智游戲

一款動物合并消除休閑游戲源碼&#xff0c;Animal Merge是一款引人入勝的益智游戲&#xff0c;玩家的任務是合并方塊&#xff0c;創造出可愛的動物&#xff0c;這些動物的體型會逐漸變大。游戲玩法包括將方塊放到網格上&#xff0c;并戰略性地將它們合并以形成更大的動物形狀。…

作文筆記9 描寫方法

動態描寫&#xff1a; 威尼斯小艇&#xff0c;窗外的風景飛快的后退。 靜態描寫&#xff1a; 牧場之國&#xff0c;牛不再哞哞&#xff0c;馬忘記了踢馬房的擋板。 動靜結合&#xff1a; 火車進站&#xff0c;人聲鼎沸&#xff0c;叫賣聲&#xff0c;廣播聲&#xff0c;人…