Я создаю приложение, которое имеет 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>