JavaFX Fenster scließen

Olaf-H

Neues Mitglied
Hallo , ich habe ein Programm geschrieben das zuerst eine FXML-datei öffnet dort ist ein Knopf wenn dieser Knopf gedrückt wird , wird eine weitere FXML-datei geöffnet mein Problem ist nur das ich es nicht schaffe die alte datei zu schließen.
Controller :

public class Controller {
@FXML
void Flaechenberechnungsmenustart(ActionEvent event) throws IOException {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("Flaechenberechnungsmenu.fxml"));
Parent root1 = (Parent) fxmlLoader.load();
Stage stage1 = new Stage();
stage1.setScene(new Scene(root1));
stage1.show();
}
}
 
Eine FXML-Datei wirst du auch nicht "schliessen" können. Das (neue oder alte) Fenster, bzw. die Stage, dagegen schon. Dafür gibt es die Methode #hide.

Wenn jetzt dein Problem ist "wie komme ich an die Stage?", dann in etwa so:
Java:
Stage stage = (Stage) node.getScene().getWindow();
node kann dabei ein beliebiger Node, ein beliebiges Control, sein. Zum Beispiel ein Button.

Allerdings muss ich sagen, dass ich die Idee, ein neues Fenster zu öffnen und das alte zu schliessen, als reichlich unsauber empfinde. Warum tauschst du nicht den Inhalt der bestehenden Scene aus, oder noch besser, auf einem Root-Layout (so mache ich es meistens - z.B. den center-Node eines BorderPanes...)?
 
Eine FXML-Datei wirst du auch nicht "schliessen" können. Das (neue oder alte) Fenster, bzw. die Stage, dagegen schon. Dafür gibt es die Methode #hide.

Wenn jetzt dein Problem ist "wie komme ich an die Stage?", dann in etwa so:
Java:
Stage stage = (Stage) node.getScene().getWindow();
node kann dabei ein beliebiger Node, ein beliebiges Control, sein. Zum Beispiel ein Button.

Allerdings muss ich sagen, dass ich die Idee, ein neues Fenster zu öffnen und das alte zu schliessen, als reichlich unsauber empfinde. Warum tauschst du nicht den Inhalt der bestehenden Scene aus, oder noch besser, auf einem Root-Layout (so mache ich es meistens - z.B. den center-Node eines BorderPanes...)?

Vielen dank , aber bei mir funktioniert das irgendwie nicht , die note wird als Fehler unterstrichen was soll ich tun ?
 
"node" war nur meine generische Bezeichnung einer Instanz von Node, da so ziemlich alle GUI-Elemente in JavaFX direkt oder indirekt von Node erben. Daher solltest du natürlich hier deine reale Variable, z.B. der Button, der das Event auslöst:
Java:
Stage stage = (Stage) ((Button) event.getSource()).getScene().getWindow();

#edit: Das stand übrigens auch unter meinem Code-Block...
 

Zurück
Oben