Страницы

Поиск по вопросам

вторник, 16 июля 2019 г.

JavaFX - поместить TitledPane вовнутрь Accordion (SceneBuilder)

Исходные данные: есть основа RootLayout.fxml:
--BorderPane .....|--insert TOP .............|--MenuBar .....|--insert CENTER .............|--Accordion .....|-- {...}
есть TeamOverview.fxml:
--TitledPane ......|--AnchorPane ...........|--SplitPane .................|-- {...}

в классе Main инициализирую
public void initRootLayout() {
try { // Load root layout from fxml file. FXMLLoader loader = new FXMLLoader(); loader.setLocation(Main.class.getResource("view/RootLayout.fxml")); // todo //rootLayout = (BorderPane)loader.load(); rootLayoutAccordion = loader.load(); rootLayout.setCenter(rootLayoutAccordion); // ---------
// Show the scene containing the root layout. Scene scene = new Scene(rootLayout); primaryStage.setScene(scene); primaryStage.show();
} catch (IOException e) { e.printStackTrace(); } }
выбивает ошибку:
Caused by: java.lang.ClassCastException: javafx.scene.layout.BorderPane cannot be cast to javafx.scene.control.Accordion
Подробнее класс Mine здесь Pastebin
Что я хочу? Уйти от ошибки компиляции и смочь вызывать другие вкладки в RootLayout, у меня их еще три. Работы продолжаю, если закончу раньше, чем получу ответ - распишу здесь.
открыл доступ к репозиторию BitBucket


Ответ

Спасибо Andrew Bystrov за толчок в верном направлении. Рабочие методы:
public void initRootLayout() {
try { // Load root layout from fxml file. FXMLLoader loader = new FXMLLoader(); loader.setLocation(Main.class.getResource("view/RootLayout.fxml"));
rootLayout = loader.load(); Scene scene = new Scene(rootLayout);
// Show the scene containing the root layout. primaryStage.setScene(scene); primaryStage.show();

} catch (IOException e) { e.printStackTrace(); } }
и метод, позволяющий добавлять вкладки:
public void showAccordion() {
try { // Load team overview. FXMLLoader loaderTeamOverview = new FXMLLoader(); loaderTeamOverview.setLocation(Main.class.getResource("view/TeamOverview.fxml"));
// Load CartOverview FXMLLoader loaderCartOverview = new FXMLLoader(); loaderCartOverview.setLocation(Main.class.getResource("view/CartOverview.fxml"));
TitledPane teamOverviewTitledPane = loaderTeamOverview.load(); TitledPane cartOverviewTitledPane = loaderCartOverview.load() ;
// Add Titled Pane to Accordion Accordion accordion = new Accordion();
accordion.getPanes().addAll(teamOverviewTitledPane,cartOverviewTitledPane);
// Set accordion to Center
rootLayout.setCenter(accordion);
//Give the controller acces to the main app.
TeamOverviewController teamOverviewController = loaderTeamOverview.getController();
teamOverviewController.setMain(this);
} catch (IOException e) {
e.printStackTrace(); } }

Комментариев нет:

Отправить комментарий