2009-10-07 11 views
10

Jak uzyskać rzeczywistą pozycję węzła w scenie. Bezwzględna pozycja, niezależnie od jakichkolwiek kontenerów/transformacji.Uzyskiwanie globalnej współrzędności węzła w JavaFX

Na przykład chcę przetłumaczyć określony węzeł a tak, aby tymczasowo nakładał się na inny węzeł b. Dlatego chcę ustawić jego właściwość translateX na b.globalX-a.globalX.

Dokumentacja mówi:

Określa współrzędną X tłumaczeniu który jest dodawany do przekształconych współrzędnych tego węzła dla celów układu. Kontenery lub Grupy wykonujące układ ustawią zmienną w stosunku do layoutBounds.minX w celu umieszczenia węzła w pożądanej lokalizacji lokalizacji.

Na przykład, jeśli dziecko powinno mieć ostateczną lokalizację finalX:

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

Oznacza to, że ostateczne współrzędne dowolnego węzła powinny być

finalX = node.layoutX + node.layoutBounds.minX 

jednak uruchomiony następujący kod :

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

daje mi finalX = 0.0 zamiast finalX = 10.0, tak jak dokumentuje pozornie stan.

Czy istnieje jasna metoda uzyskania absolutnie ostatecznych współrzędnych pozycjonowania w JavaFX?

+1

prostu zastanawiasz się, jaki format jest kod powyżej? To nie jest Java, może JSON? –

+0

To JavaFX, nowy język programowania firmy Sun/Oracle. –

+0

Format, wiem, że to JavaFX, ale nie jest to kod Java. –

Odpowiedz

3

Jedynym rozwiązaniem znalazłem tak daleko jest

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

co nie wydaje mi się jako „najlepszy” sposób to zrobić (należy pamiętać, że ta funkcja nie jest związany). Nadal działa dla JavaFX 1.2.

12

Na granicach:

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

prac na javafx 1 i 2.

Powiązane problemy