2015-06-30 16 views
9

Qual è il modo migliore per ottenere la posizione assoluta di un nodo in JavaFX? Supponiamo di avere un nodo in un pannello (Hbox, Stackpane, ... o qualsiasi altro pannello) e che potrebbe avere un genitore stesso. Voglio ottenere la posizione assoluta di quel nodo e usarlo in un altro riquadro?ottiene la posizione reale di un nodo in javaFX

risposta

23

Dipende un po 'da cosa si intende per "assoluto". Esiste un sistema di coordinate per il nodo, un sistema di coordinate per il suo genitore, uno per il suo genitore, e così via, e infine un sistema di coordinate per lo Scene e uno per lo schermo (che è potenzialmente una collezione di dispositivi di visualizzazione fisica).

Probabilmente sia le coordinate relative al Scene, nel qual caso si potrebbe fare

Bounds boundsInScene = node.localToScene(node.getBoundsInLocal()); 

o le coordinate rispetto allo schermo:

Bounds boundsInScreen = node.localToScreen(node.getBoundsInLocal()); 

In entrambi i casi il risultato Bounds oggetto ha metodi getMinX(), getMinY(), getMaxX(), getMaxY(), getWidth() e getHeight().

+0

Per curiosità, hai qualche idea del perché didn' t creare un metodo getCenterX() e getCenterY()? – Roland

+2

@Roland No, non proprio, ma c'è sempre un equilibrio tra overspecifying un'API e fornendo abbastanza funzionalità. La mia ipotesi (è una supposizione) è che il caso d'uso più importante per i limiti è per il layout, e posso immaginare che 'minX',' minY', 'width' e' height' sarebbero le proprietà più importanti in quel caso d'uso , con 'maxX' e' maxY' il successivo più utile. 'centerX' e' centerY' probabilmente non hanno abbastanza giustificazione quando è già abbastanza facile calcolarli dagli altri. –

+0

@James_D ... A volte non funziona! Perché? Non capisco davvero! – maryam

0

Supponendo che il nome del principale "finestra" stage e il nome del nodo "menu" si può fare questo :-)

double X=Main.window.getX()+menu.getLayoutX(); 
double Y=Main.window.getY()+menu.getLayoutY();