如何从控制器类打开 JavaFX FileChooser?

2022-09-01 04:15:04

我的问题是,所有使用的例子都需要你在一个阶段中通过。唯一的问题是我的UI是在一个文件中定义的,该文件使用独立于主阶段的控制器类。FileChooserfxml

@FXML protected void locateFile(ActionEvent event) {
    FileChooser chooser = new FileChooser();
    chooser.setTitle("Open File");
    chooser.showOpenDialog(???);
}

我该放些什么才能让它工作?就像我说的,我对控制器类中的任何阶段都没有任何引用,那么我该怎么办????


答案 1

对于场景中的任何节点(例如,根节点;但注入的任何节点都可以),执行@FXML

chooser.showOpenDialog(node.getScene().getWindow());

答案 2

您不必坚持使用在应用程序中创建的阶段,也可以:

@FXML protected void locateFile(ActionEvent event) {
    FileChooser chooser = new FileChooser();
    chooser.setTitle("Open File");
    File file = chooser.showOpenDialog(new Stage());
}

或者,如果您想继续使用相同的阶段,则必须先将阶段传递给控制器:

    FXMLLoader loader = new FXMLLoader(getClass().getResource("yourFXMLDocument.fxml"));
    Parent root = (Parent)loader.load();
    MyController myController = loader.getController();
    myController.setStage(stage);

您将在那里拥有应用程序的主舞台,可以随意使用。


推荐