如何VBox
在 JavaFX 中设置 Z 顺序?
3 回答
JavaFX 中的 Z 顺序实际上是场景图中的顺序,例如。在场景的内容序列中(然后在组、容器等的内容中)。
所有节点还具有 toFront() 和 toBack() 函数来帮助更改此顺序。为了更好地控制,您必须从一个位置删除节点并将其插入到序列中更高或更低的位置。
使用 toFront() 和 toBack() 函数,您确实可以影响 z 顺序,但请注意,这也会影响布局。例如,HBox 和 VBox 也使用子序列来进行布局,将某些内容移到前面也会将其移动到 [HV]Box 的末尾。这可能不是您想要的。
我一直在寻找一种在所有其他节点之上使用动画节点制作动画的方法,而不会弄乱布局。似乎没有办法做到这一点,因为 z 顺序和布局顺序都取自子顺序。
虽然其他答案仍然正确,但 JavaFX 9 添加了一种无需修改子列表即可操作 z 顺序的方法。这是通过Node.viewOrder
财产完成的。
Java 文档:
定义 this
Node
在其父级中的渲染和选取顺序。此属性用于更改其父节点中节点的呈现和选取顺序,而无需重新排序父节点的
children
列表。例如,这可以用作实现透明度排序的更有效方式。为此,应用程序可以将viewOrder
每个节点的值分配给该节点与查看器之间的计算距离。
children
父级将按降序遍历它viewOrder
。这意味着一个较低的孩子viewOrder
将在一个较高的孩子面前viewOrder
。如果两个孩子有相同的 ,则父母将按照它们在父母列表中viewOrder
出现的顺序遍历它们。children
但是,
viewOrder
不会改变 thisNode
在其父级中的布局和焦点遍历顺序。children
在进行布局或焦点遍历时,父级总是按顺序遍历其列表。默认值:
0.0
自从:
9
请注意,如JavaFX CSS 参考指南所述,可以通过该属性从 CSS 设置此-fx-view-order
属性。