JAVAFX - share object between controllers

孤者浪人 提交于 2019-12-23 05:41:42

问题


Please how to share object User between Controllers? I have a TabPanelController. In initialization send to other controllers Data with object User. Its OK, but I cant acces to this object before stage shown.

Its possible acces to Stage in initialize method in controller, when controller is loaded before Stage? Or how handle onWindowShow in loader (When windows show, object User was filled)?

    @FXML
    private ActionController panelActionController;
    @FXML
    private StoreController panelStoreController;
    @FXML
    private ProfilesController panelProfilesController;
    @FXML
    private UsersController panelUsersController;

    @FXML
    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {
    Platform.runLater(new Runnable() {
        @Override
        public void run() {
            menuUserInfo.setText("           " + loggedInUser.getName() + " " +
                    loggedInUser.getForname() + " (" + loggedInUser.getLogin() + ")");
            menuUserInfo.setUserData(loggedInUser);
            panelActionController.setLoggedUser(loggedInUser);
            panelStoreController.setLoggedUser(loggedInUser);
            panelProfilesController.setLoggedUser(loggedInUser);
            panelUsersController.setLoggedUser(loggedInUser);
        }
    });
    }

In panelActionController

@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
    System.out.println(loggedInUser); // NULL..
}

When i press any button in stage, loggedUser is not null. But i need set buttons, textfields by user role (Admin, User) during initialization.


回答1:


SOLVED:

1. Inject Controllers in Main TabPanel Controller

in fxml must have a root element (e.g. GridPane) with fx:id="panelAction". Controller must name: fx:id of GridPane + word Controller : panelActionController

   @FXML
    private ActionController panelActionController;
    @FXML
    private StoreController panelStoreController;
    @FXML
    private ProfilesController panelProfilesController;
    @FXML
    private UsersController panelUsersController;

2. I write getters for all child controllers in main TabPanelController:

    public ActionController getActionController() {
        return panelActionController;
    }

    public StoreController getStoreController() {
        return panelStoreController;
    }

    public ProfilesController getProfilesController() {
        return panelProfilesController;
    }

    public UsersController getUsersController() {
        return panelUsersController;
    }

3. And in main TabPanelStage (here i have Object loggedInUser) get all controllers

TabPanelController tabPanelController = fxmlLoader.getController();

ActionController actionController = tabPanelController.getActionController();
StoreController storeController = tabPanelController.getStoreController();
ProfilesController profilesController = tabPanelController.getProfilesController();
UsersController usersController = tabPanelController.getUsersController();

4. And then:

actionController.setComponentsByRole(loggedInUser.getRole());


来源:https://stackoverflow.com/questions/21848068/javafx-share-object-between-controllers

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!