Dlaczego JavaFX jest lepsza od Swinga

| 1 lutego 2015

Inspiracją do napisania tego artykułu jest fakt, że głównie na forach internetowych wciąż można trafić na ludzi, którzy z jakiegoś powodu decydują się na walkę z tworzeniem graficznego interfejsu użytkownika w Swingu, zamiast aktualnie rekomendowanej przez Oracle Javie FX. Omówimy więc krótko różnice, wady i zalety korzystania z obu rozwiązań.

javafx

Czym jest Java FX?

Java FX jest domyślną biblioteką definiowania graficznego interfejsu użytkownika w języku Java począwszy od wersji 8. Zastąpiła ona starsze biblioteki takie jak Swing i AWT. Charakteryzuje się przede wszystkim dobrą separacją warstw, wsparciem dla architektury MVC (Model View Controller) i udostępnia do tego użyteczne narzędzie o nazwie Scene Builder.

 

1. FXML

JavaFX wprowadziła nowy, deklaratywny sposób definiowania widoku aplikacji. Deklaratywność polega na tym, że to nie my odpowiadamy za inicjalizację obiektów poszczególnych kontrolek, ustawienie ich właściwości oraz stworzenie zależności między nimi, ale wyręcza nas w tym sama Java głównie w postaci klasy FXMLLoader. Osoby, które miały okazję tworzyć aplikacje w Swingu zdają sobie sprawę jak męczące może być definiowanie widoku aplikacji. Jeżeli zdecydujemy się na jego budowę w oparciu o gotowe narzędzia wbudowane w NetBeansa, czy IntelliJ IDEA, to w wielu miejscach spotkamy się z oznaczeniami typu:

WARNING: Do NOT modify this code. The content of this method is …

// Variables declaration – do not modify   …

Kod klas definiujących widoki jest z tego powodu najczęściej rozwlekły, do ustawienia każdej kontrolki potrzebujemy wywołania 5 metod, a kod staje się coraz mniej zrozumiały.Mechanizm w Javie FX jest bardzo podobny do tego znanego np. z Androida, gdzie widok jest zbudowany w oparciu o XML. Nie ma znaczenia, czy zmodyfikujemy go z poziomu ulubionego IDE, czy JavaFX Scene Buildera – nie spotkamy tutaj zapisów „nie dotykaj, bo zepsujesz”, czujemy, że mamy tutaj pełną kontrolę.

2. MVC

Osobiście w pewnym momencie zawsze trafiałem na problem z eleganckim podziałem aplikacji na różne warstwy. Ponieważ zarówno widok jak i kontrolery i logika aplikacji tworzone były w postaci kodu Javy, to momentami zdarzało się wrzucić fragmenty kodu nie w to miejsce gdzie powinienem.

W Javie FX problem ten jest rozwiązany bajecznie prosto – widok zdefiniowany jest w XMLu, więc nie umieścimy w nim zbędnych śmieci. Klasa kontrolera jest dosyć jasno określona i najczęściej posiada jedną metodę, która odpowiada głównie za spięcie widoku z logiką biznesową oraz opcjonalne metody pomocnicze do zdefiniowania obsługi zdarzeń. Rozwiązanie takie pozwala zachować czystą architekturę i tworzyć aplikacje łatwe w długotrwałym utrzymaniu.

scene builder

JavaFX Scene Builder

3. CSS

Nie ma się co oszukiwać – aplikacje stworzone w Swingu są najczęściej brzydkie. Jest to spowodowane głównie tym, że doprowadzenie widoku do przyjemnego dla oka poziomu wymaga napisania sporej ilości kodu. Nawet zmiana koloru tła sprowadzi się do wywoływania metod na kilkunastu różnych obiektach. W sytuacji, gdy w aplikacji chcemy wprowadzić możliwość wyboru motywu robi się jeszcze mniej przyjemnie.

W Javie FX, przy widoku stworzonym w FXMLu wystarczy odpowiednie kontrolki oznaczyć wspólną klasą CSS, nadać im unikalne identyfikatory lub wykorzystać klasy wbudowane i całość określić w osobnym pliku CSS.

Połączenie FXML i CSS do definiowania widoku sprawia, że może się tym zajmować osoba o dobrym zmyśle artystycznym, która w zasadzie nie musi mieć zielonego pojęcia o programowaniu w samej Javie. Możemy w ten sposób wygodnie rozdzielić role w zespole i pozwolić się skupić ludziom na rzeczach, na których znają się najlepiej.

4. Multimedia

