JavaFX - 如何获得FXML控制器?

cek*_*ock 10 java javafx fxml

我有以下代码:

Parent parent = FXMLLoader.load(Main.class.getResource("JanelaPrincipal.fxml"));
Run Code Online (Sandbox Code Playgroud)

在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">
    ...
Run Code Online (Sandbox Code Playgroud)

jew*_*sea 29

实例化FXMLLoader并使用实例加载方法而不是类静态加载方法.然后,您可以从加载程序实例中检索控制器实例.

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

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

CustomerDialogController controller = 
    loader.<CustomerDialogController>getController();
controller.initData(customer);
Run Code Online (Sandbox Code Playgroud)

有关详情,请参阅:

  • 是的,这是一个非常有帮助的答案!另请确保在创建 FXMLLoader 类的实例时,按照此答案中所示的方式进行操作(同时指定 .fxml 文件)。我只是将其视为 new FXMLLoader(); 当我稍后尝试访问 fxml 模板文件的控制器时,这给了我一个空指针异常。 (2认同)