I want to get the controller from a scene that i've loaded with FXMLoader. The use case is:
- My JSON manager receives a JSON object
The task I've launched shows a new Scene using
Parent p = FXMLLoader.load(getClass().getResource("foo.fxml")); Scene scene = new Scene(p); stage.setScene(scene);
After that, i have the empty scene.
Now I do this to fill the components
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); } }
My question, is there an easier way to do this? I have a controller specified in 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">
I want to get the instance with the bind values (TextField called name in this case)
Thanks in advance
1) You can get the controller from the
FXMLLoader
but don't know is it possible fromScene
:To use the
fooController
later in a different part of your code, you can useNode#setUserData()
. For example after the code above:This gives a workaround and a shortcut to achieve your goal.
2) If your node has an id then you can directly
Node#lookup()
it rather than constructing a for-loop :