Jakiś czas temu dostałem w pracy za zadanie rozeznać się w pewnej nowej technologii, jaką jest JavaFX. Nie, źle zacząłem, mały flashback...
Na jesieni zacząłem uczęszczać na spotkania AGieHowej Grupy .NET z zamiarem poznania tej technologii oraz zabrania się za C#, co by nabrać doświadczenia i mieć atuty przy szukaniu pracy, do którego się przymierzałem. Spotkania te zbiegły się w czasie z wydaniem .NETa w wersji 3.5, który posiadał wszystkie te W_F-y , a przede wszystkim WPF, czyli Windows Presentation Forms.
WPF zostało nam zademonstrowane przez jednego z szefów koła naukowego, prawdziwego entuzjastę tej technologii. Dla tych, co nie wiedzą – WPF wprowadziło zupełnie nowatorskie podejście do budowania graficznych interfejsów użytkownika: zamiast pieczołowitego układania formatek i kontrolek na okienku (jak dotychczas w Visual C++ oraz w NetBeansie) albo karkołomnego i – nie ukrywajmy – upierdliwego korzystania z różnych layoutów w Javie, tutaj opis wyglądu aplikacji sprowadzał się do ujęcia wszystkiego w XMLowym dokumencie z formacie XAML. Dawało to ogromne możliwości – nie było specjalnie ograniczeń co do zawartości kontrolek (elementem menu mógł być obrazek, a na przycisku mógł zostać wyświetlony filmik), ponadto wszystko było renderowane sprzętowo, przez co było naprawdę szybkie, można było zastosować mnóstwo efektów (gradienty, przezroczystości, deformacje), a na koniec – niektóre wartości można było zbindować z innymi, dzięki czemu część funkcjonalności można było zawrzeć w samej warstwie prezentacji, nie ruszając w ogóle prawdziwego, podpiętego pod to wszystko kodu.
A wisienką na szczycie tego tortu, jakim był WPF, była możliwość tworzenia obiektów trójwymiarowych, na których ścianach umieszczać można kontrolki. Bajer bajera bajerem pogania, dosłownie.
No, ale smutna codzienność doprowadziła do tego, że nigdy nic nie napisałem w siszarpie (najbardziej odstraszały mnie tzw. Małe różnice – wyobrażałem sobie, że siadam do napisania najprostszej siszarpowej aplikacji, i wykładam się na pierwszej linijce – bo co mam napisać? Include? Import? Czy jeszcze co innego?) i doszedłem do tego punktu w życiu każdego młodego człowieka, że musi się określić (hetero- czy homo-? Lewica czy prawica? Coca-cola czy pepsi?) i ja też wtedy się właśnie określiłem, wyszedłem z szafy i powiedziałem głośno: JESTEM JAVOWCEM. Potem znalazłem pracę (albo praca znalazła mnie) i tak już zostało.
A teraz nasz klient zapragnął przebudować warstwę prezentacji pewnej dość skomplikowanej aplikacji, którą rozwija (często z pomocą kolegów z naszej firmy) i szukał do tego jakiejś technologii. Generalnie najbardziej zależało mu właśnie na czymś takim, czego dostarcza wspomniany WPF (czyli kontrolki GUI na obiektach 3D), ale koniecznie w Javie. Pobawiłem się więc nieco JOGLem, Javą 3D oraz LWJGL (bodajże) i doszedłem do wniosku, że to jest nie do zrobienia. A wtedy on podrzucił mi – jako zamiennik – właśnie Javę FX. Przechodzę więc do meritum notki.
Java FX jest bardzo nową technologią, wciąż w fazie rozwoju i testowania. Służy ona mniej więcej temu samemu, co WPF, czyli tworzeniu interfejsów graficznych, jednak podejście ma nieco inne. Przede wszystkim do opisu komponentów nie używa żadnej odmiany XMLa, a własnego języka skryptowego JavaFX Script, który z wyglądu przypomina trochę JavęScript. Od strony funkcjonalnej JavaFX polega na wymieszaniu technologii Java2D ze Swingiem – i to w obie strony, co daje możliwości takie same, a może większe, niż WPF (tutaj także wszystko jest komponentem, płótno Javy2D może zawierać kontrolki Swinga, a kontrolki mogą zawierać elementy graficzne). Ponadto możliwa jest nie tylko grafika statyczna, a też dynamiczna (animacje), mnóstwo różnych efektów graficznych (jak w WPFie – deformacje, przezroczystości, gradienty...), rewelacyjne możliwości bindowania wartości oraz – co najważniejsze – możliwość pisania kodu w samym JavaFX Scripcie, dzięki czemu można napisać całą aplikację, nawet dosyć skomplikowaną, bez używania niczego z prawdziwej Javy. Zainteresowanym polecam obejrzenie paru przykładowych aplikacji tutaj: https://openjfx.dev.java.net/downloads.html#demos.
Technologia nadal jest tworzona i daleka jest jeszcze od finalnej wersji. Twórcy zapowiadają jeszcze więcej możliwości – nawet, jak w WPFie, możliwość tworzenia obiektów trójwymiarowych. Już teraz z jej pomocą można tworzyć bardzo ładne aplikacje o szerokich zastosowaniach – technologia nadaje się zarówno do aplikacji desktopowych, jak i appletów, stron internetowych oraz do wykorzystania na urządzenia mobilne. Pozwala wykorzystywać grafikę rastrową z plików, a także generować grafikę wektorową (kapitalną sprawą jest aplikacja do przetwarzania plików w formacie SVG na kod w JavaFX Scripcie – przejrzyjcie sobie wspomniane dema). Działa bardzo sprawnie (choć nie wiem, czy korzysta z renderowania sprzętowego) i wygląda wręcz świetnie – możliwość stworzenia programu z warstwą prezentacji napisaną w Javie FX z podpiętą pod nią logiką biznesową napisaną w Javie powoduje u mnie przyjemny dreszczyk podniecenia ;)
Ja osobiście nie mogę sie doczekać, aż będzie w ogólnym użyciu, bo pisanie w tym to prawdziwa przyjemność. Takiej frajdy nie miałem już dawno.