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

我试图通过单击一个按钮来打开一个舞台,但在打开它之前,我想检查舞台是否已经打开,然后将打开的舞台弹出到前面而不是打开一个新的舞台(没有相同的多重打开)阶段)。


@FXML

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

    }

}


catspeake
浏览 168回答 1
1回答

翻翻过去那场雪

您正在检查!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();    }  }}根据您的需要,您可能还想存储对已加载控制器的引用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java