JavaFX中的setMaximized()无法正常工作

时间:2017-10-10 23:09:26

标签: java javafx fxml scenebuilder

运行我的javafx应用程序时,我使用setMaximized(true)来最大化主要阶段,如下所示:

@Override
public void start(Stage primaryStage) throws Exception{
    Parent root = FXMLLoader.load(getClass().getResource("Screens/log_in.fxml"));
    primaryStage.setTitle("My Title");
    primaryStage.setScene(new Scene(root));
    primaryStage.setMaximized(true);
    primaryStage.show();
}

这在启动我的应用程序时非常有效。但是,我尝试在更改屏幕时遵循相同的步骤,但无法获得相同的结果。以下是我的切换屏幕方法:

void changeScreen(ActionEvent event, String fxmlFile) throws Exception {
    Parent newPage = FXMLLoader.load(getClass().getResource(fxmlFile));
    Scene newScene = new Scene(newPage);
    Stage appStage = (Stage) ((Node) event.getSource()).getScene().getWindow();
    appStage.setScene(newScene);
    appStage.setMaximized(true);
    System.out.println(appStage.isMaximized());
    appStage.show();
}

这种方法的结果是从最大化的窗口变为较小的窗口,我不确定为什么会发生这种情况。如我的changeScreen()方法所示,我添加了一个println语句来检查setMaximized()是否正常工作且打印值确实为真。但是,我的整个屏幕上都没有显示舞台。如何成功切换屏幕并保持屏幕最大化?

1 个答案:

答案 0 :(得分:1)

我认为当你设置舞台的场景时,舞台会调整到场景的大小;因为它可能已经最大化了(因为你使用的是你之前最大化的同一个阶段),我的猜测是你对舞台的状态感到困惑(这将是一个错误)。

然而,我真的没有看到在这里创造一个新场景的任何意义;这似乎是不必要的开销。为什么不重复使用相同的场景并替换根?

void changeScreen(ActionEvent event, String fxmlFile) throws Exception {
    Parent newPage = FXMLLoader.load(getClass().getResource(fxmlFile));
    ((Node) event.getSource()).getScene().setRoot(newPage);
}

如果您担心用户可能没有"未最大化"阶段,并希望确保它在更改视图后最大化,您也应该能够这样做:

void changeScreen(ActionEvent event, String fxmlFile) throws Exception {
    Parent newPage = FXMLLoader.load(getClass().getResource(fxmlFile));
    Scene scene = ((Node) event.getSource()).getScene();
    scene.setRoot(newPage);
    ((Stage) scene.getWindow()).setMaximized(true);
}