Jak użyć konstruktora w kontrolerze

0

Witam. Mam oto taki mały problem. Potrzebuję w klasie kontrolera zbindować pewne pola tekstowe z danymi obiektu. Wygląda to tak.

Pobieram formatkę:

 public void loadChangeNameAndLastName(Person person) {
        FXMLLoader loader = LoadFXML.loadFXML(getClass(), FXML_CHANGE_NAME_AND_LAST_NAME);

        Node node = null;
        try {
            node = loader.load();
        } catch(IOException e) {
            e.printStackTrace();
        }

        serviceWindowController.setCenter((Pane)node);
    }

kontrolerem dla tej formatki jest ChangeNameAndLastNameController, więc tworzę w klasie obiekt Person. W tej sytuacji musiałbym w jakiś sposób użyć konstruktora, ale nie da rady ot tak stworzyć obiektu, bo kontroler połączony jest z tą formatką FXML.

Można próbować tak:

 
        ChangeNameAndLastNameController changeNameAndLastNameController = loader.getController();
        changeNameAndLastNameController.setPerson(person);

ale wtedy w metodzie '@Override public void initialize()' nie można zbindować tego obiektu z polem tekstowym, bo ta metoda wywoływana jest podczas jeszcze samego tworzenia obiektu, a ja ten obiekt 'person' przesyłam po utworzeniu obiektu. Chcę po prostu przesłać jakoś do kontrolera obiekt i jego pole zbindować w metodzie 'initialize()' z polem tekstowym formatki.

1

A czemu chcesz koniecznie wiązać obiekt domenowy z kontrolkami w metodzie initialize() ? Nie możesz tego zrobić po prostu w metodzie setPerson()?
Żeby było składnie i czytelnie napisz sobie dwie metody w tym kontrolerze bindPerson() i unbaindPerson() i wtedy w prosty sposób wyciągasz instancję kontrolera z loadera i bindujesz obiekt domenowy. Jak chcesz to możesz go sobie odbindować i przypiąć inny bez przeładowywania kontrolera. Ani konstruktor ani metoda initialize() nie będzie Ci do szczęścia potrzebna.

0

Piękne i proste, dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1