JavaFX设置场景的根导致根更改大小

时间:2019-02-21 16:40:10

标签: java user-interface javafx javafx-8 scene

我发现,当我设置场景的根部(如建议的那样-而不是简单地设置场景)时,即使我提供与场景相同的尺寸,也会调整根窗格的大小,并且无法正确放置在舞台中。阶段。屏幕截图可以在下面的链接中看到。

如果我使用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 setScene() (although it looks good because of the flashing between scene changes I feel like an epilepsy warning may be needed haha)

This is the result of setRoot()

任何帮助将不胜感激。

0 个答案:

没有答案