„Czyż księga pustkę w pełnię zmienia?
czyż skrzepi kogoś, wzniesie, wzruszy?
nie znajdziesz, bracie, ukojenia,
jeśli go nie masz w własnej duszy”.J. W. Goethe „Faust”, tł. E. Zegadłowicz
Photo by congerdesign on Pixabay
„Czyż księga pustkę w pełnię zmienia?
czyż skrzepi kogoś, wzniesie, wzruszy?
nie znajdziesz, bracie, ukojenia,
jeśli go nie masz w własnej duszy”.J. W. Goethe „Faust”, tł. E. Zegadłowicz
Photo by congerdesign on Pixabay
„Niektórych książek wystarczy skosztować,
inne się połyka,
a tylko nieliczne trzeba przeżuć
i strawić do końca”.C. Funke „Atramentowe serce”
Photo by Ana Paula Feriani on Pixabay
„Książki muszą być ciężkie, bo w nich jest cały świat”.
C. Funke „Atramentowe serce”
Photo by Mystic Art Design on Pixabay
„Dziecko, dla którego książki są całym życiem, w rzeczywistości jest jak mnich w swojej celi: z każdym krokiem oddala się od życia i zbawiennego powietrza…”
H. Trier
Photo by Sabrina Eickhoff on Pixabay
„Radzę ci zredukować wszystkie twoje książki, trochę mniej się nimi napełniać, a zobaczysz, że jest to o wiele lepsze. Bierz swój Krucyfiks, patrz nań i słuchaj”.
św. Elżbieta od Trójcy Przenajświętszej „List 94”
Photo by Ria Sopala on Pixabay
„Czytając książki o zdrowiu, uważajcie. Jeden błąd drukarski może was zabić”.
M. Twain
Photo by mohamed Hassan on Pixabay
„Książka – to mędrzec łagodny i pełen słodyczy, który puste życie napełnia światłem, a puste serca wzruszeniem”.
K. Makuszyński
Photo by Sofia Iivarinen on Pixabay
Tekst książki jest aktualny na dziś, czyli 17 kwietnia 2021, przy uwzględnieniu uwag z poniższego artykułu.
Od czasu wydania mojej i taty książki, o której pisałam w artykule Kulisy powstania książki “JavaFX 9. Tworzenie graficznych interfejsów użytkownika”, pojawiły się kolejne wersje Javy i JavaFX troszkę się zmieniła (o tych zmianach możesz przeczytać w tekście Zmiany w JavaFX od JavaFX 9). Mimo to książka jest nadal aktualna, a ponieważ chcemy, żebyście mogli z niej swobodnie i wygodnie korzystać, wykorzystując najnowszą wersję JDK, w tym artykule opisujemy zmiany i udostępniamy zaktualizowane kody.
„Rozdział 30. Nashorn”, poświęcony wersji JavaScript „Nashorn”, przeznaczonej dla JDK, stracił rację bytu w dniu 15 września 2020, wraz z pojawieniem się JDK 15, z którego Nashorn został ostatecznie usunięty. Z czasem jednak pojawiły się zmodularyzowane biblioteki Nashorn 15.3, których można używać poprzez Maven albo niezależnie od niego.
Tutaj znajdziesz plik IdeaIntellij z aktualnymi kodami dotyczącymi Nashorna i FXML, a tutaj potrzebne pliki JAR. Projekt zawiera kody do rozdziału 30 i komplet kodów do rozdziału 34, w tym również te przykłady, które nie wymagają użycia biblioteki Nashorn. Konieczne jest stworzenie biblioteki nashorn, którą można utworzyć z załączonych plików JAR, wymagane jest też JDK oraz JavaFX – najlepiej w wersji 17.0.1.
W tym rozdziale pojawia się kilka przykładów, pokazujących obsługę przycisków przy użyciu JavaScript Nashorn. W związku z usunięciem Nashorna, przykłady te od wersji JDK 15 przestały działać. Ponieważ jednak obecnie ponownie można używać Nashorna, można również używać FXML.
„Rozdział 36. Modularyzacja” tylko pośrednio dotyczy JavaFX. Kiedy pisaliśmy książkę, było to zagadnienie nowe, wymagające dokładniejszego omówienia. Dzisiaj wszyscy ten temat znają, a w Internecie jest mnóstwo dobrych materiałów przybliżających związane z nim problemy. Dlatego gdybyśmy wydawali nową wersję książki, ten rozdział zostałby prawdopodobnie usunięty. Mimo to wszystko, co w nim powiedziano, jest nadal aktualne.
Kod projektu został przejrzany, sprawdzony i zweryfikowany zgodnie z powyższymi uwagami. Zmiany w kodzie w stosunku do wersji pierwotnej są następujące:
URL url = this.getClass().getClassLoader().getResource("JavaFX9/src/resources/html/alert.html");
URL url = this.getClass().getResource("/resources/html/alert.html");
Poprawiony i zaktualizowany kod w postaci projektu IntelliJ IDEA możecie ściągnąć stąd:
UWAGA!
Jeżeli korzystacie z Google Chrome, przy pobieraniu mogą się pojawić ostrzeżenia o treści: „Plik JavaFX9.zip jest rzadko (albo: nie jest często) pobierany i może być niebezpieczny”. Możecie je zignorować – w plikach nie ma nic niebezpiecznego, a ostrzeżenie pojawia się ze względu na to, że zip zawiera pliki *.iml, charakterystyczne dla projektów IntelliJ IDEA, które są rzadko przesyłane.
Jeżeli w IntelliJ Idea będzie środowisko o nazwie „15” (czyli Open JDK 15.0.2) oraz biblioteka globalna o nazwie „javafx” (JavaFX 15.0.1), nie będziecie mieć problemu z importem projektu.
Do projektu trzeba dodać (tak jak się dodaje bibliotekę) dwa pliki *.jar obecne w folderze src/resources/jars.
W pliku do ściągnięcia nie umieszczano materiałów dotyczących rozdziału 36. Nie wymagały one żadnej zmiany i właściwie są już mało użyteczne, choć wciąż aktualne. Jeśli potrzebujesz – możesz użyć kodów dostępnych na stronie książki w Wydawnictwie Helion.
Nasza książka o JavaFX już dostępna na stronie Helionu. Bardzo ją Wam polecam. Mimo że dotyczy Javy 9, jest kompatybilna z najnowszą wersją JavaFX, z uwzględnieniem zmian, o których czytaliście w powyższym tekście. Jest napisana przystępnym językiem, tłumaczy zagadnienia w prosty, jasny sposób i pozwala szybko nauczyć się korzystania z funkcjonalności JavaFX. Można ją traktować jako podręcznik, czytając krok po kroku, ale też nic nie stoi na przeszkodzie, by korzystać z niej, szukając konkretnych zagadnień.
Oprócz książki Helion udostępnia też pliki z kodami źródłowymi. Warto je pobrać, bardzo się przy nich napracowaliśmy, ale w efekcie powstał kod, który ułatwia zrozumienie treści znajdujących się w książce. Wszystkie kody można uruchomić i zobaczyć w praktyce, jak działają poszczególne elementy JavaFX. Pliki znajdują się tutaj:
W sprzedaży jest już też dostępna nowa, zaktualizowana wersja książki, zgodna z wersją JavaFX 17:
Kody do nowej książki znajdziecie tutaj:
A jeśli chcielibyście ściągnąć sobie pełny projekt IntelliJ IDEA z kodami przykładów, to jest dostępny tutaj:
Kod w Kotlinie można ściągnąć stąd:
Jeśli chciałbyś wiedzieć, jak zamienić kod JavaFX na Kotlina, to instrukcja znajduje się w tym artykule.
Od czasu wydania mojej i taty książki, o której pisałam w artykule Kulisy powstania książki “JavaFX 9. Tworzenie graficznych interfejsów użytkownika”, pojawiły się kolejne wersje Javy i JavaFX troszkę się zmieniła. Nie są to duże zmiany, ale warto o nich wspomnieć.
W JavaFX 10 nie było żadnych zmian w stosunku do Java 9. JavaFX została jedynie przeniesiona z Oracle do OpenJFX.
JavaFX 11 stała się zestawem modułów oddzielonych od JDK 11, wymaga jednak obecności przynajmniej OpenJDK 10, a najlepiej JDK 11, które jest rekomendowane.
Od tej wersji autonomiczne (standalone) moduły javafx.* są ładowane przez ładowarkę klas aplikacji i domyślnie nie wymagają zezwoleń (permissions). Aplikacje, które mają być uruchamiane z menedżerem bezpieczeństwa muszą specyfikować plik polityki bezpieczeństwa używając „-Djava.security.policy”, a także udzielając pozwolenia na każdy moduł javafx.*.
Więcej informacji na ten temat znajdziesz na stronie JDK-8210617.
W tej wersji naprawiono też niektóre błędy i wprowadzono szereg rozszerzeń, ich listę znajdziesz tu: lista naprawionych błędów oraz lista rozszerzeń dla JavaFX 11.
Najważniejszą zmianą jest dodanie FX Robot API z klasą javax.scene.robot. Robot
w module javafx.graphics
.
W wersji JavaFX 12 brak przełomowych zmian. Listę rozszerzeń i naprawionych błędów znajdziesz tutaj: lista naprawionych błędów oraz lista rozszerzeń dla JavaFX 12.
Warte zauważenia jest dodanie obsługi File API oraz FileReader
w WebView.
Ta wersja nie wnosi nic szczególnie istotnego. Lista rozszerzeń i naprawionych błędów znajduje się tu: lista naprawionych błędów oraz lista rozszerzeń dla JavaFX 13.
W wersji JavaFX 14 nadal brak przełomowych zmian. Listę rozszerzeń i naprawionych błędów znajdziecie tutaj: lista naprawionych błędów oraz lista rozszerzeń dla JavaFX 14.
Warte zauważenia jest wprowadzenie obsługi HTTP/2 do WebView.
Również i w tej wersji nie pojawiło się nic szczególnie istotnego. Listę rozszerzeń i naprawionych błędów dla JavaFX 15 znajdziecie tu: lista naprawionych błędów oraz lista rozszerzeń dla JavaFX 15, a dla JavaFX 15.0.1 tu: lista naprawionych błędów oraz lista rozszerzeń dla JavaFX 15.0.1.
Listę rozszerzeń i naprawionych błędów dla JavaDX 16 znajdziecie tutaj: lista naprawionych błędów oraz lista rozszerzeń dla JavaFX 16.
W tej wersji pojawia się dość istotna zmiana: od teraz JavaFX musi być załadowana z modułów umieszczonych na ścieżce modułów (MODULEPATH). Nie może być ładowana ze ścieżki klas (CLASSPATH).
Oprócz tych zmian w JavaFX 16 pojawił się też odkryty przez nas błąd. Do wykonania kodu tworzenia migawek zawierajacych linię
BufferedImage bi = SwingFXUtils.fromFXImage(wi, null);
wymagane są moduły java.desktop i javafx.swing. Niestety, 'module-info.java’ wyrzuca komunikat pokazany na obrazku poniżej:
Usunięcie linii dotyczącej 'java.desktop’ niczego nie zmienia, ale kod mimo wszystko się wykonuje. Prawdopodobną przyczyną komunikatu jest błąd w module 'javafx.swing’. Problem występuje tylko w JavaFX 16, we wcześniejszych wersjach JavaFX się nie pojawia.
W tej wersji nie pojawiło się nic istotnego. Pełną listę zmian znajdziecie tutaj: lista naprawionych błędów oraz lista rozszerzeń dla JavaFX 17. Natomiast listę zmian dla wersji 17.0.0.1 i 17.0.1 można zobaczyć tu: lista naprawionych błędów oraz lista rozszerzeń dla JavaFX 17.0.0.1 i 17.0.1.
W tej wersji brak istotnych zmian. Pełną listę nowości znajdziecie tutaj: lista naprawionych błędów oraz lista rozszerzeń dla JavaFX 18.
Nie ma istotnych zmian w tej wersji. Pełną listę nowości znajdziecie tutaj: lista naprawionych błędów oraz lista rozszerzeń dla JavaFX 19.
W JavaFX 20 weszły w życie dwie ważne zmiany:
1) JavaFX 20 wymaga obecności JDK 17+.
2) W FXML silnik JavaScript jest domyślnie ustawiony na disabled
. Aby użyć kodu JavaScript w FXML, oprócz dodania odpowiedniej biblioteki, należy ustawić zmienną systemową -Djavafx.allowjs=true
. Najlepiej zmienną ustawić na true
w metodzie init
, a na false
w metodzie stop
.
Inne języki skryptowe nie wymagają żadnych zmian. Pełną listę nowości znajdziecie tutaj: lista naprawionych błędów oraz lista rozszerzeń dla JavaFX 20.
Nasza książka o JavaFX już dostępna na stronie Helionu. Bardzo ją Wam polecam. Mimo że dotyczy Javy 9, jest kompatybilna z najnowszą wersją JavaFX, z uwzględnieniem zmian, o których czytaliście w powyższym tekście – ich realizację znajdziecie w artykule Aktualność książki “JavaFX 9. Tworzenie graficznych interfejsów użytkownika”. Książka jest napisana przystępnym językiem, tłumaczy zagadnienia w prosty, jasny sposób i pozwala szybko nauczyć się korzystania z funkcjonalności JavaFX. Można ją traktować jako podręcznik, czytając krok po kroku, ale też nic nie stoi na przeszkodzie, by korzystać z niej, szukając konkretnych zagadnień.
Oprócz książki Helion udostępnia też pliki z kodami źródłowymi. Warto je pobrać, bardzo się przy nich napracowaliśmy, ale w efekcie powstał kod, który ułatwia zrozumienie treści znajdujących się w książce. Wszystkie kody można uruchomić i zobaczyć w praktyce, jak działają poszczególne elementy JavaFX. Pliki znajdują się tutaj:
W sprzedaży jest już też dostępna nowa, zaktualizowana wersja książki, zgodna z wersją JavaFX 17:
Kody do nowej książki znajdziecie tutaj:
A jeśli chcielibyście ściągnąć sobie pełny projekt IntelliJ IDEA z kodami przykładów, to jest dostępny tutaj:
Kod w Kotlinie można ściągnąć stąd:
Jeśli chciałbyś wiedzieć, jak zamienić kod JavaFX na Kotlina, to instrukcja znajduje się w tym artykule.
„Stawiłem sobie pomnik trwalszy niż ze spiżu.
Od królewskich piramid sięgający wyżej;
Ani go deszcz trawiący, ani Akwilony
Nie pożyją bezsilne, ni lat niezliczony
Szereg, ni czas lecący w wieczności otchłanie.
Nie wszystek umrę, wiele ze mnie tu zostanie
Poza grobem. Potomną sławą zawsze młody,
Róść ja dopóty będę, dopóki na schody
Kapitolu z westalką cichą kapłan kroczy.
Gdzie z szumem się Aufidus rozhukany toczy,
Gdzie Daunus w suchym kraju rządził polne ludy,
Tam o mnie mówić będą, że ja, niski wprzódy,
Na wyżyny się wzbiłem i żem przeniósł pierwszy
Do narodu Italów rytm eolskich wierszy.
Melpomeno, weź chlubę, co z zasługi rośnie,
I delfickim wawrzynem wieńcz mi skroń radośnie”.Horacy „Exegi monumentum”, tł. Rydel
Photo by Greg Reese on Pixabay