I came across some documents on internet that in javafx you can apply controller to only parent element.
I have a javafx application (built with scenebuilder, eclipse) which has basic structure like this :
SplitPane
{
AnchorPane
{
}
AnchorPane
{
GridPane
{
Pane
{
Label
{
}
}
Pane
{
Label
{
}
}
}
}
}
I want to change the values of those labels at runtime. But it is throwing java.lang.NullPointerException. My assumption why this is hapening is I'm applying controller to split pane and the labels are not direct children of it so I can't access them.
So questions are : 1) Is my assumption correct ? If not where I'm wrong or missing something ?
2) How to access the labels ?
3) Can I use controller for inner elements (not parent) ?
Thanks in advance, and sorry if the question doesn't make any sense, I'm very very new to javafx.
UPDATE : HERE'S THE CODE i'M USING AND EXCEPTION STACK TRACE :
public class Controller implements Initializable
{
@FXML
private SplitPane splitPane;
@FXML
private AnchorPane anchorPane1;
@FXML
private AnchorPane anchorPane2;
@FXML
private GridPane gridPane;
@FXML
private static Label z1;
@FXML
private static Label z2;
private HashMap<Integer,Label> zoneLabelNames = new HashMap<Integer,Label>();
public Controller()
{
// I have around 20 such labels which's value i'm setting using a loop. For now I've writter two only.
zoneLabelNames.put(0, z1);
zoneLabelNames.put(1, z2);
new Thread(() -> {
while(true)
{
try
{
//some logic to generate new values which will update labels
Platform.runLater(() -> {
//here I'm actually setting values in loop, for now I wrote only two labels.
for(int i =0;i<2;i++)
{
zoneLabelNames.get(i).setText("newly generated value"); // nullPointerException at this line
}
});
}
catch(Exception e)
{
e.printStackTrace();
}
}
}).start();
}