我发现,当我设置场景的根部(如建议的那样-而不是简单地设置场景)时,即使我提供与场景相同的尺寸,也会调整根窗格的大小,并且无法正确放置在舞台中。阶段。屏幕截图可以在下面的链接中看到。
如果我使用setScene函数,它会按预期工作,并且根窗格的大小正确,但是在场景更改之间会出现白屏闪烁。
以下是我的项目中的示例:
// resizes root pane - too small for stage
public void handle(MouseEvent event) {
if (event.getSource() instanceof Button) {
Button sourceButton = (Button)event.getSource();
Stage primaryStage = (Stage ((Node)event.getSource()).getScene().getWindow();
if (sourceButton.getId().equals("back-button")) {
primaryStage.getScene().setRoot(view.getWelcomePane());
}
}
}
public Pane getWelcomePane() {
return new BorderPane(bpWelcomeMain); // bpWelcomeMain is the border pane that contains the page components
}
或者:
// produces 'flashing' between scene transition (but root pane is correct size)
public void handle(MouseEvent event) {
if (event.getSource() instanceof Button) {
Button sourceButton = (Button)event.getSource();
Stage primaryStage = (Stage ((Node)event.getSource()).getScene().getWindow();
if (sourceButton.getId().equals("back-button")) {
primaryStage.setScene(view.getWelcomeScene());
}
}
}
public Pane getWelcomeSceme() {
return new Scene(bpWelcomeMain, 1500, 750); // bpWelcomeMain is the border pane that contains the page components
}
我已经尝试过sizeToScene()以及其他文章中提到的其他方法,但是我还没有找到解决方案。函数setRoot()似乎可以在我的一个页面上运行,但不能在其他页面上运行,即使它们的尺寸相同,并且在根窗格之间进行切换的代码也相同。我不明白为什么setRoot()可用于一个页面,而不适用于其他页面。我也不明白为什么setScene()会生成正确大小的根窗格,而setRoot()不会。
因此,我想使用setRoot()函数而不调整根窗格的大小,或者使用setScene()而不使用场景转换之间的闪烁(这会破坏UI的流动性)。有办法吗?
This is the result of setRoot()
任何帮助将不胜感激。