JavaFX Stage in einer FXML-Controllerklasse ermitteln?

Maxi62

Aktives Mitglied
Hi,
manchmal wäre es sinnvoll oder sogar erforderlich das man die Stage des aktuellen Dialoges innerhalb einer FXML-Controllerklasse ermittelt.
Zum Beispiel wenn man den Close-Button des Dialoges mit einem Event abfangen will.

Wie erfährt man am besten die Stage nach dem Start des Dialoges (innerhalb der Controllerklasse)?

Derzeit mache ich das indem ich das Window eines Buttons nach der Stage frage. Das Problem ist nur, das ich die Stage nicht erst nach dem Klick brauche, sondern vorher.
 
Zuletzt bearbeitet:
Wenn ich das richtig in Erinnerung habe ist das nicht möglich. Evtl. lassen sich deine Anforderungen auch mit der Klasse Window umsetzen? Der Close-Request geht über dessen Listener:

Java:
root.getScene().getWindow()
// ...
getWindow().fireEvent(new WindowEvent(getWindow(), WindowEvent.WINDOW_CLOSE_REQUEST));

PS: Ansonsten musst du den Controller laden und direkt die Stage als Parameter übergeben.
 
Zuletzt bearbeitet:
Kuck mal, wovon Stage abgeleitet ist:
Stage (JavaFX 8)

Und?

..............................


Na?


..............................


Von Window, genau!

Du hast in diesem Fall also Glück und kannst also
Code:
Stage stage = (Stage) someJfxWidget.getScene().getWindow();
machen!

\o/
 
Zuletzt bearbeitet:
Stage stage = (Stage) someJfxWidget.getScene().getWindow();

Ja so mach ich es jetzt ja, hatte ich ja geschrieben. Für "someJfxWidge" nehme ich dazu einen Button. Problem ist das das dies aber erst in einem Ereignis eines Controls möglich ist, bei der Funktion Initializable klappt es noch nicht, da zu der Zeit die Stage noch nicht da ist.
Ich brauche die Stage möglichst sofort nachdem der FXML Dialog angezeigt wird, nur so kann ich dort auch den Close-Button des Rahmens sicher abfangen.
Ich muss wohl Stäge von außen in die Controllerklasse übergeben, anders scheint es nicht zu gehen, oder?
 
Kuck mal, wovon Stage abgeleitet ist:

Von Window, genau!

Du hast in diesem Fall also Glück und kannst also
Code:
Stage stage = (Stage) someJfxWidget.getScene().getWindow();
machen!

Achtung dieser Cast kann auch zu einem Fehler führen.
Stage leitet zwar von Window ab, "getWindow()" muss nicht unbedingt eine Objekt vom Typ "Stage" zurückgeben.
Daher sollte eine entsprechende Prüfung vor dem Cast stattfinden.
 
Das Stimmt natürlich! Wobei mir es noch nie passiert ist, dass ich tatsächlich mal keine Stage erhalten habe.
 

Neue Themen


Zurück
Oben