Z-Order в JavaFX
Как мне установить Z-порядок для VBox
в JavaFX?
3 ответа
Z-порядок в JavaFX фактически является порядком в графе сцены, например. в последовательности содержимого сцены (затем в содержимом групп, контейнеров и т. д.).
Все узлы также имеют функции toFront() и toBack(), чтобы помочь изменить этот порядок. Для более точного управления вы должны удалить узлы из одного места и вставить их выше или ниже в последовательности.
В то время как другие ответы все еще правильны, JavaFX 9 добавил способ манипулировать Z-порядком без изменения списка детей. Это сделано с Node.viewOrder
имущество.
Javadoc:
Определяет порядок рендеринга и комплектации этого
Node
в пределах своего родителя.Это свойство используется для изменения порядка рендеринга и выбора узла в его родительском элементе без изменения порядка родительского элемента.
children
список. Например, это можно использовать как более эффективный способ реализации прозрачной сортировки. Для этого приложение может назначитьviewOrder
значение каждого узла до вычисленного расстояния между этим узлом и зрителем.Родитель будет пересекать его
children
в убывающемviewOrder
порядок. Это означает, что ребенок с более низкимviewOrder
будет перед ребенком с более высокимviewOrder
, Если двое детей имеют одинаковыеviewOrder
родитель будет проходить их в том порядке, в котором они отображаютсяchildren
список.Тем не мение,
viewOrder
не меняет расположение и порядок обхода фокуса этогоNode
в пределах своего родителя. Родитель всегда пересекает егоchildren
список по порядку при выполнении макета или обхода фокуса.Значение по умолчанию:
0.0
Поскольку:
9
С помощью функций toFront() и toBack() вы действительно можете влиять на z-порядок, но имейте в виду, что это также влияет на макет. Например, HBox и VBox также используют последовательность дочерних элементов для создания макета, а перемещение чего-либо вперед также перемещает его в конец блока [HV]. Это может быть не то, что вы ищете.
Я искал способ сделать анимацию с анимированным узлом поверх всех остальных, не портя макет. Кажется, нет никакого способа сделать это, потому что z-порядок и порядок расположения взяты из дочернего порядка.