我有一個問題,我的對話框(基本上是AnchorPanes有他們的標題)在他們的父節點(也是AnchorPane,但我相信這是無關緊要的)。JavaFX沒有定位節點在父節點
代碼去如下:
public void showDialog(final Dialog dialog) {
dialogStack.add(dialog);
dialogCanvas.toFront();
dialog.toFront();
dialogCanvas.setVisible(true);
dialog.setVisible(true);
getChildren().add(dialog);
dialog.widthProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
if(newValue.doubleValue() > 0) {
centerDialog(dialog);
}
}
});
}
public void centerDialog(final Dialog dialog) {
double width = getWidth();
double height = getHeight();
dialog.setLayoutX(width/2 - dialog.getWidth()/2);
dialog.setLayoutY(height/2 - dialog.getHeight()/2);
}
我使用widthProperty變化監聽器,因爲當它被渲染,然後才它獲得的寬度/高度設置你只能中心節點。
當我在設置對話框的佈局x/y時調試代碼時,值計算得很好,但最後的對話框節點位於上/左角(X:0/Y:0)。
爲什麼?
我可以以某種方式觸發重繪父節點,以便元素的位置正確嗎?我究竟做錯了什麼?
親切的問候, 斯捷潘
您不需要每次都運行Platform.runLater(),並且也因爲性能原因)。只有在這個Platform.runLater()中第一次調用centerDialog就足夠了。這與在primaryStage.show()之後運行centerDialog具有相同的效果。 –