Я пытал Google с несколькими вопросами, но все еще не могу понять.
Я хочу создать приложение с двумя сценами FXML, заполненными SceneBuilder. У каждого свой контроллер. Я использую ControlledScreen для переключения сцен, и это работает. Но тогда я не могу ничего изменить на сцене. Например: у меня есть метка в контроллере сцены:
public class ControllerForm implements ControlledScreen, Initializable {
ScreensController myController;
GraphicsContext GC;
@FXML
private Label fitnessLabel;
public void updateFitnessLabel(double data) {
fitnessLabel.setText(String.valueOf(data));
}
public void initialize(URL location, ResourceBundle resources) {
this.GC = neuroCanvas.getGraphicsContext2D();
}
Он определен в файле FXML как:
<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="684.0" prefWidth="918.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="general.ControllerForm">
<left>
<VBox prefHeight="400.0" prefWidth="189.0" BorderPane.alignment="CENTER">
<children>
<Label fx:id="fitnessLabel" text="Label">
<graphic>
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="Fitness:" />
</graphic>
</Label>
А функция обновления метки — это updateFitnessLabel.
В методе инициализации я использую GC, потому что у меня есть холст на этой сцене, и я хочу рисовать на нем.
У меня есть метод, который вызывает эту функцию как:
public class Net {
private ControllerForm controller;
public void drawStart() throws IOException {
FXMLLoader loader = new FXMLLoader(
getClass().getResource(
Main.ScreenFile
)
);
BorderPane cv = loader.load();
// load actual screen
ControllerForm controller =
loader.<ControllerForm>getController();
controller.updateFitnessLabel(12);}
Но никакого эффекта. Этикетка не будет обновляться.
Что мне не хватает?
Я пытался использовать Timeline, но все равно безрезультатно. Как на самом деле нарисовать что-то на этой сцене?