为了账号安全,请及时绑定邮箱和手机立即绑定

在再次打开舞台之前检查舞台是否已经打开 javafx

在再次打开舞台之前检查舞台是否已经打开 javafx

catspeake 2021-11-03 16:22:34
我试图通过单击一个按钮来打开一个舞台,但在打开它之前,我想检查舞台是否已经打开,然后将打开的舞台弹出到前面而不是打开一个新的舞台(没有相同的多重打开)阶段)。@FXMLprivate void btn_Validate(ActionEvent event) {    try {        FXMLLoader loader = new FXMLLoader(getClass().getResource("/scontrols/students/StudentManagement.fxml"));        Parent root = (Parent) loader.load();        StudentManagementController sendTo =  loader.getController();        sendTo.receiveFromCamera(txtPictureName.getText());        Stage stage = new Stage();        stage.setScene(new Scene(root));         if(!stage.isShowing())         {             stage.show();}    } catch (IOException ex) {        Logger.getLogger(WebCamController.class.getName()).log(Level.SEVERE, null, ex);    }}
查看完整描述

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();

    }

  }

}

根据您的需要,您可能还想存储对已加载控制器的引用。


查看完整回答
反对 回复 2021-11-03
  • 1 回答
  • 0 关注
  • 167 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信