JavaFX FileChooser.showOptionDialog(stage)从另一个类获取Stage

时间:2016-05-14 20:45:25

标签: java javafx-8

我正在JavaFX项目的第一次工作,这是我的问题:

我有一个MainApp,从那里我打开主窗口,在那里我有一个MenuBar,从MenuBar我打开一个新窗口,这是在MainApp的控制器中调用的。

public void optionWindow() throws IOException {
    Parent root = FXMLLoader.load(getClass().getResource("/views/options.fxml"));
    Stage stage = new Stage();
    stage.setTitle("options");
    stage.setScene(new Scene(root));
    stage.setResizable(false);
    stage.setAlwaysOnTop(true);
    stage.show();
}

在这个新窗口中,我有两个按钮,其中一个应该使用OptionsController类中的方法打开FileChooser。

public void updateOptions() {
    FileChooser chooser = new FileChooser();
    chooser.showOpenDialog(stage);
}

MainApp启动方法:

@Override
public void start(Stage primaryStage) throws IOException {
    Parent root = FXMLLoader.load(getClass().getResource("/views/Application.fxml"));
    primaryStage.setTitle("Application");
    primaryStage.setScene(new Scene(root));
    primaryStage.show();
}

我的问题是,我怎样才能进入舞台?因为Stage位于MainAppController类中。是否有任何流行的战争来获得阶段和primaryStage?

第4页阅读。

1 个答案:

答案 0 :(得分:1)

您可以通过以下方式获得对Stage的引用:

Stage stage = (Stage) node.getScene().getWindow()

其中节点可以是例如你的一个按钮。

另一种可能性是在Stage

中设置OptionsController
FXMLLoader loader = new FXMLLoader(getClass().getResource("/views/options.fxml"));
Parent root = null;
try {
      root = loader.load();
} catch (IOException e) {
      e.printStackTrace();
}
OptionsController controller = loader.getController();
controller.setParentStage(stage);