После нескольких поисков я могу найти любое решение для этого и хотел бы попросить о помощи. Заранее спасибо.javafx как повторно использовать пользовательский компонент в разных FXML
У меня есть FXML с HBox с несколькими кнопками (новый, показать, редактировать). Каждая кнопка имеет метод OnAction. Он используется в других 2 FXML (A & B), и я хотел бы повторно использовать такой HBox.
Другое 2 FXML (A, B) есть некоторые элементы управления (TableView, ...)
Это то, что я пробовал:
1) импорт HBox FXML не должна быть выполнена, как вариант изменений во всех FXML (a & b).
2) включают в себя использование fx: id: у меня будет выделенный контроллер для HBox, и я бы хотел иметь элементы управления и методы на контроллерах A, B.
3) включить использование fx: root: Я думаю, что это способ добиться этого, но у меня есть ошибки.
Navigation.fxml файл:
<fx:root spacing="5.0" type="HBox" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<children>
<Button fx:id="btnOpen" mnemonicParsing="false" onAction="#onActionOpen" text="Open" />
<Button fx:id="btnSave" layoutX="10.0" layoutY="10.0" mnemonicParsing="false" onAction="#onActionSave" text="Save" />
<Separator visible="false" HBox.hgrow="ALWAYS" />
<Button fx:id="btnClose" layoutX="62.0" layoutY="10.0" mnemonicParsing="false" onAction="#onActionClose" text="Close" />
</children>
<padding>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</padding>
</fx:root>
Pane1controller.java:
public Pane1Controller() {
System.out.println("Pane1_Controller");
NavigationController nav = new NavigationController();
System.out.println("NavigationController ... done");
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("pane1.fxml"));
System.out.println("setting root");
fxmlLoader.setRoot(this);
System.out.println("setting controller");
fxmlLoader.setController(this);
try {
System.out.println("loading fxml");
pnlMain = fxmlLoader.load();
System.out.println("done");
} catch (IOException exception) {
System.out.println("exception");
pnlMain = null;
throw new RuntimeException(exception);
}
System.out.println("done");
} ...
}
используя setRoot ....
Вызванный: java.lang.RuntimeException: JavaFX .fxml.LoadException: Значение корня уже указано. файл:/C: /Users/ecejdap/data/DEV/dev.java.nb/Testfx_fxroot/dist/run573616745/Testfx_fxroot.jar /testfx_fxroot/pane1.fxml
удаление setroot причиненный: Java. lang.RuntimeException: javafx.fxml.LoadException: значение корня уже указано. файл:/C: /Users/ecejdap/data/DEV/dev.java.nb/Testfx_fxroot/dist/run2127482879/Testfx_fxroot.jar /testfx_fxroot/Navigation.fxml
Какой правильный способ добиться этого?
Спасибо за вашу поддержку. BR
Спасибо за ваш ответ. Я собираюсь проверить ... Когда я открываю sample.fxml, я не вижу компонент многократного использования (child.fxml), и я хочу видеть окончательный образец со всеми компонентами (локальными и многократно используемыми) – ecejuan
Просто посмотрите Controller.java. Я добавил панель child.fxml в HBox sample.fxml через Controller.java – jayaneetha