我正在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页阅读。答案 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);