Получение глобальной координаты Node в JavaFX
Как я могу получить фактическое положение node в сцене. Абсолютное положение, независимо от каких-либо контейнеров/преобразований.
Например, я хочу перевести определенный node a
так, чтобы он временно перекрывал другой node b
. Поэтому я хочу установить его свойство translateX
в b.globalX-a.globalX
.
В документации написано:
Определяет координату X перевод, который добавляется к преобразованные координаты этого Nodeс целью компоновки. Контейнеры или Группы, выполняющие макет, будут установлены эта переменная относительно layoutBounds.minX для позиции node на требуемом макете местоположение и др.
Например, если ребенок должен иметь конечное местоположение finalX:
child.layoutX = finalX - child.layoutBounds.minX;
То есть конечные координаты любого node должны быть
finalX = node.layoutX + node.layoutBounds.minX
Однако выполняется следующий код:
var rect;
Stage {
title: "Application title"
width: 250
height:250
scene: Scene {
content: [
Stack{content:[rect = Rectangle { width:10 height:10}] layoutX:10}
]
}
}
println("finalX = {rect.layoutX+rect.layoutBounds.minX}");
дает мне finalX = 0.0
вместо finalX = 10.0
, поскольку документы, казалось бы, заявляют.
Есть ли четкий способ получить абсолютно окончательные координаты позиционирования в JavaFX?
Ответы
Ответ 1
Единственное решение, которое я нашел до сих пор, -
rect.localToScene(rect.layoutBounds.minX, rect.layoutBounds.minY) // a Point2D{x:Float y:Float} object
Что мне не кажется "лучшим" способом сделать это (обратите внимание, что эта функция не связана). Тем не менее он работает для JavaFX 1.2.
Ответ 2
Для границ:
bounds = rect.localToScene(rect.getBoundsInLocal());
Работа для JavaFx 1 и 2.
Ответ 3
Начиная с JavaFX 8, существуют дополнительные методы, преобразующие локальные координаты в координаты экрана. Их имена начинаются с "localToScreen"
Вы можете проверить следующую ссылку
http://docs.oracle.com/javase/8/javafx/api/javafx/scene/Node.html#localToScreen-double-double-