Twój plik kontrolera to plik źródłowy Java, który jest kompilowany do pojedynczej klasy Java, z której można utworzyć wiele instancji obiektów Java.
W środowisku wykonawczym domyślna implementacja kontrolera modułu ładującego fxml utworzy nową instancję kontrolera (np. Nowy obiekt) za każdym razem, gdy wywoływany jest moduł ładujący fxml-a o nazwie load method.
Nawet jeśli ładujesz ten sam plik fxml w kółko, program ładujący tworzy za każdym razem nową instancję kontrolera, z których każdy ma własny wewnętrzny stan niezależny od wszystkich pozostałych.
Podobnie, jeśli załadujesz różne pliki fxml, wszystkie wspierane przez tę samą klasę kontrolera - za każdym razem, gdy jakiś plik fxml, otrzymasz nową instancję kontrolera.
Aktualizacja odpowiedzieć na dodatkowe pytanie o dane kontrolera dzielenie
do wymiany informacji pomiędzy kontrolerami przy użyciu iniekcji zależność lub odrębną metodę inicjalizacji, patrz:
Passing Parameters JavaFX FXML
Ponadto, stosowanie z static class members pozwoli Ci udostępniać informacje. Po prostu nie używaj statycznego w połączeniu z @FXML
, as that won't work.
Jest ładny samouczek do pracy z wieloma plikami fxml, które mogą okazać się pomocne:
Uwaga: to jest technicznie możliwe udostępniać jeden kontroler wśród wielu plików FXML
Jak zauważył w komentarzach Greg Brown:
możliwe jest, aby wykonywać większą kontrolę nad wykorzystaniem kontrolera instancji FXMLLoader#setController()
i FXMLLoader#setControllerFactory()
.
Zdecydowanie nie zaleca się następujące podejście, które jest wyjaśnione w odpowiedzi na związane:
Dzięki, jewelsea! Myślałem, że tak być może. Czy istnieje jakaś nowa instancja kontrolera dla każdego załadowanego pliku fxml, czy istnieje sposób, aby te instancje udostępniły informacje? A może gdybym przerobił mój program na różne kontrolery dla każdego pliku fxml, czy możesz uzyskać różne kontrolery do udostępniania informacji? – Aaron
Odpowiedź została zaktualizowana za pomocą rozwiązania dodatkowego pytania. – jewelsea
Skałasz, jubiler! Przyjrzę się teraz tym. Dziękuje bardzo!! – Aaron