运行我的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()是否正常工作且打印值确实为真。但是,我的整个屏幕上都没有显示舞台。如何成功切换屏幕并保持屏幕最大化?
答案 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);
}