2009-10-07 9 views
10

Comment puis-je obtenir la position réelle d'un nœud dans la scène. La position absolue, indépendamment des conteneurs/transformations.Obtention de la coordonnée globale d'un nœud dans JavaFX

Par exemple, je souhaite traduire un certain noeud a afin qu'il chevauche temporairement un autre noeud b. Donc, je souhaite définir sa propriété translateX à b.globalX-a.globalX.

La documentation dit:

Définit la coordonnée X de la traduction qui est ajouté aux coordonnées transformées de ce noeud aux fins de mise en page. Les conteneurs ou les groupes effectuant la mise en page définissent cette variable par rapport à layoutBounds.minX afin de positionner le nœud à l'emplacement souhaité .

Par exemple, si l'enfant devrait avoir un emplacement final de finalX:

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

C'est, les coordonnées finales de tout nœud doit être

finalX = node.layoutX + node.layoutBounds.minX 

Cependant exécutant le code suivant :

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 donne finalX = 0.0 au lieu de finalX = 10.0 comme les docs semblent l'indiquer.

Existe-t-il une méthode claire pour obtenir les coordonnées de positionnement absolument finales dans JavaFX?

+1

Je me demandais, quel format est le code ci-dessus? Ce n'est pas Java, peut-être JSON? –

+0

C'est JavaFX, un nouveau langage de programmation de Sun/Oracle. –

+0

Le format, je sais que c'est JavaFX, mais ce n'est pas du code Java. –

Répondre

3

La seule solution que je trouve à ce jour est

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

Ce qui ne me semble pas que la « meilleure » façon de le faire (notez que cette fonction ne soit pas lié). Cela fonctionne encore pour JavaFX 1.2.

12

Pour limites:

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

travail pour JavaFX 1 et 2.