我加载它的第一阶段总是以全屏形式正确打开。
stage.setFullScreen(true);
stage.setScene(login_scene);
但是当我更改为另一个 FXML 时,应用程序保持全屏(没有顶部工具栏..),但实际的视图内容在 FXML 的根锚窗格的 prefWidth/prefHeight 上调整大小(我可以看到右下角的桌面:|),我希望它对我的屏幕分辨率是动态的。
谢谢。
@Later编辑:
因此,在我的主类的启动方法上,我加载了一个场景(从FXML文档创建)并将其设置为舞台(启动方法参数)。我保存此阶段供以后使用。
当我按下与之前保存的相同舞台的按钮时,我将场景更改为另一个FXML文档
@Screenshots:
http://tinypic.com/r/2079nqb/6 - 第一个场景正常工作 - 代码从开始覆盖主类的方法
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("Sample.fxml"));
stage.setScene(new Scene(root));
stage.setFullScreen(true);
stage.show();
currentStage = stage;
}
http://tinypic.com/r/szfmgz/6 - 重新加载第二个场景后 - 下面的代码来自示例控制器类
@FXML
private void handleButtonAction(ActionEvent event) throws IOException {
Parent root = FXMLLoader.load(getClass().getResource("Sample.fxml"));
JavaFXApplication12.currentStage.setScene(new Scene(root));
}
我不知道真正的原因,但这里有 2 个快速解决方法。
在handleButtonAction
方法中:
1)不要创建新场景,只是替换其内容
@FXML
private void handleButtonAction(ActionEvent event) throws IOException {
Parent root = FXMLLoader.load(getClass().getResource("Sample.fxml"));
JavaFXApplication12.currentStage.getScene().setRoot(root);
}
2)如果您真的想创建新场景,请切换全屏
@FXML
private void handleButtonAction(ActionEvent event) throws IOException {
Parent root = FXMLLoader.load(getClass().getResource("Sample.fxml"));
JavaFXApplication12.currentStage.setScene(new Scene(root));
Platform.runLater(new Runnable() {
@Override
public void run() {
JavaFXApplication12.currentStage.setFullScreen(false);
JavaFXApplication12.currentStage.setFullScreen(true);
}
});
}
如果我知道您的担忧是正确的,那么您应该将主阶段用作静态阶段,或者您可以通过制作 getter 和 setter 将其提供给其他控制器。因此,要获得相同的舞台来加载其他 fxml,您可以将其设置为在加载 fxml 时,并确保不要创建另一个场景。因为由于新场景,您的实际内容调整了大小。所以你可以使用这个
主要.java:
YourController objYourController = loader.getController();
objYourController.setDialogStage(primaryStage);
在控制器中.java:
public void setMystage(Stage primaryStage) {
this.primaryStage= primaryStage;
}
//To load another FXML
Parent root = FXMLLoader.load(getClass().getResource("Sample.fxml"));
primaryStage.getScene().setRoot(rootLayout);
希望对您有所帮助。