Jav*_*ier 4 java javafx-2 fxml
我想从我加载FXMLoader的场景中获取控制器.用例是:
我启动的任务显示了一个新的场景使用
Parent p = FXMLLoader.load(getClass().getResource("foo.fxml"));
Scene scene = new Scene(p);
stage.setScene(scene);
Run Code Online (Sandbox Code Playgroud)
在那之后,我有空场景.
现在我这样做来填充组件
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);
}
}
Run Code Online (Sandbox Code Playgroud)我的问题是,有更简单的方法吗?我有一个FXML中指定的控制器
<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="526.0" minWidth="356.0" prefHeight="526.0" prefWidth="356.0"
xmlns:fx="http://javafx.com/fxml" fx:controller="bar.foo">
Run Code Online (Sandbox Code Playgroud)
我想获取带有绑定值的实例(在这种情况下,TextField名为name)
提前致谢
Ulu*_*Biy 14
1)您可以从中获取控制器,FXMLLoader但不知道是否可以Scene:
FXMLLoader fxmlLoader = new FXMLLoader();
Pane p = fxmlLoader.load(getClass().getResource("foo.fxml").openStream());
bar.foo fooController = (bar.foo) fxmlLoader.getController();
Run Code Online (Sandbox Code Playgroud)
要fooController在代码的不同部分使用后者,可以使用Node#setUserData().例如,在上面的代码之后:
p.setUserData(fooController);
...
// after a while of app logic and code
bar.foo controller_of_p = (bar.foo) p.getUserData();
Run Code Online (Sandbox Code Playgroud)
这提供了一种解决方法和实现目标的快捷方式.
2)如果你的节点有一个id,那么你可以直接使用Node#lookup()它而不是构造一个for循环:
TextField txt = (TextField) pane.lookup("#nodeId");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11589 次 |
| 最近记录: |