JavaFX类控制器阶段/窗口引用

nai*_*jed 4 java javafx javafx-2

有没有办法从关联的类控制器获取FXML加载文件的Stage/Window对象?

特别是,我有一个模态窗口的控制器,我需要舞台来关闭它.

nai*_*jed 7

我无法找到解决问题的优雅方案.但我发现了这两种选择:

  • 从场景中的节点获取窗口引用

    @FXML private Button closeButton ;
    
    public void handleCloseButton() {
      Scene scene = closeButton.getScene();
      if (scene != null) {
        Window window = scene.getWindow();
        if (window != null) {
          window.hide();
        }
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 加载FXML时,将Window作为参数传递给控制器​​.

    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);
    
    ...
    
    Run Code Online (Sandbox Code Playgroud)

    而FormController必须实现setStage方法.