JavaFX Subfenster bei Buttonklick/Menüauswahl

Jesterhead

Mitglied
Hallo Leute,

ich suche schon ne weile, finde allerdings nicht das passende.

Ich würde gerne über einen Button oder eine Menüauswahl ein Subfenster öffnen, welches ich ebenfalls mit javaFX steuern kann. Zwischen den zwei Fenstern soll eine Abhängigkeit bestehen.

Wie kann ich so etwas realisieren? Ich versuche es mit:
Code:
        Label secondLabel = new Label(Messages.getString("menuItemSetDefaultUser"));
        
        StackPane secondaryLayout = new StackPane();
        secondaryLayout.getChildren().add(secondLabel);
         
        Scene secondScene = new Scene(secondaryLayout, 200, 100);

        Stage secondStage = new Stage();
        secondStage.setTitle(Messages.getString("menuItemSetDefaultUser"));
        secondStage.setScene(secondScene);

        secondStage.show();

Das funktionier auch. Jedoch bekomme ich es nicht hin, dass ich hier eine .fxml Datei einbauen kann.

Kann mir jemand helfen?

Grüße
 

turtle

Top Contributor
So ganz verstehe ich dein Problem nicht.

So lade ich es immer:

Java:
Pane myPane = (Pane) FXMLLoader.load(getClass().getResource("/some.fxml"));
Scene myScene = new Scene(myPane);
 

Jesterhead

Mitglied
Super, danke!

Nun noch eine Frage:
Wie kann ich diese "Submaske" bei nem Button klick schließen?
Code:
System.exit(0);
beendet leider alle Fenster (die gesamte Anwendung).

So hat es übrigens geklappt:
Code:
       Pane subPane = (Pane) FXMLLoader.load(getClass().getResource("../application/DefaultUser.fxml"));
        
        StackPane subLayout = new StackPane();
        subLayout.getChildren().add(subPane);
        Scene subScene = new Scene(subLayout);
		subScene.getStylesheets().add(getClass().getResource("../application/application.css").toExternalForm());
        Stage subStage = new Stage();
        subStage.setScene(subScene);
        subStage.setTitle(Messages.getString("subSetUser"));
        subStage.show();
 

dzim

Top Contributor
System.exit(0); macht ja auch genau dass, was die Doku dazu hergibt - wie du ja bereits auch festgestellt hast. Ich weiss jetzt nicht, ob du hier ernsthaft erwartet hast, dass dadurch nur das Fenster verschwindet... -.-

Verwende die Methode #close() auf Sub-Stage und diese wird beendet/geschlossen. Das ist übrigens durchaus auch der JavaDox zu der Klasse zu entnehmen. Ich empfehle dir, dir diese einmal bei Gelegenheit zu Gemüte zu führen.
 

Jesterhead

Mitglied
Vielen Dank für die Antwort.

Da ich nun in der "Submaske" eine Einstellung vornehme, würde ich diese Einstellung in der übergeordneten Maske nachladen.

Gibt es hierzu ein Ereignis das ich abfragen kann? Oder hat mir jemand den entsprechenden Tipp wie ich das realisieren kann?

Grüße
 

dzim

Top Contributor
IMHO kannst du auf der Sub-Stage einen Listener dafür registrieren: #setOnCloseRequest(EventHandler<WindowEvent>)

Da der dann ja wieder dort angehängt werden muss, wo du die Stage auch öffnest, solltest du vielleicht deinen Controller vorher aus dem FXML-Loader holen und einen Getter für deine Daten hinzufügen.
Oder halt irgendwie anders, was weiss ich denn... :p (Ich verwende da meist einen internen "EventDispatcher" wo man sich UIs registrieren können.)
 

Ähnliche Java Themen

Neue Themen


Oben