我有一个问题,我的对话框(基本上是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具有相同的效果。 –