在JavaFX FXML中将应用程序窗口最大化启动不起作用

3
我希望我的Javafx FXML应用程序启动时最大化,所以我在我的stage中使用了方法setMaximized(true)
程序开启后确实以最大化显示,但是问题在于应用程序启动时会出现一个短暂的黑色区域闪烁,然后窗口才会出现。
这里是我描述的gif录像: enter image description here 我发现问题源于场景(scene)试图以其prefWidth和prefHeight打开,然后缩放以适应stage。我该如何解决这个问题,使程序像正常程序一样启动?
这是我的start()方法:
@Override
public void start(Stage primaryStage) throws Exception{
    Parent root = FXMLLoader.load(getClass().getResource("editor.fxml"));
    primaryStage.setTitle("Simple Text Editor");
    primaryStage.setScene((new Scene(root)));
    primaryStage.setMaximized(true);
    primaryStage.show();
}

1
如果您构建一个发布版(.exe / .jar)并运行它,会发生什么?如果故障仍然显示,请在新线程中调用“primaryStage.show()”(例如Platform.runLater())。 - Martin Pfeffer
是的,运行jar文件时也会发生同样的事情。在“Platform.runLater()”中调用“primaryStage.show()”也没有改变任何东西。 - user5946312
注意:添加primaryStage.setResizable(false);后,它将显示一个小窗口而不是黑色和白色的矩形,并突然最大化。 - Linuslabo
1个回答

3
我找到的唯一解决办法是这样的:
@Override
public void start(Stage primaryStage) throws Exception{
    Parent root = FXMLLoader.load(getClass().getResource("editor.fxml"));
    primaryStage.setTitle("Simple Text Editor");
    primaryStage.setScene(new Scene(root));
    primaryStage.setMinWidth(450);
    primaryStage.setMinHeight(300);

    Screen screen = Screen.getPrimary();
    Rectangle2D bounds = screen.getVisualBounds();
    primaryStage.setWidth(bounds.getWidth());
    primaryStage.setHeight(bounds.getHeight());

    primaryStage.setMaximized(true);
    primaryStage.show();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接