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-порядок и порядок расположения взяты из дочернего порядка.

Другие вопросы по тегам