JavaFX 2.0 + FXML。 从其他任务更新场景值

我想从我加载FXMLoader的场景中获取控制器。 用例是:

  1. 我的JSON管理器收到一个JSON对象
  2. 我启动的任务显示了一个新的场景使用

    Parent p = FXMLLoader.load(getClass().getResource("foo.fxml")); Scene scene = new Scene(p); stage.setScene(scene); 

    在那之后,我有空场景。

  3. 现在我这样做来填充组件

     AnchorPane pane = (AnchorPane)((AnchorPane) scene.getRoot()).getChildren().get(0); for(Node node : pane.getChildren()){ String id = node.getId(); if(id.equals(NAME)){ ((TextField)node).setText(value); } } 

我的问题是,有更简单的方法吗? 我有一个FXML中指定的控制器

  

我想获取带有绑定值的实例(在这种情况下,TextField名为name)

提前致谢

1)您可以从FXMLLoader获取控制器,但不知道是否可以从Scene

 FXMLLoader fxmlLoader = new FXMLLoader(); Pane p = fxmlLoader.load(getClass().getResource("foo.fxml").openStream()); bar.foo fooController = (bar.foo) fxmlLoader.getController(); 

要稍后在代码的不同部分使用fooController ,可以使用Node#setUserData() 。 例如,在上面的代码之后:

 p.setUserData(fooController); ... // after a while of app logic and code bar.foo controller_of_p = (bar.foo) p.getUserData(); 

这提供了一种解决方法和实现目标的快捷方式。

2)如果你的节点有一个id,那么你可以直接Node#lookup()而不是构造一个for循环:

 TextField txt = (TextField) pane.lookup("#nodeId");