1 回答
TA贡献2065条经验 获得超13个赞
您正在检查!stage.isShowing()在新创建的 Stage。这永远不会做你想做的。您需要保留对另一个的引用Stage并继续使用该引用。
public class Controller {
private Stage otherStage;
@FXML
private void btn_Validate(ActionEvent event) {
if (otherStage == null) {
Parent root = ...;
otherStage = new Stage();
otherStage.setScene(new Scene(root));
otherStage.show();
} else if (otherStage.isShowing()) {
otherStage.toFront();
} else {
otherStage.show();
}
}
}
如果您不想Stage在关闭时将其保留在内存中,那么您可以稍微更改上述内容。
public class Controller {
private Stage otherStage;
@FXML
private void btn_Validate(ActionEvent event) {
if (otherStage == null) {
Parent root = ...;
otherStage = new Stage();
otherStage.setOnHiding(we -> otherStage = null);
otherStage.setScene(new Scene(root));
otherStage.show();
} else {
otherStage.toFront();
}
}
}
根据您的需要,您可能还想存储对已加载控制器的引用。
添加回答
举报