Конструктор сцен JAVAFX с несколькими контроллерами

Я пытал 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, но все равно безрезультатно. Как на самом деле нарисовать что-то на этой сцене?


person SystemFailure    schedule 29.01.2016    source источник
comment
Было бы полезно, если бы вы могли предоставить больше контекста. Как выглядит FXML? Есть ли другой соответствующий код контроллера?   -  person Greg Brown    schedule 29.01.2016
comment
Больше ничего не актуально. FXML является стандартным. Если я рисую что-то в инициализации, это появляется, поэтому контроллер работает.   -  person SystemFailure    schedule 30.01.2016
comment
Без FXML и дополнительных примеров кода будет сложно диагностировать вашу проблему.   -  person Greg Brown    schedule 30.01.2016
comment
Вот и все :D У ControllerForm гораздо больше лейблов, но они все одинаковые. я думаю, что мне не хватает общего представления о том, как создавать подобные приложения, но я не могу понять, что искать.   -  person SystemFailure    schedule 30.01.2016
comment
Что вы видите, когда запускаете приложение? Что написано на этикетке?   -  person Greg Brown    schedule 30.01.2016
comment
ничего, это в состоянии по умолчанию - метка   -  person SystemFailure    schedule 30.01.2016
comment
У меня такое ощущение, что ваше фактическое содержимое экрана загружается и представляется в другом месте, и что этот код просто загружает разметку, меняет состояние метки и завершает работу. Где код, который на самом деле выводит сцену на экран?   -  person Greg Brown    schedule 30.01.2016
comment
@SystemFailure Добавьте к своему вопросу минимальный, полный и проверяемый пример. Это облегчает отладку и предлагает решение вашего вопроса.   -  person ItachiUchiha    schedule 30.01.2016


Ответы (1)


Хорошо, я нашел решение.

loader.load возвращает объект. Но мне нужен исходный объект, а не новый. Использовал этот ответ - FXMLLoader getController возвращает NULL?

Это не оптимально, но я понятия не имею, как получить исходный объект.

person SystemFailure    schedule 31.01.2016