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