[英]What is a “Node” in JavaFx/FXML?
JavaFx / FXML上下文中的“Node”一詞是什么意思? 如果我搜索這個問題,我發現所有人都在使用“討論別的東西”一詞,但沒有解釋。 例如,這個問題的答案: 如何從控制器類打開JavaFX FileChooser? :
對於場景中的任何節點(例如,根節點;但是使用@FXML注入的任何節點都可以),
chooser.showOpenDialog(node.getScene().getWindow());
節點會是什么,以及如何“注入@FXML”?
在了解Node
是什么之前,首先要了解JavaFX
的Scene Graph
是很重要的。
JavaFX應用程序由Stage
和Scene
或幾個場景組成。 該階段是您的應用程序的頂級容器。 另一方面,場景包含應用程序的所有內容(用戶界面元素)(如果您的應用程序只有一個“頁面”)或應用程序的某個“頁面”的內容,並且存在於/在舞台上。 (在此清楚,通過頁面我的意思是用戶與之交互的內容,例如登錄頁面。)
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
:
FXMLLoader
必須可以訪問此字段,這意味着它必須是public
或使用@FXML
注釋進行注釋。 id
屬性(很可能使用前綴fx
)添加到應注入的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.