Javafx: Schließen Sie das Warnungsfeld (oder ein beliebiges Dialogfeld) programmgesteuert

Ich habe eine JavaFx-Anwendung, in der ich eine Warnmeldung anzeigen kann:

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

Weil die Warnung ausgeführt wirdshowAndWait, wird also angezeigt, bis der Benutzer den Dialog entweder mit "Ja" oder "Nein" oder "Schließen" beendet.

Problem: Ich muss diesen Dialog programmgesteuert von einer anderen Stelle aus schließen. Nehmen wir an, der Benutzer hat 20 Sekunden lang keine Option ausgewählt, oder diese Warnmeldung wurde für einen gerade abgeschlossenen Hintergrundprozess angezeigt. Jetzt möchte ich diese Warnmeldung durch Setzen von @ schließeresult seinbuttonTypeCancel, anstatt dass der Benutzer eine beliebige Taste drückt. (Mögendispose Methode in Swing)

Wie kann ich das machen? Ich habe versucht Event.fireevent https: //stackoverflow.com/a/22459308/315598) aber ich kann nicht das richtige Ereignis schreiben.

Danke im Voraus

Bearbeiten: Einschließlich Beispielcode-

MainApp.java - Java-Klasse, die für die Behandlung der Anwendung verantwortlich ist Controller.java - Entsprechende Controller-Datei Design.fxml - FXML-Datei für die Anwendung, die über MainApp.java geladen und von Controller.java gesteuert wird

Compute.java - Eine weitere Java-Klasse zum Ausführen von Berechnungen.

public class Compute {Alert alert;

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.
}

}

Auch gibt es eine alternative Lösung, um dies zu tun? Ursprünglich wollte ich das @ behaltCompute.java sauber von jedem Javafx-Code, konnte aber nicht herausfinden, wie.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage