gpt4 book ai didi

JavaFX-2:如果不是手动设置,如何获取窗口大小?

转载 作者:搜寻专家 更新时间:2023-10-31 08:26:38 25 4
gpt4 key购买 nike

我想在其父窗口的中心上方打开一个对话窗口,所以我使用以下公式:

Window window = ((Node) actionEvent.getSource()).getScene().getWindow();
Scene scene = new Scene(new Group(new DialogWindow()));
Stage dialog = new Stage();
dialog.initOwner(window);
dialog.sizeToScene();

dialog.setX(stage.getX() + stage.getWidth() / 2 - dialog.getWidth() / 2); //dialog.getWidth() = NaN
dialog.setY(stage.getY() + stage.getHeight() / 2 - dialog.getHeight() / 2); //dialog.getHeight() = NaN

dialog.setScene(scene);
dialog.show(); //it is better to showAndWait();

我没有手动设置大小,因为我需要窗口根据其内容的大小自动调整大小。

在 Linux 下,它将窗口直接设置在父窗口的中心。但在 Windows 中它不起作用并导致不同的结果。

如果不手动设置,如何获取对话框的宽度和高度?

最佳答案

Stage 的宽度和高度在显示后计算 (.show())。之后进行计算:

...
dialog.show();
dialog.setX(stage.getX() + stage.getWidth() / 2 - dialog.getWidth() / 2); //dialog.getWidth() = not NaN
dialog.setY(stage.getY() + stage.getHeight() / 2 - dialog.getHeight() / 2); //dialog.getHeight() = not NaN

编辑:
如果使用 showAndWait() 而不是 show(),则由于 showAndWait() 会阻止调用者事件,所以 showAndWait 之后的计算() 也被阻止。一种解决方法是在新的 Runnable 之前进行计算:

final Stage dialog = new Stage();
dialog.initOwner(window);
dialog.initModality(Modality.WINDOW_MODAL);
dialog.sizeToScene();
dialog.setScene(scene);

Platform.runLater(new Runnable() {
@Override
public void run() {
dialog.setX(primaryStage.getX() + primaryStage.getWidth() / 2 - dialog.getWidth() / 2); //dialog.getWidth() = NaN
dialog.setY(primaryStage.getY() + primaryStage.getHeight() / 2 - dialog.getHeight() / 2); //dialog.getHeight() = NaN
}
});
dialog.showAndWait();

另请注意 initModality。在 showAndWait() 的情况下必须设置模态。否则使用 showAndWait() 没有任何意义。

关于JavaFX-2:如果不是手动设置,如何获取窗口大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19025935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com