Подтвердить что ты не робот

Получение глобальной координаты 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?

4b9b3361

Ответ 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.