我已经尝试了很多方法来使该场景适合舞台(就像我的应用程序中的其他场景一样),但是我无法弄清楚。
我目前正在使用按钮和控制器来切换场景,目的是保持MVC格式,因此我正在使用stage.setScene(new Scene(root pane), desired width, desired height)
行。
但是,切换场景带来的闪烁破坏了我应用程序的无缝性。
我尝试了其他建议,例如stage.centerOnScreen()
,但这似乎使整个阶段的视线移开了(减少了一半的阶段),我也尝试了stage.sizeToScreen()
,但这似乎没有什么区别
理想情况下,我想使用stage.getScene().setRoot(pane)
,但场景似乎会更改大小或创建白色边框,而不是调整舞台大小以适合场景(如图所示)。
如果到目前为止我还没有清楚自己的意思,那我就是在努力使场景适应舞台。设置为根时,场景的根窗格是所需的大小,但是由于某种原因,场景会更改大小。
这就是我希望场景适合舞台(这是场景1)
但是这是当我将场景的根目录更改为下一页时发生的情况。
因此,理想情况下,我正在寻找一种使用setRoot(pane)
,使场景适合舞台或使用setScene(scene)
而不会闪烁的方法。
代码示例:
在我的一个控制器中,我有此功能(按预期工作):
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 all the page components
}
在另一个控制器中,当出现我想要的方式时,我必须使用它(但这会产生闪烁):
public void handle(MouseEvent event) {
if (event.getSource() instanceof Button) {
Button clickedButton = (Button)event.getSource();
Stage primaryStage = (Stage)((Node)event.getSource()).getScene().getWindow();
if (clickedButton.getId().equals("create-button")) {
primaryStage.setScene(view.getCreateScene());
}
}
在视图中:
public Scene getCreateScene() {
return new Scene(bpCreateMain, 1500, 750); // bpCreateMain is the border pane that contains all the page components
}
但是,我想使用.setRoot()而不是如第一个示例中所示的setScene()来消除闪烁,但还需要使其如预期的那样出现(因此,我想在其中使用我的getCreatePane()方法此视图-与getWelcomePane()而不是getCreateScne()类似,方法实际上是相同的,因此我不确定为什么它不起作用。