JavaFX - 如何获取FXML控制器?

15

我有如下代码:

Parent parent = FXMLLoader.load(Main.class.getResource("JanelaPrincipal.fxml"));
在fxml文件中有对控制器类的引用。我该如何获取控制器对象?

fxml:

<AnchorPane id="AnchorPane" fx:id="root" 
    prefHeight="768.0" prefWidth="1024.0" xmlns:fx="http://javafx.com/fxml/1" 
    xmlns="http://javafx.com/javafx/2.2" 
    fx:controller="br.meuspila.javafx.JanelaPrincipalController">
    ...
1个回答

35

实例化一个FXMLLoader并使用实例的load方法,而不是类的静态load方法。然后您可以从loader实例中检索控制器实例。

FXMLLoader loader = new FXMLLoader(
  getClass().getResource(
    "customerDialog.fxml"
  )
);

Pane pane = (Pane) loader.load();

CustomerDialogController controller = 
    loader.<CustomerDialogController>getController();
controller.initData(customer);

更多信息请参见:


1
这正是我所需要的。谢谢! - ceklock
1
那真的很有帮助。谢谢。 - Madushan Perera
2
是的,这个回答非常有帮助!还要确保在实例化FXMLLoader类时,按照此答案所示进行(同时指定.fxml文件)。我之前只是使用new FXMLLoader(); 进行实例化,但后来当我尝试访问fxml模板文件的控制器时,会出现空指针异常。 - user2407334

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接