JavaFX Class controller Stage/Window reference

java, javafx, javafx-2

Solution

I could not find an elegant solution to the problem. But I found these two alternatives:

Getting the window reference from a Node in the Scene

@FXML private Button closeButton ;

public void handleCloseButton() {
  Scene scene = closeButton.getScene();
  if (scene != null) {
    Window window = scene.getWindow();
    if (window != null) {
      window.hide();
    }
  }
}

Passing the Window as an argument to the controller when the FXML is loaded.

String resource = "/modalWindow.fxml";

URL location = getClass().getResource(resource);
FXMLLoader fxmlLoader = new FXMLLoader();
fxmlLoader.setLocation(location);
fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory());

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

controller = (FormController) fxmlLoader.getController();

dialogStage = new Stage();

controller.setStage(dialogStage);

...

And FormController must implement the setStage method.

Problem

Is there any way of getting the Stage/Window object of an FXML loaded file from the associated class controller? Particularly, I have a controller for a modal window and I need the Stage to close it.

Original source