Исходные данные:
есть основа 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();
}
}
Комментариев нет:
Отправить комментарий