什么是JavaFx/FXML中的"节点"?

Sar*_*on1 7 java javafx nodes fxml

JavaFx/FXML上下文中的"Node"一词是什么意思?如果我搜索这个问题,我发现所有人都在使用"讨论别的东西"一词,但没有解释.例如,这个问题的答案: 如何从控制器类打开JavaFX FileChooser?:

对于场景中的任何节点(例如,根节点;但是使用@FXML注入的任何节点都可以),

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

节点会是什么,以及如何"注入@FXML"?

ojo*_*ifu 11

在你明白什么是Node是,这也是很重要的首先是了解什么是Scene GraphJavaFX.

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的示例是a Control,它是可由用户Eg,TextField,Button,TextArea操纵的任何东西

照片来源


fab*_*ian 7

A Nodeabstract场景图"由...构成"的图形元素的超类.

继承自以下的类的一些示例Node:

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

NodeFXMLLoader这种方式注入id:

  1. 在与fxml关联的控制器中创建一个具有适当类型的字段(即可以为要注入的元素指定的任何类型).该字段必须可由其访问,FXMLLoader这意味着必须使用public注释进行@FXML注释.
  2. id将fxml命名空间中的属性(最有可能使用前缀fx)添加到应注入的fxml文件中的元素.该属性的值是控制器中字段的名称.

FXML

....
<TextField fx:id="myTextField" ....>
....
Run Code Online (Sandbox Code Playgroud)

调节器

....
@FXML
private TextField myTextField;
....
Run Code Online (Sandbox Code Playgroud)

在调用FXMLLoader控制器initialize方法之前,使用此信息将为fxml元素创建的对象分配给字段.

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