JavaFX中的Z-Order

时间:2010-06-07 09:09:12

标签: java javafx z-order vbox

如何在JavaFX中为VBox设置Z顺序?

3 个答案:

答案 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