close fxml window by code, javafx


I need to close the current fxml window by code in the controller

I know stage.close() or stage.hide() do this in fx

how to implement this in fxml? I tried

private void on_btnClose_clicked(ActionEvent actionEvent) {
        Parent root = FXMLLoader.load(getClass().getResource("currentWindow.fxml"));    
        Scene scene = new Scene(root);

        Stage stage = new Stage();            

but it doesn't work!

All help will be greatly appreciated. Thanks!

12/20/2017 7:52:34 PM

Accepted Answer

  1. give your close button an fx:id, if you haven't yet: <Button fx:id="closeButton" onAction="#closeButtonAction">
  2. In your controller class:

    @FXML private javafx.scene.control.Button closeButton;
    private void closeButtonAction(){
        // get a handle to the stage
        Stage stage = (Stage) closeButton.getScene().getWindow();
        // do what you have to do
11/28/2012 9:55:25 AM

If you have a window which extends javafx.application.Application; you can use the following method. (This will close the whole application, not just the window. I misinterpreted the OP, thanks to the commenters for pointing it out).



public class MainGUI extends Application {

Button exitButton = new Button("Exit");
exitButton.setOnAction(new ExitButtonListener());

public class ExitButtonListener implements EventHandler<ActionEvent> {

  public void handle(ActionEvent arg0) {

Edit for the beauty of Java 8:

 public class MainGUI extends Application {

    Button exitButton = new Button("Exit");
    exitButton.setOnAction(actionEvent -> Platform.exit());

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow