【问题标题】:Fullscreen stage is not working properly in JavaFX 2.1?全屏阶段在 JavaFX 2.1 中无法正常工作?
【发布时间】:2012-07-01 16:03:56
【问题描述】:

我加载它的第一阶段总是以全屏方式正确打开。

stage.setFullScreen(true);
stage.setScene(login_scene); 

但是当我更改为另一个 FXML 时,应用程序保持全屏显示(没有顶部工具栏..),但实际视图内容会在 FXML 的根 AnchorPane 的 prefWidth/prefHeight 上调整大小(我可以在右下角看到桌面角:|),我希望它对我的屏幕分辨率是动态的。

谢谢。

@稍后编辑:

因此,在我的主类的启动方法中,我加载了一个场景(从 FXML 文档创建)并将其设置为舞台(启动方法参数)。我保存这个阶段供以后使用。

当我按下与之前保存的相同阶段的按钮时,我将场景更改为另一个 FXML 文档

@屏幕截图:

http://tinypic.com/r/2079nqb/6 - 第一个场景正常工作 - 代码来自主类的 start override 方法

 @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 个用于 2 种不同情况)可能会有所帮助。
  • @UlukBiy 上传了屏幕截图 - 请您看一下...在简短版本中,它将 prefWidth/prefHeight 视为全屏尺寸。如果没有好的解决方案,你知道我怎么知道屏幕尺寸吗?

标签: java layout fullscreen javafx fxml


【解决方案1】:

如果我知道您的担忧是正确的,那么您应该将初级阶段用作静态,或者您可以通过制作 getter 和 setter 将其提供给其他控制器。因此,要在同一阶段加载其他 fxml,您可以在加载 fxml 时将其设置为,并确保不要创建另一个场景。因为由于新场景,您实际内容已调整大小。 所以你可以使用这个

在 Main.java 中:

YourController objYourController  = loader.getController();
objYourController.setDialogStage(primaryStage);

在 YourController.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);

希望对你有所帮助。

【讨论】:

    【解决方案2】:

    我不知道真正的原因,但这里有 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);
           }
        });
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多