Java FX to świetne wsparcie dla multimediów. Odtwarzanie plików mp3, plików muzycznych w rosnącej liczbie formatów to od teraz po prostu przyjemność sprowadzająca się do kilku linijek kodu bez konieczności poszukiwania zewnętrznych bibliotek. Innym elementem zasługującym na uwagę są klasy WebView i WebEngine, które w połączeniu pozwolą nam na wczytywanie treści ze stron internetowych lub nawet na zbudowanie własnej przeglądarki internetowej. Ponieważ wykorzystany silnik to WebKit, to otrzymujemy bardzo dobre wsparcie i pewność, że za kilka lat się to nagle nie zmieni.

Kurs Java 11

5. Przyszłość

Swing jest technologią dojrzałą, posiadającą ugruntowaną pozycję, jednak jest równocześnie dzieckiem porzuconym już przez Oracle i jednocześnie Java FX jest zalecaną technologią do tworzenia GUI w desktopowych aplikacjach. Im wcześniej przeniesiemy się więc na nową platformę tym mniej problemów będziemy mieli w przyszłości.

6. Rozwijane wsparcie dla Androida oraz iOS

Chociaż jest jeszcze za wcześnie, żeby powiedzieć, że aplikacja napisana w Javie FX może być uruchomiona na każdym urządzeniu, to jednak w odróżnieniu od Swinga są na to perspektywy. Warto spojrzeć na projekt JavaFXPorts, w którym skupiono się na platformach Android oraz iOS. Określenie write once, run everywhere zaczyna w tym kontekście nabierać dużo szerszego znaczenia.

6. Minusy?

Java FX jest młodą technologią. W internecie nie ma dużej liczby porad jej dotyczącej, a jeżeli są, to momentami dotyczą starej jej wersji, która znacząco się różniła od aktualnej. W Polsce nie ma ani jednej przetłumaczonej książki na jej temat, a za granicą książki można policzyć na palcach jednej ręki.

Niektórych elementów wciąż brakuje i trzeba się liczyć z tym, że trzeba będzie na nie chwilę poczekać. Większość z nich da się jednak rozwiązać wykorzystując w swojej aplikacji elementy Swinga poprzez klasę SwingNode.

Podsumowując krótko Java FX w chwili obecnej wydaje się jedynym słusznym wyborem jeśli chodzi o tworzenie GUI. Różnica między tymi technologiami w nadchodzących latach będzie się jedynie pogłębiała, więc warto od razu rozpocząć swoją przygodę z tą nowszą a Swinga pozostawić na półce.

9 thoughts on “Dlaczego JavaFX jest lepsza od Swinga

  1. edosoft

    Czy mógłbym prosić o ewentualną aktualizację? Czy w aktualnej wersji (Java 11) dalej są te minusy:

    „Java FX jest młodą technologią. W internecie nie ma dużej liczby porad jej dotyczącej, a jeżeli są, to momentami dotyczą starej jej wersji, która znacząco się różniła od aktualnej. W Polsce nie ma ani jednej przetłumaczonej książki na jej temat, a za granicą książki można policzyć na palcach jednej ręki.
    Niektórych elementów wciąż brakuje i trzeba się liczyć z tym, że trzeba będzie na nie chwilę poczekać.”

    Reply
    1. Sławek Ludwiczak

      Największe problemy jakie są związane z aplikacjami w Javie FX to obsługa mediów (np. ograniczona liczba wspieranych kodeków), oraz ograniczone wsparcie dla stron internetowych (w javie fx jest komponent, który można nazwać prymitywną przeglądarką internetową). Jeśli tego nie potrzebujesz w swojej aplikacji, to javafx jest bardzo fajną technologią i pozwala się nauczyć wielu dobrych praktyk

      Reply
  2. marcin0218

    Witam. A czego sie uczyć są swinga czy fx’a by w przyszłości pisac aplikacje na androida? Czy to w ogole jest cos innego?

    Reply
    1. Sławek Ludwiczak

      Moim zdaniem Swinga już w ogóle nie warto się uczyć. Javy FX też w sumie niekoniecznie, chociaż na pewno jeśli poświęcisz na nią z miesiąc, to nie będzie to czas stracony i część wiedzy do Androida się uda przenieść. Szczególnie w kontekście wzorca o nazwie Model View Controller

      Reply
        1. Sławek Ludwiczak

          W Javie tworzy się głównie aplikacje webowe, więc do prezentacji wykorzystuje się głównie takie rzeczy jak HTML, CSS, JavaScript

          Reply

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *