@lopstik

Javafx — как вызвать из главного контроллера остальные?

Добрый день!
Работаю над проектом а JAVAFX. Есть несколько вкладок.
На каждой вкладке своя отдельная форма. Создала к каждой вкладке отдельный контроллер. Панель вкладок запускается через главный контоллер. Хочу сделать так чтобы в главном контоллере вызывались контоллеры для каждой вкладки. Никак не могу разобраться как это сделать. подскажите пожалуйста.

Вот часть кода для вызова форм в классе MainApp
public void initRootLayout() {
        try {
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(MainApp.class.getResource("view/RootLayout.fxml"));
            rootLayout = (BorderPane) loader.load();

            Scene scene = new Scene(rootLayout);
            primaryStage.setScene(scene);
            primaryStage.show();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * Shows the tab overview inside the root layout.
     */
    public void showTabOverview() {
        try {
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(MainApp.class.getResource("view/TabLayout.fxml"));
            AnchorPane tabOverview = (AnchorPane) loader.load();
            rootLayout.setCenter(tabOverview);

            MainController mainController = loader.getController();
            mainController.setMainApp(this);       
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

В Main Controller
public class MainController implements Initializable  {
            private MainApp mainApp;
	    public MainController() {
	    } 
	    @Override
	    public void initialize(URL location, ResourceBundle resources) {
	    System.out.println("App started");	 	  	
	    }
	    public void setMainApp(MainApp mainApp) {
	        this.mainApp = mainApp;  
	    }
	 }

Нужно вызвать UserOverviewСontroller и TeamOverviewController, для каждой вкладки свой. В Scene Builder отдельно создала форму для UserOverview и TeamOverview, а потом импортировала во вкладки.
В UserOverwiewController есть такие строки
public void setMainApp(MainApp mainApp) {
    	this.mainApp = mainApp;

    	// Add observable list data to the table
    	userTable.setItems(mainApp.getPersonData());
    }
  • Вопрос задан
  • 927 просмотров
Пригласить эксперта
Ответы на вопрос 1
OLDRihard
@OLDRihard
Java Developer
Конкретно над основным окном я таких финтов не делал, но думаю нечто схожее можно и там сделать.
В частности, объявить нужные вкладки в контроллере (вродь класс Tab), объект loader каждого контроллера указать дочерним для нужной вкладки.
Ну или переобъявить AnchorPane находящийся во вкладке на (AnchorPane) loader.load(); (хотя это уж совсем криво)
Не скажу что это оптимальные решения, но хотяб указал в каком направлении копать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы