Skip to content

Latest commit

 

History

History
139 lines (81 loc) · 5.03 KB

5.Node.md

File metadata and controls

139 lines (81 loc) · 5.03 KB

Node

javafx.scene.Node是所有可以添加到scene graph的组件的父类。Node是抽象的,所有继承自Node的都有一组属性,这些通用的定义在Node类中的属性。


基础

每一个组件实例仅仅只可以添加到scene中一次。也就是说一个组件只能在一个scene graph。如果把组件同时添加到两个scene中,JavaFX将会抛出一个错误。

有时,一个组件也可以拥有子组件。他们被称为childrenjavafx.scene.Parent类的子孙类才可以拥有子组件。

值得一提的是,javafx.scene.Parent也是Node的子类。

Stage类和Scene类不是Node类的子类。stagescene不包含在scene graph中。而一旦节点实例附加到场景图上,只有JavaFX应用程序线程(管理JavaFX场景图的线程)才允许修改节点实例。


## Node属性

下面列举的是Node的公共属性。

A cartesian coordinate system 一个笛卡尔坐标系

A bounding box delimited by: 一个边界框

  • Layout bounds 布局边界
  • Bounds in local 自身边界
  • Bounds in parent 父组件边界

layoutX 布局X值

layoutY 布局Y值

Preferred height 优先高度

Preferred width 优先宽度

Minimum height 最小高度

Minimum width 最小宽度

Maximum height 最大高度

Maximum width 最大宽度

User data 用户数据

Items (Child nodes) 子组件


坐标系统

每个JavaFX组件都有自己的笛卡尔坐标系统。如图所示。 img

JavaFX组件有可能具有负的X和Y坐标。

每个组件都有自己的坐标系统。这个坐标系统用于在父组件中定位子组件实例,或者作用于JavaFX画布上绘图时。这意味着,作为另一个组件的子节点既有自己的坐标系统,也有其父节点坐标系统中的位置(X,Y)。 下面是父组件坐标系的示例,其中子组件位于父组件坐标系中的(25,25)处。子节点也有自己的坐标系统。如图所示。设置位置时按照父组件的坐标定位。

img


边界框

JavaFX节点有一个边界框。组件的边界框是围绕组件形状的逻辑框。完整的组件位于包围框内。也就是说,节点的所有边角都包含在边界框中,组件周围没有额外的空间,除非通过对节点应用效果、添加内边界padding或其他的来添加。

组件有3种边界框。如下表格所示。

名字 描述
layoutBounds 组件的边界在它自己的坐标空间-没有任何效果,剪辑或应用的转换。
boundsInLocal 组件在自己的坐标空间中的边界-应用了效果和剪辑,但没有转换
boundsInParent 组件在其父组件坐标空间的边界-应用效果、剪辑和转换。

这些边界框的每个维度都可以从它们对应的具有相同名称的属性中读取,也就是layoutBounds、boundsInLocal和boundsInParent这3个属性。

父组件使用boundsInParent边框来布局其子节点。父组件需要知道总空间,包括所有的效果,剪辑和转换的一个节点,以便能够为它分配空间。


layoutX and layoutY

组件对象的layoutX和layoutY属性计算时被其父节点的X和Y影响。换句话说,layoutX和layoutY是从父节点的(0,0)开始的偏移量。

并不是所有的Layout类都尊重节点的layoutX和layoutY。这取决于父组件的确切布局算法是什么。

node.layoutX = 100.0
node.layoutY = 200.0

Preferred Width and Height

组件对象的preferred widthpreferred height指定给定节点对象的首选宽度和高度。并不是所有的父节点类都会尊重子节点这两个属性。这取决于具体的父节点的具体实现方式。

node.prefWidth = 100.0
node.preHeight = 100.0

Minimum Width and Height

同上,这两个属性表示自身定义的最小宽度和高度。但在实际中,还是需要参考父组件的具体实现。

node.minWidth = 50.0
node.minHeight = 100.0

Maximum Width and Height

同上。

node.maxWidth = 100.0
node.maxWidth = 200.0

User Data

你可以修改userData在组件上设置用户数据。这个属性接受你自己选择的任何Java对象。通过这种方式,你可以将业务对象附加到JavaFX组件实例上。下面是一个将一些用户数据附加到节点实例的示例。

val button = Button("button")
button.userData = User()

子组件

许多JavaFX组件子类可以包含子组件或项目。如何添加和访问这些子组件或项目取决于具体的节点子类。有些类在items属性中,而有些保存在children中。您必须检查具体的组件来确定。