4

関連するクラス コントローラから FXML ロード ファイルの Stage/Window オブジェクトを取得する方法はありますか?

特に、モーダル ウィンドウ用のコントローラーがあり、それを閉じるにはステージが必要です。

4

2 に答える 2

7

問題に対するエレガントな解決策が見つかりませんでした。しかし、私はこれらの2つの選択肢を見つけました:

  • シーン内のノードからウィンドウ参照を取得する

    @FXML private Button closeButton ;
    
    public void handleCloseButton() {
      Scene scene = closeButton.getScene();
      if (scene != null) {
        Window window = scene.getWindow();
        if (window != null) {
          window.hide();
        }
      }
    }
    
  • 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);
    
    ...
    

    また、FormController は setStage メソッドを実装する必要があります。

于 2012-10-23T01:24:59.620 に答える