Проверьте, если стадия уже открыта, прежде чем открыть ее снова javafx - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь открыть сцену, нажимая кнопку, но перед тем, как открыть ее, я хочу проверить, открыта ли сцена, а затем открыть открытую сцену вперед, а не открывать новую (нет нескольких открытыхтой же стадии).

@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);
    }
}

1 Ответ

0 голосов
/ 08 октября 2018

Вы проверяете !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();
    }

}

Вы также можете сохранить ссылку на загруженный контроллер, в зависимости от ваших потребностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...