2015-06-30 56 views
9

在JavaFX中獲取節點的絕對位置的最佳方法是什麼? 假設我們在一個窗格(Hbox,Stackpane,...或任何其他窗格)中有一個節點,並且可能有父節點本身。 我想獲得該節點的絕對位置並在另一個窗格中使用它?在javaFX中獲取節點的實際位置

回答

23

它取決於「絕對」的意思。有一個節點的座標系統,父節點的座標系統,父節點的座標系統等等,最後還有一個座標系統用於屏幕(可能是一組物理顯示設備)。

你可能要麼需要相對Scene的座標,在這種情況下,你可以做

Bounds boundsInScene = node.localToScene(node.getBoundsInLocal()); 
相對於屏幕

或座標:

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

在這兩種情況下,得到Bounds對象具有getMinX(),getMinY(),getMaxX(),getMaxY(),getWidth()getHeight()方法。

+0

出於好奇,你有什麼想法,爲什麼他們沒」使用getCenterX()和getCenterY()方法? – Roland

+2

@Roland不,不是,但是在指定API和提供足夠的功能之間總是有一個平衡點。我的猜測(這是一個猜測)是,邊界最重要的用例是佈局,我可以想象'minX','minY','width'和'height'將是該用例中最重要的屬性,'maxX'和'maxY'是下一個最有用的。 'centerX'和'centerY'可能沒有足夠的理由,因爲它已經很容易計算出來。 –

+0

@James_D ...它有時不起作用!爲什麼?我真的不明白! – maryam

0

假設主舞臺「窗口」的名稱,節點的名稱爲「菜單」,你可以做到這一點:-)

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