Wzorce interfejsu graficznego
Kontroler

Połączenie kontrolera z widokiem

Widok naszej aplikacji został przygotowany w pliku resources/galleryView.fxml. Musimy teraz połączyć z klasą kontrolera (GalleryController), która umożliwi nam komunikację na linii model - widok.

  1. Otwórz plik resources/galleryView.fxml
  2. Odnajdź w widoku kontrolki odpowiedzialne za wyświetlanie informacji o pojedynczym obrazie. Naszym celem będzie podłączenie nazwy obrazka do edytowalnego pola tekstowego (TextField) oraz samego obrazu do kontrolki ImageView. Zwróć uwagę, że każda kontrolka posiada identyfikator fx:id - będzie to również nazwa odpowiadającego jej atrybutu w klasie kontrolera.
  3. W klasie kontrolera GalleryController dodaj atrybut odpowiadający kontrolce do ustawiania nazwy:
    @FXML
    private TextField imageNameField; 
  4. W analogiczny sposób ustaw kontrolkę do wyświetlania obrazu.

Prywatne pola i metody, które mają być dostępne z poziomu plików fxml muszą być poprzedzone adnotacją @FXML. Dobrym zwyczajem jest, aby wszystkie elementy klasy dostępne w plikach fxml były oznaczane w taki sposób - zwiększa to czytelność kodu.

Połączenie kontrolera z modelem

Kolejnym krokiem jest skojarzenie elementów modelu z atrybutami widoku. We wzorcu MVC odpowiada za to kontroler.

  1. Do ustawiania zdjęcia w widoku wykorzystywana jest metoda GalleryController#bindSelectedPhoto(). Zwróć uwagę, że obecnie po załadowaniu modelu galerii domyślnie zaznaczane jest pierwsze zdjęcie ze zbioru. Wystarczy zatem uzupełnić brakujący kod metody.
  2. Zamiast ustawiać wartości widoku “na sztywno” za pomocą metod typu setText() wykorzystamy do tego mechanizm bindingów i przygotowane wcześniej właściwości FX. Typowy binding wygląda następująco:
    viewControl.viewProperty().bind(model.modelProperty());
    Uwaga: typy łączonych właściwości muszą być zgodne.
  3. Odnajdź odpowiednie właściwości kontrolek imageNameField oraz imageView i skojarz je z ich modelowymi odpowiednikami.
  4. Uruchom aplikację, na tym etapie powinna wyglądać mniej więcej tak: app with photo