JAVAFX 场景生成器多个控制器

JAVAFX Scene builder multiple controllers

我用多个问题折磨google,但仍然没有得到一分。

我想使用 SceneBuilder 填充的 2 个 FXML 场景构建应用程序。每个都有自己的控制器。 我使用 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,因为我在此场景上有 canvas 并且想在其上绘制。

我有调用此功能的方法:

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,还是没有效果。 如何在这个场景中实际绘制一些东西?

好的,我找到了解决方案。

loader.load returns 对象。但我需要初始对象而不是新对象。 使用了这个答案 - FXMLLoader getController returns NULL?

这不是最优的,但我不知道如何获取初始对象。