JavaFx/FXML 中的 "Node" 是什么?
What is a "Node" in JavaFx/FXML?
JavaFx/FXML 上下文中的“节点”一词是什么意思?如果我搜索这个问题,我发现的只是人们使用该术语讨论其他问题,但没有任何解释。例如,这个问题的答案:How do I open the JavaFX FileChooser from a controller class?:
For any node in your scene (for example, the root node; but any node
you have injected with @FXML will do), do
chooser.showOpenDialog(node.getScene().getWindow());
节点是什么,我将如何“用@FXML 注入它”?
A Node
是场景图 "made of".
的图形元素的 abstract
超类
类 继承自 Node
的一些示例:
TextField
AnchorPane
Canvas
Group
VBox
Button
Label
- ...
用 FXMLLoader
id 注入 Node
是这样完成的:
- 在与 fxml 关联的控制器中创建一个具有适当类型的字段(即可以将要注入的元素分配给的任何类型)。此字段必须可通过
FXMLLoader
访问,这意味着它必须是 public
或使用 @FXML
注释进行注释。
- 将 fxml 命名空间中的
id
属性(很可能使用前缀 fx
)添加到 fxml 文件中应注入的元素。该属性的值是控制器中字段的名称。
例子
fxml
....
<TextField fx:id="myTextField" ....>
....
控制器
....
@FXML
private TextField myTextField;
....
在调用控制器的 initialize
方法之前,FXMLLoader
使用此信息将它为该 fxml 元素创建的对象分配给字段。
可以在此处找到包括注入在内的完整 example/extendend 教程:https://docs.oracle.com/javase/8/javafx/fxml-tutorial/fxml_tutorial_intermediate.htm#JFXMG153
在你理解什么是Node
之前,同样重要的是首先要理解什么是Scene Graph
在 JavaFX
.
JavaFX应用程序由一个Stage
和一个Scene
或几个场景组成。该阶段是您应用程序的顶级容器。另一方面,场景包含应用程序的所有内容(用户界面元素)(如果您的应用程序只有一个 "page")或应用程序的 "pages" 之一的内容, 并且存在 in/on 个阶段。 (这里要清楚,页面是指用户与之交互的内容,例如登录页面。)
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.
我认为这张图片清楚地说明了这一点。
节点的示例是 Control
,它是用户可以操作的任何内容,例如 TextField、Button、TextArea
这是一个老问题,但回答得比较抽象。 "What is a node?" 和 "in order to understand what is a node you must first understand what is a scene-graph"。节点是最高级别的抽象class,几乎所有在 GUI 中以图形方式显示的内容都是从中导出的。它的超class是Object。在 Ojonugwa Ochalifu 显示的图像中,有一个舞台包含一个场景,场景包含多个节点,节点又包含其他节点。 GUI 的图像回避了问题 "How is this created?"。
这里有 Stage、Scene 和 EventTarget 的 JavaDocs,用于一般理解。
在 javafx 文档阶段 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 和一长串 classes。 https://docs.oracle.com/javase/8/javafx/api/javafx/event/EventTarget.html
我还建议查看您正在使用的 classes 的源代码。它将有助于深入了解从节点继承的 classes 的行为。例如,JavaFX 文档提到在显示图像时可能存在错误。确保此错误不会在 UI 中发生需要进行彻底的测试。其他见解,例如如何使用 multi-threaded 技术访问图表,需要了解 "how" 和 "What" 和 class 的用途。
Scene-Graph 包含在舞台中,由节点的任何子class 组成。某些节点(例如 Panes)可能有 children。 A child 仍然是一个节点。 Children 包含在一个结构中,该结构可能包含其他可能也有 children 的节点。因此,该图很像 multi-dimensional 数组或 non-binary 树。了解以下内容也很重要: Scene-Graph 是一个 Non-Directional 图,意味着 child 可以访问它的 parent;一个child只能有一个parent;但可以拥有无限数量的children。 getParent() 方法提供对节点 parent 的访问。
请注意,图结构本质上是一个 multi-dimensional 数组。或者换句话说,一个数组可能包含从 Node 继承的其他项目数组,或 ImageViews、Buttons 等节点。像节点这样的数组是窗格,Canvas 等...可能包含其他节点。
在测试自动化和可靠地确保 UI 显示它应该显示的内容时,理解这一点很重要。
一本入门 JavaFX 的好书是 "Learn JavaFX 8",作者是 Kishori Sharan。 https://www.amazon.com/Learn-JavaFX-Building-Experience-Interfaces/dp/148421143X/ref=asc_df_148421143X/?tag=bingshoppinga-20&linkCode=df0&hvadid={创意}&hvpos={广告}&hvnetw=o&hvrand={随机}&hvpone=&hvptwo=&hvqmt=e&hvdev=c&hvdvcmdl={设备模型}&hvlocint=&hvlocphy=&hvtargid=pla-4584413736126928&psc=1
JavaFx/FXML 上下文中的“节点”一词是什么意思?如果我搜索这个问题,我发现的只是人们使用该术语讨论其他问题,但没有任何解释。例如,这个问题的答案:How do I open the JavaFX FileChooser from a controller class?:
For any node in your scene (for example, the root node; but any node you have injected with @FXML will do), do
chooser.showOpenDialog(node.getScene().getWindow());
节点是什么,我将如何“用@FXML 注入它”?
A Node
是场景图 "made of".
abstract
超类
类 继承自 Node
的一些示例:
TextField
AnchorPane
Canvas
Group
VBox
Button
Label
- ...
用 FXMLLoader
id 注入 Node
是这样完成的:
- 在与 fxml 关联的控制器中创建一个具有适当类型的字段(即可以将要注入的元素分配给的任何类型)。此字段必须可通过
FXMLLoader
访问,这意味着它必须是public
或使用@FXML
注释进行注释。 - 将 fxml 命名空间中的
id
属性(很可能使用前缀fx
)添加到 fxml 文件中应注入的元素。该属性的值是控制器中字段的名称。
例子
fxml
....
<TextField fx:id="myTextField" ....>
....
控制器
....
@FXML
private TextField myTextField;
....
在调用控制器的 initialize
方法之前,FXMLLoader
使用此信息将它为该 fxml 元素创建的对象分配给字段。
可以在此处找到包括注入在内的完整 example/extendend 教程:https://docs.oracle.com/javase/8/javafx/fxml-tutorial/fxml_tutorial_intermediate.htm#JFXMG153
在你理解什么是Node
之前,同样重要的是首先要理解什么是Scene Graph
在 JavaFX
.
JavaFX应用程序由一个Stage
和一个Scene
或几个场景组成。该阶段是您应用程序的顶级容器。另一方面,场景包含应用程序的所有内容(用户界面元素)(如果您的应用程序只有一个 "page")或应用程序的 "pages" 之一的内容, 并且存在 in/on 个阶段。 (这里要清楚,页面是指用户与之交互的内容,例如登录页面。)
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.
我认为这张图片清楚地说明了这一点。
节点的示例是 Control
,它是用户可以操作的任何内容,例如 TextField、Button、TextArea
这是一个老问题,但回答得比较抽象。 "What is a node?" 和 "in order to understand what is a node you must first understand what is a scene-graph"。节点是最高级别的抽象class,几乎所有在 GUI 中以图形方式显示的内容都是从中导出的。它的超class是Object。在 Ojonugwa Ochalifu 显示的图像中,有一个舞台包含一个场景,场景包含多个节点,节点又包含其他节点。 GUI 的图像回避了问题 "How is this created?"。
这里有 Stage、Scene 和 EventTarget 的 JavaDocs,用于一般理解。
在 javafx 文档阶段 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 和一长串 classes。 https://docs.oracle.com/javase/8/javafx/api/javafx/event/EventTarget.html
我还建议查看您正在使用的 classes 的源代码。它将有助于深入了解从节点继承的 classes 的行为。例如,JavaFX 文档提到在显示图像时可能存在错误。确保此错误不会在 UI 中发生需要进行彻底的测试。其他见解,例如如何使用 multi-threaded 技术访问图表,需要了解 "how" 和 "What" 和 class 的用途。
Scene-Graph 包含在舞台中,由节点的任何子class 组成。某些节点(例如 Panes)可能有 children。 A child 仍然是一个节点。 Children 包含在一个结构中,该结构可能包含其他可能也有 children 的节点。因此,该图很像 multi-dimensional 数组或 non-binary 树。了解以下内容也很重要: Scene-Graph 是一个 Non-Directional 图,意味着 child 可以访问它的 parent;一个child只能有一个parent;但可以拥有无限数量的children。 getParent() 方法提供对节点 parent 的访问。
请注意,图结构本质上是一个 multi-dimensional 数组。或者换句话说,一个数组可能包含从 Node 继承的其他项目数组,或 ImageViews、Buttons 等节点。像节点这样的数组是窗格,Canvas 等...可能包含其他节点。
在测试自动化和可靠地确保 UI 显示它应该显示的内容时,理解这一点很重要。
一本入门 JavaFX 的好书是 "Learn JavaFX 8",作者是 Kishori Sharan。 https://www.amazon.com/Learn-JavaFX-Building-Experience-Interfaces/dp/148421143X/ref=asc_df_148421143X/?tag=bingshoppinga-20&linkCode=df0&hvadid={创意}&hvpos={广告}&hvnetw=o&hvrand={随机}&hvpone=&hvptwo=&hvqmt=e&hvdev=c&hvdvcmdl={设备模型}&hvlocint=&hvlocphy=&hvtargid=pla-4584413736126928&psc=1