Zmiany w JavaFX od JavaFX 9

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ć.

Zmiany w JavaFX 10

W JavaFX 10 nie było żadnych zmian w stosunku do Java 9. JavaFX została jedynie przeniesiona z Oracle do OpenJFX.

Zmiany w JavaFX 11

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.

Zmiany w JavaFX 12

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.

Zmiany w JavaFX 13

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.

Zmiany w JavaFX 14

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.

Zmiany w JavaFX 15

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.

Zmiany w JavaFX 16

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:

Komunikat: Module 'rozdzial07c' reads package 'java.applet' from both 'java.desktop' and 'java.desktop'

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.

Zmiany w JavaFX 17

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.

Zmiany w JavaFX 18

W tej wersji brak istotnych zmian. Pełną listę nowości znajdziecie tutaj: lista naprawionych błędów oraz lista rozszerzeń dla JavaFX 18.

Zmiany w JavaFX 19

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.

Zmiany w JavaFX 20

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

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.

W tym męskim pragnieniu kryje się coś niedobrego

„[…] może w tym męskim pragnieniu, by nas wychowywać, kryje się coś niedobrego. Ja wtedy byłam tylko dziewczynką i nie podejrzewałam, że w tym dążeniu do mojej przemiany kryje się dowód, że ja mu się nie podobam taka, jaka jestem, że on chce, abym była inna, że nie pragnie po prostu kobiety, lecz kobiety takiej, jaką on sam chciałby być, gdyby był kobietą. Powiedziałam, że dla Franka ja byłam szansą na zanurzenie się w kobiecości, na zagarnięcie jej: byłam dowodem jego wszechmocy, dowodem na to, że potrafi być nie tylko mężczyzną, ale również kobietą. I dzisiaj, kiedy nie widzi we mnie części samego siebie, czuje się zdradzony”.

E. Ferrante „Historia ucieczki”, s. 437

Photo by Natalia Belovol on Pixabay

Gdy Bóg chce mieć jakąś duszę całkowicie dla siebie

„Gdy Bóg chce mieć jakąś duszę całkowicie dla siebie, najpierw ją miażdży, tak mniej więcej, jak jabłka w prasie przy wyciskaniu soku. Czyni tak, by zmiażdżyć jej namiętności, chęć szukania siebie, słowem – wszystkie jej braki. Następnie zmiażdżoną w ten sposób duszę kształtuje według własnego upodobania, a widząc jej wierność, doprowadza ją w krótkim czasie do całkowitego przekształcenia”.

s. Maria Gabriela, dusza czyśćcowa, do s. Marii od Krzyża, http://kpalys.blogspot.com/2019/01/kiedy-bog-chce-dusze-dla-siebie.html

Tajemnica zmartwychwstania

„Dlatego teraz zobacz w swoim sercu, gdzie tak naprawdę żyjesz w cierpiętnictwie, gdzie żyjesz w sytuacjach, w których nie masz już wiary, że coś się może zmienić. Być może są to sytuacje, które po ludzku cię dobijają i nie wierzysz, że cokolwiek może się jeszcze zmienić na lepsze. Tajemnica zmartwychwstania jest zaproszeniem potężnej mocy Boga do miejsca śmierci, gdzie już się poddałeś, gdzie już coś umarło, gdzie po ludzku już nic nie można zrobić”.

D. Chmielewski „Różaniec ratunkiem dla świata”, s. 43

Tajemnica ofiarowania

„Tajemnica ofiarowania jest bardzo związana z tym, o czym Matka Boża mówi w Medziugorie: «Ofiarujcie mi to, co jest dla was najcenniejsze. Oddajcie mi to, co jest dla was najbardziej wartościowe». Nie mówi: «Oddaj mi coś, co i tak nie zmieni twojego życia, coś, co uważasz za niewielką stratę, gdybyś musiał z tego zrezygnować albo zostałoby ci to zabrane». My z reguły oddajemy w taki sposób: «Matko Boża, oddaję Ci moje dzieci albo mojego męża, żonę», ale tak naprawdę nic nie oddajesz, bo ciągle masz największy wpływ na twoich najbliższych. Oddajesz, ale mówisz, że on ma być taki, jak ty chcesz; twoje dzieci mają być takie, jak ty chcesz.
Tymczasem jeżeli coś naprawdę ofiarowuję komuś, to nie mam już do tego prawa. Nie mówię: «Oddaję ci, ale rób z tym, co ci oddaję, to, co ja chcę». A jeśli oddamy to, co jest dla nas najcenniejsze, to i tak po chwili odbieramy to z powrotem i mówimy: «Wiesz, Boże, nie ruszaj tego, to jest bardzo moje». Jest to wielki problem, ponieważ wszystko to, od czego jesteśmy w jakiś sposób uzależnieni […] prędzej czy później, jak Słowo Boże mówi, przejdzie w przekleństwo kontroli i nieustannego lęku przed utratą tego”.

D. Chmielewski „Różaniec ratunkiem dla świata”, s. 20-21

Zgadzam się, Boże, abyś wszedł w moje życie

„[…] zgadzam się, Boże, abyś wszedł w moje życie i – jeśli zechcesz – powywracał mi wszystko do góry nogami. Możesz mi wszystko zrujnować, wszystkie moje plany, ale mówię Ci «tak» na wszystko, «amen» na każde wydarzenie, które przemienia całkowicie moje życie”.

D. Chmielewski „Różaniec ratunkiem dla świata”, s. 13-14

Teresa nie chciała nikomu ciążyć

„[…] Teresa nie chciała nikomu ciążyć. Nie dała sobie prawa do wyrażania emocji i jej charakter uległ przez to zmianie. Teresa zauważyła sama, że od czasu śmierci swojej mamy nie była już taka jak przedtem. «[…] byłam słaba, tak słaba» – zapisała. Straciła siłę ducha i stała się zależna uczuciowo. Ona, która wcześniej była pełna życia i radości, zmieniła się w osobę nieśmiałą, nadwrażliwą i mało komunikatywną poza gronem rodziny”.

B. Dubois „Uzdrowienie zranień z dzieciństwa ze św. Teresą z Lisieux”, tł M. Grabski, 58-59

Ciągła nadaktywność

„«Ciągła nadaktywność tych obszarów mózgu sprzężona z nastawieniem społecznym może» – pisze Mitchell – «doprowadzić do tego, że zaczniemy dostrzegać umysły tam, gdzie ich nie ma, nawet w materii nieożywionej». Co więcej, rosnąca liczba dowodów wskazuje na to, że nasz mózg w sposób naturalny naśladuje stan, w jakim znajduje się umysł osoby, z którą wchodzimy w interakcję – bez względu na to, czy umysł ten jest prawdziwy, czy wyobrażony”.

N. Carr „Płytki umysł. Jak internet wpływa na nasz mózg”, s. 259-260