如何用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]
答
这是我将如何实现它:
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);
}
当然,你的意思是'controller.updateTable(...)','不装载机。 updateTable(...)'???但无论如何,你还没有加载FXML。 –
@James_D这就是我的意思,但我该怎么做?我不能只调用HierarchyTabController.updateTable,因为那不会是特定的对象 – Jay266
我不明白你的意思。控制器是一个与UI层次关联的对象,可以从FXML文件中加载。这里你没有加载FXML文件(你永远不会调用'loader.load()'),所以'HierarchyTabController'的实例不与任何UI关联。 (换句话说,如果我们假设'updateTable(..)'更新UI中的表格,那么您在此处创建的实例没有要更新的表格。) –