Save Load
GitHub 切换暗/亮/自动模式 切换暗/亮/自动模式 切换暗/亮/自动模式 返回首页

Java Fx Scene

Scene Graph

总览

Scene Graph (场景图)是一种类似树的数据结构,其中树中的每个项目都有零个或一个父级和零个或多个子级。

此软件包中的两个主要类是:

  • Scene–定义要渲染的场景。它包含一个fill变量,指定场景的背景,width并height指定场景的大小的变量,以及content包含的“root”的列表序列Nodes将被渲染到场景上。此序列Nodes是为此的场景图Scene。将A Scene呈现到Stage,这是JavaFX内容的顶级容器。
  • Node–场景图中所有节点的抽象基类。每个节点要么是不具有子节点的“叶”节点,要么是具有零个或多个子节点的“分支”节点。树中的每个节点都有零个或一个父节点。场景图中每个树中只有一个节点将没有父节点,这通常称为“根”节点。场景图中可能有几棵树。有些树可能是的一部分Scene,在这种情况下,它们有资格显示。其他树木可能不属于任何树木Scene。

分支节点是其类型Parent或子类。

叶节点的类,如 Rectangle,Text, ImageView,MediaView,或其他这样的叶类,其不能具有子。

一个节点最多可以在场景图中的任何位置出现一次。具体来说,一个节点在a的子代列表中Parent或作为a的剪辑 必须出现不超过一次Node。有关Node这些限制的更多详细信息,请参见该类。

JavaFX Scene Graph提供了使用CSS(级联样式表)对节点进行样式设置的功能。

Scene

JavaFX Scene类是场景图中所有内容的容器。场景的背景按照fill属性指定的方式填充。 应用程序必须Node通过设置root属性来指定场景图的根。如果将a Group用作根,则场景图的内容将被场景的宽度和高度限制,并且更改场景的大小(如果用户调整舞台的大小)将不会更改场景图的布局。如果将可调整大小的节点(布局Region或 Control)设置为根,则根的大小将跟踪场景的大小,从而根据需要中继内容。

场景的大小可以在构建过程中由应用程序初始化。如果未指定大小,则场景将根据其内容的首选大小自动计算其初始大小。如果仅指定一个维度,则考虑到根的内容偏差,使用指定的维度来计算另一个维度。

应用程序可以在创建时请求深度缓冲区支持或场景抗锯齿支持Scene。仅具有2D形状且没有任何3D变换的场景不需要深度缓冲区,也不需要场景抗锯齿支持。包含3D形状或具有3D变换的2D形状的场景可以使用深度缓冲区支持来进行适当的深度排序渲染。为了避免进行深度战斗(也称为Z战斗),请对没有3D变换的2D形状禁用深度测试。请参阅 depthTest以获取更多信息。具有3D形状的场景可以启用场景抗锯齿功能以提高其渲染质量。

depthBuffer和antiAliasing标志是条件功能。分别具有默认值:false和SceneAntialiasing.DISABLED。请参阅ConditionalFeature.SCENE3D 以获取更多信息。

默认的头灯将添加到包含一个或多个Shape3D节点但不包含任何灯光节点的场景中 。该光源 Color.WHITE PointLight放置在相机位置。

Scene可以在任何线程上创建和修改 A ,直到将其附加到Window上showing。之后,必须仅在JavaFX Application Thread上对其进行修改。注意这Scene不是线程安全的。同时修改Scene多个线程上的a 会导致无法预料的结果,因此必须避免。

JavaFX应用程序线程是在JavaFX运行时启动过程中创建的。有关更多信息,请参见Application类和Platform.startup(Runnable)方法。

Group

一个Group节点包含一个ObservableList的子节点,每当渲染该节点时,这些子节点就会按顺序渲染。 A Group将承担其子代的集体责任,并且不能直接调整其大小。

应用于的任何变换,效果或状态Group都将应用于该组的所有子级。此类变换和效果将不包括在该组的布局范围内,但是,如果直接在该组的子级上设置变换和效果,则这些变换和效果将包括在该组的布局范围内。

默认情况下,a Group将在布局遍历期间将其可调整大小的子控件“自动调整大小”到其首选大小,以确保在区域和控件状态改变时调整其大小。如果应用程序需要禁用此自动调整大小行为,则应将其设置 autoSizeChildren为false并了解,如果子级的首选大小发生更改,则它们将不会自动调整大小(因此请当心!)。