簡體   English   中英

什么是JavaFx / FXML中的“節點”?

[英]What is a “Node” in JavaFx/FXML?

JavaFx / FXML上下文中的“Node”一詞是什么意思? 如果我搜索這個問題,我發現所有人都在使用“討論別的東西”一詞,但沒有解釋。 例如,這個問題的答案: 如何從控制器類打開JavaFX FileChooser?

對於場景中的任何節點(例如,根節點;但是使用@FXML注入的任何節點都可以),

chooser.showOpenDialog(node.getScene().getWindow());

節點會是什么,以及如何“注入@FXML”?

在了解Node是什么之前,首先要了解JavaFXScene Graph是很重要的。

JavaFX應用程序由StageScene或幾個場景組成。 該階段是您的應用程序的頂級容器。 另一方面,場景包含應用程序的所有內容(用戶界面元素)(如果您的應用程序只有一個“頁面”)或應用程序的某個“頁面”的內容,並且存在於/在舞台上。 (在此清楚,通過頁面我的意思是用戶與之交互的內容,例如登錄頁面。)

The Scene Graph is a graphical illustration of how all the stuff in your scene are laid out. This graph is represented in the form of a tree data structure.

A Node is an item in the scene graph.

我認為這張圖片清楚地解釋了這一點

在此輸入圖像描述

Node的示例是一個Control ,它是用戶可以操作的任何東西,例如TextField,Button,TextArea

照片來源

Node是場景圖“由...構成”的圖形元素的abstract超類。

Node繼承的類的一些示例:

  • TextField
  • AnchorPane
  • Canvas
  • Group
  • VBox
  • Button
  • Label
  • ...

以這種方式注入具有FXMLLoader id的Node

  1. 在與fxml關聯的控制器中創建一個具有適當類型的字段(即可以為要注入的元素指定的任何類型)。 FXMLLoader必須可以訪問此字段,這意味着它必須是public或使用@FXML注釋進行注釋。
  2. 將fxml命名空間中的id屬性(很可能使用前綴fx )添加到應注入的fxml文件中的元素。 該屬性的值是控制器中字段的名稱。

FXML

....
<TextField fx:id="myTextField" ....>
....

調節器

....
@FXML
private TextField myTextField;
....

FXMLLoader控制器的initialize方法之前, FXMLLoader使用此信息將為fxml元素創建的對象分配給字段。

可以在此處找到包含注入的完整示例/擴展指南: https//docs.oracle.com/javase/8/javafx/fxml-tutorial/fxml_tutorial_intermediate.htm#JFXMG153

這是一個古老的問題,但它是抽象地回答的。 “什么是節點?” 並且“為了理解什么是節點,你必須首先理解什么是場景圖”。 節點是最高級別的抽象類,從中派生出幾乎所有以圖形方式顯示在GUI中的抽象類。 它的超類是Object。 在Ojonugwa Ochalifu顯示的圖像中,有一個階段包含一個場景,其中包含幾個包含其他節點的節點。 GUI顯示的圖像引出了一個問題“這是如何創建的?”。

一般來說,這里是Stage,Scene和EventTarget的JavaDocs。
在javafx doc Stage https://docs.oracle.com/javase/8/javafx/api/javafx/stage/Stage.html

和場景https://docs.oracle.com/javase/8/javafx/api/javafx/scene/Scene.html

Stage和Scene都繼承了相同的接口,EventTarget以及Pane,Control和一長串類。 https://docs.oracle.com/javase/8/javafx/api/javafx/event/EventTarget.html

我還建議查看您正在使用的類的源代碼。 它將有助於深入了解從節點繼承的類的行為。 例如,JavaFX文檔提到顯示圖像時可能存在錯誤。 確保在UI中不會發生此錯誤需要進行全面測試。 其他見解,例如如何使用多線程技術訪問圖形,需要了解類使用的“方式”和“內容”。

Scene-Graph包含在Stage中,由節點的任何子類組成。 某些節點(如Panes)可能有孩子。 孩子仍然是一個節點。 兒童包含在一個結構中,該結構可能包含也可能有孩子的其他節點。 因此,該圖非常類似於多維數組或非二元樹。 理解這一點也很重要:場景圖是一個非方向圖,意味着孩子可以訪問其父母; 一個孩子只能有一個父母; 但可以擁有無​​限數量的孩子。 getParent()方法提供對父節點的訪問。

場景圖的圖像

注意,圖形結構本質上是一個多維數組。 或者換句話說,一個數組可能包含從Node繼承的其他項目數組,或者包含ImageViews,Buttons等節點。像節點一樣的數組是Panes,Canvas等...可能包含其他節點。

這對於了解測試自動化和可靠地確保UI顯示應該顯示的內容非常重要。

Kishori Sharan的“學習JavaFX 8”是一本開始使用JavaFX的好書。 https://www.amazon.com/Learn-JavaFX-Building-Experience-Interfaces/dp/148421143X/ref=asc_df_148421143X/?tag=bingshoppinga-20&linkCode=df0&hvadid= {creative}&hvpos = {adposition}&hvnetw = o&hvrand = {隨機}&hvpone =&hvptwo =&hvqmt = E&hvdev = C&hvdvcmdl = {devicemodel}&hvlocint =&hvlocphy =&hvtargid = PLA-4584413736126928&PSC = 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM