Auf Thema antworten

Für ein neues Fenster kannst du in etwa so hier vorgehen:


[code=Java]    @FXML

    public void opensettingmenu(ActionEvent event) {

        try {

            FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("SettingDialogWindow.fxml"));

            Parent root = (Parent) fxmlLoader.load();

          

            // anstelle von

            // main.getScene().setRoot(root);


            // neue Scene mit dem geladenen root

            // Grösse festlegen

            Scene settingsScene = new Scene(root, 640, 480);

          

            // Stage ist "Utility"-Fenster (Beeinflusst die Fensterdekoration)

            Stage settingsStage = new Stage(StageStyle.UTILITY);

            // das Eltern-Fenster festlegen

            settingsStage.initOwner(main.getStage());

            // Verhindere, dass alle Fenster der Eltern-Hirarchie angeklickt werden könne

            // NONE = jedes Fenster kann geklickt werden

            // WINDOW_MODAL = kein Fenter der Eltern-Hirarchie, aber andere Fenster, die darunter erstellt wurden

            // APPLICATION_MODaL = kein Fenster anklickbar

            settingsStage.initModality(Modality.WINDOW_MODAL);

            // ist klar

            settingsStage.setTitle("Settings");

            // ist auch klar

            settingsStage.setScene(settingsScene);

            // wenn du auf "schliessen"-Events reagieren möchtes, oder sie sogar ablehnen willst -> event.consume()

            // funktioniert natürlich auch bei der PrimaryStage im Main

            settingsStage.setOnCloseRequest(closeEvent -> {

                // react to it in any way

            });

            settingsStage.setOnShown(showEvent -> {

                // z.B. asynchrones Laden von Daten, etc.

            });

            // zeigt das Fenster, blockert aber hier nicht

            // showAndWait() eröffnet dagegen einen "nested-event-loop"

            // -> wenn du auf ein Ergebnis warten möchtest, dann showAndWait, sonst show

            // -> Ergebnis aber auch über die setOnCloseRequest möglich - geht in Richtung reaktives Programmieren

            settingsStage.show();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }[/code]



Oben