Javafx создает еще один этап и инициализирует поля f xml в том же контроллере - PullRequest
0 голосов
/ 01 мая 2020

Я создаю приложение, которое имеет 3 дизайна, которые отличаются по стилю и структуре f xml и некоторыми анимациями и действиями, но также имеют некоторые функции (ListViews, выход из системы, изменение стилей, слушатели и т. Д. c.) ,

Поэтому я решил создать контроллер базового класса и все стили для его расширения. Моя проблема возникла, когда я решил, что хочу сделать меню одного из стилей отдельным служебным этапом, который можно перетаскивать по экрану и всегда задавать фронт.

Затем я решил создать сцену с тот же контроллер - вызовите setController для f xml в качестве этапа содержимого:

    FXMLLoader loader = new FXMLLoader(getClass().getResource("/FXML/logged-second-menu.fxml"));
    loader.setController(secondLoggedController);
    Pane root = loader.load();

Но затем снова вызывается метод инициализации контроллера, и это не то, что я хочу, потому что меню f xml нет полей метода инициализации контента

Так что в основном у меня есть базовый контроллер с состоянием общего ресурса:

public class ControllerLogged {
    @Fxml
    contentFields
    @Fxml
    menuFields
}

Но теперь мой второй стиль разделен на 2 части базового контроллера , Таким образом, есть способ создать этап меню в зарегистрированном контроллере контента, не вызывая метод инициализации, но установив необходимые поля меню @ F xml.

public class LoggedSecond extends ControllerLogged implements Controller{
    @Fxml
    contentFields
    @Fxml
    menuFields
    @Fxml
    public void initialize(){
        FXMLLoader loader = new FXMLLoader(getClass().getResource("/FXML/logged-second-menu.fxml"));
        loader.setController(this);
        Pane root = loader.load();

        //continue with the shared logic adding listeners etc..
    }

Итак, мой первый стиль f xml имеют и содержимое, и меню:

<AnchorPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controllers.firststyle.LoggedFirst">
   <children>
      <AnchorPane fx:id="contentFields" styleClass="content-root">
      </AnchorPane>
      <AnchorPane fx:id="menuFields">
      </AnchorPane>
   </children>
</AnchorPane>

Но мой второй стиль делится на 2 f xml:

Содержимое:

<AnchorPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controllers.secondstyle.LoggedSecond">
   <children>
      <AnchorPane fx:id="contentFields" styleClass="content-root">
      </AnchorPane>
   </children>
</AnchorPane>

и Меню:

<AnchorPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controllers.secondstyle.LoggedSecondMenu">
   <children>
      <AnchorPane fx:id="menuFields">
      </AnchorPane>
   </children>
</AnchorPane>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...