Javafx: Fermer la boîte d'alerte (ou une boîte de dialogue) par programmation

J'ai un JavaFx application dans laquelle j'affiche une boîte d'alerte à l'aide de:

alert = new Alert(AlertType.CONFIRMATION);
alert.setTitle("Title");
alert.setHeaderText("Some Text");
alert.setContentText("Choose your option.");
buttonTypeOne = new ButtonType("Yes");
buttonTypeCancel = new ButtonType("No", ButtonData.CANCEL_CLOSE);
alert.getButtonTypes().setAll(buttonTypeOne, buttonTypeCancel);
Optional<ButtonType> result = alert.showAndWait();

Parce que l'alerte s'exécuteshowAndWait, de sorte qu'il sera affiché jusqu'à l'utilisateur de presse " Oui " ou " Non " ou "Fermer" la boîte de dialogue.

Problème: j'ai besoin de fermer cette boîte de dialogue par programmation à partir d'un autre endroit. D'élaborer, si, disons que l'utilisateur n'a pas choisi une option pour 20 sec, ou disons que cette boîte d'alerte a été montré pour certains processus d'arrière-plan qui a tout juste eu le dessus, et j'aimerais maintenant fermer cette boîte d'alerte par la mise en result être buttonTypeCancel, à la place de l'utilisateur en appuyant sur un bouton.
(Comme dispose méthode de Swing)

Comment puis-je faire cela? J'ai essayé de l'Événement.fireevent (https://stackoverflow.com/a/22459308/3155986) mais je ne suis pas capable d'écrire le bon événement associé.

Merci d'avance!

Edit: y Compris les exemples de code-

  1. MainApp.java - la classe Java responsable du traitement de la demande
  2. Controller.java - contrôleur Correspondant fichier
  3. De conception.fxml - FXML fichier de l'application, qui est chargé par MainApp.java et contrôlé par Controller.java
  4. Compute.java - une Autre classe java pour effectuer des calculs.

    public class Calcul{
    Alerte alerte;

    public void function1{
      Platform.runLater(new Runnable(){
          public void run(){
          alert = new Alert(AlertType.CONFIRMATION);
          alert.setTitle("Title");
          alert.setHeaderText("Some Text");
          alert.setContentText("Choose your option.");
          buttonTypeOne = new ButtonType("Yes");
          buttonTypeCancel = new ButtonType("No", ButtonData.CANCEL_CLOSE);
          alert.getButtonTypes().setAll(buttonTypeOne, buttonTypeCancel);
    
          Optional<ButtonType> result = alert.showAndWait();
          if (result.get() == buttonTypeOne){
          //... user chose "One"
          } else {
          //... user chose CANCEL or closed the dialog
          }
    
          }
      });
    }
    
    public void function2{
     //......Does some long computation here 
     //.... If the computation finishes before the user chooses 'Yes' or 'No' on alert box
    //...Then close the alertbox here and execute the code corresponding to buttonTypeCancel
    
    
    //..I tried alert.close(); and alert.hide(); but doesn't work.
    }

    }

Aussi, est-il une solution alternative pour ce faire? A l'origine, je voulais garder la Compute.java propre de toute javafx code, mais ne pouvait pas comprendre comment.

Si vous avez de référence pour Window (Stage) ou Alert (Dialog), vous pouvez invoquer .close() de deux d'entre eux.
J'ai essayé .close()/ .hide() pour l'alertbox, mais il n'est pas exécuté. Je souhaite effectuer le code pour buttonTypeCancel lorsque l'alertbox est fermé forecefully de quelque chose de javacode.

OriginalL'auteur Dilpreet Kaur | 2015-06-10