java - JavaFX - 切换阶段和新阶段的 setX 和 setY
问题描述
我熟悉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
。我想问你:在阶段之间切换的最佳做法是什么?这样我就不会一遍又一遍地重现相同的代码?
解决方案
我想通了 - 是的,我很抱歉,这似乎已经被回答过。
问题是.getWidth()
or.getHeight()
方法只能在方法之后调用.show()
。因此,要么改变调用函数的顺序。这工作正常 - mainStage 似乎从一开始就处于正确的 x,y 坐标。但是为了确保它不会在显示舞台后移动到那里,我们也可以在 .fxml 文件中查找 mainStage 的宽度和高度,然后分别减去这些.setX()
值.setY()
。
推荐阅读
- google-sheets - 将 ImportRange 与 Query 函数一起使用时缺少一些数据
- angular-material - 使用 ngrx 和 trackby 更新 Angular Material Table 数据和列不会刷新 DOM
- sql - 如何在sql server中将名称划分为行?
- excel - 错误转到它不适用于 Excel VBA
- reactjs - 我们可以为每个选择器(即使是最简单的 getter)使用带有 redux 的 Reselect memoization 吗?
- r - 软件R中一张图中三个图的最大值
- node.js - 发送电子邮件的最正确方式是什么?
- aws-sdk-js - 将 WriteRecordsCommand 发送到 TimestreamWriteClient 时出现 UnknownOperationException
- reactjs - 编译错误:已定义但从未使用 no-unused-vars
- javascript - 如何让 div [box] 响应其中的文本