java - 最大化舞台后的场景最大化javafx
问题描述
当我调整窗口、舞台以及包含场景的大小时,正确调整了大小,但是当我单击最大化按钮时,只有舞台被最大化,而不是里面的场景。更糟糕的是,没有手动更改场景高度和宽度的方法(这些是只读的)。我还尝试创建新场景并将旧场景中的根元素放入其中,但随后出现异常,即 2 个场景不能具有相同的根元素。谢谢!
最小的可重现示例:
@Override
public void start(Stage primaryStage) {
Group root = new Group();
Scene scene = new Scene(root, 200, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
primaryStage.maximizedProperty().addListener((observable, oldValue, newValue) -> {
if (newValue) {
System.out.println("stage width: " + primaryStage.getWidth());
System.out.println("scene width: " + scene.getWidth());
}
});
primaryStage.widthProperty().addListener((obs, oldVal, newVal) -> {
System.out.println("stage width: " + primaryStage.getWidth());
System.out.println("scene width: " + scene.getWidth());
});
}
我先稍微调整一下窗口大小,然后单击最大化。这是输出的屏幕截图:
我标记了单击最大化的时刻。谢谢!
解决方案
正如@Slaw 在评论中指出的那样,场景在舞台之后调整大小,因此听舞台尺寸变化是行不通的。我应该改为听场景变化。所以正确的代码如下:
@Override
public void start(Stage primaryStage) {
Group root = new Group();
Scene scene = new Scene(root, 200, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
scene.heightProperty().addListener((observable, oldValue, newValue) -> {
System.out.println("stage height: " + primaryStage.getHeight());
System.out.println("scene height: " + scene.getHeight());
});
scene.widthProperty().addListener((obs, oldVal, newVal) -> {
System.out.println("stage width: " + primaryStage.getWidth());
System.out.println("scene width: " + scene.getWidth());
});
}
非常感谢!:D
推荐阅读
- javascript - Discord Bot 根据用户请求分配角色
- java - 无法将“java.lang.String”类型的值转换为所需的“java.sql.Date”类型
- python - 对齐熊猫数据框中的数据
- javascript - 使用开放天气图 api/ 时出现 401 错误
- c# - 迭代 ObservableCollection
价值观 - javascript - onClick 在 React MaterialUI 中的 TableRow
- oracle - Oracle 中的 v$pdbs 和 dba_pdbs 有什么区别?
- c# - ASP.NET Core 2.2 Web API 角。托管服务提供商说 500 - 内部服务器错误
- android - 如何在android中打开webview之前显示进度条
- django - Django - 上一个用户选择的动态过滤外键选择