gpt4 book ai didi

JavaFX FileChooser.showOptionDialog(stage) 从其他类获取舞台

转载 作者:行者123 更新时间:2023-11-30 07:23:03 25 4
gpt4 key购买 nike

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

我有一个 MainApp,从那里我打开主窗口,在那里我有一个菜单栏,从菜单栏我打开一个新窗口,这在主应用程序的 Controller 中调用。

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类中。有没有什么流行的 war 来获得舞台和主要舞台?

谢谢 4 阅读。

最佳答案

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

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

其中节点可以是例如您的按钮之一。

另一种可能性是在 OptionsController 中设置 Stage:

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);

关于JavaFX FileChooser.showOptionDialog(stage) 从其他类获取舞台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37231670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com