2009-10-07 51 views
10

¿Cómo puedo obtener la posición real de un nodo en la escena. La posición absoluta, independientemente de cualquier contenedor/transformada.Obtener la coordenada global de un nodo en JavaFX

Por ejemplo, quiero traducir un determinado nodo a para que se superponga temporalmente a otro nodo b. Por lo tanto, deseo establecer su propiedad translateX en b.globalX-a.globalX.

La documentación dice:

Define la coordenada X de la traducción que se añade a los coordenadas transformadas de este Nodo con el propósito de diseño. Los contenedores o los grupos que realizan el diseño establecerán esta variable relativa a layoutBounds.minX para colocar el nodo en la ubicación del diseño deseado .

Por ejemplo, si el niño debe tener una última ubicación de finalX:

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

Es decir, las coordenadas finales de cualquier nodo deben ser

finalX = node.layoutX + node.layoutBounds.minX 

Sin embargo ejecutando el código siguiente :

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}"); 

me da finalX = 0.0 en lugar de finalX = 10.0 como parece indicar el documento.

¿Existe un método claro para obtener las coordenadas de posicionamiento absolutamente definitivas en JavaFX?

+1

Sólo me preguntaba, ¿qué formato es el código anterior en? No es Java, tal vez JSON? –

+0

Es JavaFX, un nuevo lenguaje de programación de Sun/Oracle. –

+0

El formato, sé que es JavaFX, pero no es código Java. –

Respuesta

3

La única solución que encontré hasta ahora es

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

que no parece a mí como el "mejor" manera de hacer eso (tenga en cuenta que esta función no está obligado). Todavía funciona para JavaFX 1.2.

12

Para límites:

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

de trabajo para javafx 1 y 2.

Cuestiones relacionadas