2017-04-20 77 views
-1

我能抓住我的控制器的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中的表格,那麼您在此處創建的實例沒有要更新的表格。) –

回答

0

這是我將如何實現它:

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