【问题标题】:JavaFX - switch stages and setX and setY of new stageJavaFX - 切换阶段和新阶段的 setX 和 setY
【发布时间】:2021-05-29 18:55:57
【问题描述】:

我熟悉 JavaFX。我创建了一个 loginStage 和一个 mainStage。当按下 loginStage 上的“登录”按钮时,我想切换到 mainStage。 loginStage 比 mainStage 小很多。我希望 mainStage 的位置使得以前的 loginStage 位于 mainStage 的中间(如果我们没有关闭它的话)。

我设法从 loginStage 切换到 mainStage。但是由于某种原因,mainStage 没有正确定位自己;在我看来,它的 X 和 Y 坐标根本没有设置!

这是我的代码:

 public void switchWindow() {
        FXMLLoader loader = new FXMLLoader();
        try {
            Stage loginStage = (Stage) btnLogin.getScene().getWindow();
            loginStage.setScene(null);
            loginStage.hide();

            Pane mainPane= (Pane) loader.load(getClass().getResource("/mainStage.fxml"));
            Stage mainStage= new Stage();
            mainStage.initStyle(StageStyle.TRANSPARENT);
            Scene mainScene= new Scene(mainPane);
            mainStage.setScene(mainScene);

            mainStage.setX(loginStage.getX() + loginStage.getWidth()/2 - mainStage.getWidth()/2);
            mainStage.setY(loginStage.getY() + loginStage.getHeight()/2 - mainStage.getHeight()/2);

            mainStage.show();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

另外:我会创造更多的舞台。因此,我认为在单独的包中创建 switchWindow() 函数可能是个好主意。我可能只是用参数oldStage and newPane 调用该函数。我想问你:在阶段之间切换的最佳做法是什么?这样我就不会一遍又一遍地重现相同的代码?

【问题讨论】:

    标签: java user-interface javafx


    【解决方案1】:

    我想通了 - 是的,很抱歉,这似乎已经回答过了。

    问题是.getWidth().getHeight() 方法只能在.show() 方法之后调用。因此,要么改变调用函数的顺序。这工作正常 - mainStage 似乎从一开始就处于正确的 x,y 坐标。但是为了确保它在显示舞台后不会移动到那里,我们也可以在 .fxml 文件中查找 mainStage 的宽度和高度,然后分别在 .setX().setY() 中减去这些值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-12
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多