Получение глобальной координаты узла в JavaFX - PullRequest
10 голосов
/ 07 октября 2009

Как я могу получить фактическую позицию узла в сцене . Абсолютная позиция, независимо от каких-либо контейнеров / преобразований.

Например, я хочу перевести определенный узел a, чтобы он временно перекрывал другой узел b. Поэтому я хочу установить для его свойства translateX значение b.globalX-a.globalX.

В документации сказано:

Определяет координату X перевод, который добавляется к преобразованные координаты этого узла с целью макета. Контейнеры или группы, выполняющие макет будут установлены эта переменная относительно layoutBounds.minX для того, чтобы позиционировать узел в желаемой разметке место.

Например, если ребенок должен иметь окончательное местоположение finalX:

 child.layoutX = finalX - child.layoutBounds.minX;

То есть конечные координаты любого узла должны быть

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?

Ответы [ 3 ]

13 голосов
/ 04 октября 2012

Для границ:

bounds = rect.localToScene(rect.getBoundsInLocal());

Работа для JavaFx 1 и 2.

3 голосов
/ 07 октября 2009

Единственное решение, которое я нашел, это

rect.localToScene(rect.layoutBounds.minX, rect.layoutBounds.minY) // a Point2D{x:Float y:Float} object

Что не кажется мне «лучшим» способом сделать это (обратите внимание, что эта функция не связана) Тем не менее это работает для JavaFX 1.2.

2 голосов
/ 10 июля 2014

Начиная с JavaFX 8, существуют дополнительные методы преобразования локальных координат в экранные координаты. Их имена начинаются с "localToScreen"

Вы можете проверить следующую ссылку http://docs.oracle.com/javase/8/javafx/api/javafx/scene/Node.html#localToScreen-double-double-

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...