java - 更改舞台宽度/高度然后切换场景不会更新新场景中的 UI
问题描述
我有两个场景 A 和 B 以及一个舞台。
如果我在场景 A 中并更改舞台宽度/高度,它将更新 UI 以将其缩放到新的舞台尺寸。
但是,如果我从那里切换到场景 B,场景 B 中的 UI 将不会更新,直到我通过调整屏幕大小或打开和关闭舞台等操作强制更新。
当舞台宽度/高度发生变化时,有没有办法更新所有场景?由于一次只能将一个场景设置到舞台上,因此当前的更改不会自动应用于所有场景。
这是一个最小的复制示例。
@Override
public void start(Stage stage) throws Exception {
stage.setWidth(400);
stage.setHeight(400);
Scene scene1, scene2;
BorderPane layout1 = new BorderPane();
Button buttontosecond = new Button("go to second page");
layout1.setCenter(buttontosecond);
scene1 = new Scene(layout1, stage.getWidth(), stage.getHeight());
BorderPane layout2 = new BorderPane();
Button buttonsize = new Button("change size");
Button buttontomain = new Button("back to main");
VBox vbox = new VBox(buttonsize, buttontomain);
vbox.setAlignment(Pos.CENTER);
layout2.setCenter(vbox);
scene2 = new Scene(layout2, stage.getWidth(), stage.getHeight());
buttontomain.setOnAction(actionEvent -> {stage.setScene(scene1);});
buttontosecond.setOnAction(actionEvent -> {stage.setScene(scene2);});
buttonsize.setOnAction(actionEvent -> {stage.setWidth(200);stage.setHeight(200);});
stage.setScene(scene1);
stage.show();
}
解决方案
请勿以这种方式进行场景切换。而是实施单场景根切换系统,如本文的答案所示。我没有设法让上面的代码工作,但我发现这是我的双显示器设置的原因。将游戏窗口拖到另一个显示器时,它工作正常。
推荐阅读
- nsis - 我可以在 NSIS 中使用 LoadLibrary 加载多个 dll 吗?
- java - 从 Java 中的 Char 数组中读取空格
- java - 迁移到 Spring Boot 2.x 后在哪里可以找到 Sleuth 的 Span.TRACE_ID_NAME 替换?
- ansible - 在ansible中获取变量文件名
- php - PDO 准备好的语句返回不正确的 lastInsertId
- r - R - 扩展和添加行
- python - VScode Python - 将选定的行发送到终端添加额外的行
- java - Java 1.8:使用摊销 O(1) 部分遍历 NavigableMap 以找到以下条目?
- excel - Excel索引匹配2表
- php - PHP:在不改变 memory_limit 和 max_execution_time 的情况下读取和导出大数据