如何用FXMLLoader更新控制器?

问题描述:

我能抓住我的控制器的FXMLLoader控制器,我现在想更新它里面的方法。我怎样才能做到这一点?如何用FXMLLoader更新控制器?

 @Override 
     public void handle(MouseEvent event) 
     { 
      FXMLLoader loader = new FXMLLoader(
        getClass().getResource(UIViewConstants.HIERARCHY_TAB_FULLNAME)); 
      HierarchyTabController controller = new HierarchyTabController(dataModel); 
      loader.setController(controller); 
      System.out.println(loader); 
      loader.updateTable(dataModel) //How can I make this work? 

     } 

在我HierarchyTabController我有一个名为updateTable所以我怎么能调用从实例中,我从现在装载机获得方法?

如果有帮助,它打印出的对象[email protected]

+1

当然,你的意思是'controller.updateTable(...)','不装载机。 updateTable(...)'???但无论如何,你还没有加载FXML。 –

+0

@James_D这就是我的意思,但我该怎么做?我不能只调用HierarchyTabController.updateTable,因为那不会是特定的对象 – Jay266

+1

我不明白你的意思。控制器是一个与UI层次关联的对象,可以从FXML文件中加载。这里你没有加载FXML文件(你永远不会调用'loader.load()'),所以'HierarchyTabController'的实例不与任何UI关联。 (换句话说,如果我们假设'updateTable(..)'更新UI中的表格,那么您在此处创建的实例没有要更新的表格。) –

这是我将如何实现它:

Parent root; 

try { 
    FXMLLoader fxmlLoader = new FXMLLoader(        
    getClass().getClassLoader().getResource 
    (UIViewConstants.HIERARCHY_TAB_FULLNAME)); // getClassLoader() to avoid problems to find the resources when generating the jar file 

    root = (Parent)fxmlLoader.load(); 

    HierarchyTabController controller = 
    fxmlLoader.<HierarchyTabController>getController(); 
    controller.updateTable(dataModel); 
} catch (IOException e) { 
    logger.debug(e); 
}