Kolumne

JavaFX Sixpack: JavaFX vs. JavaScript, schicke Kalender mit CalendarFX und was Java 9 für JavaFX-Entwickler bedeutet

Hartmut Schlosser

(c) Shutterstock / Steve Heap (modifiziert)

Willkommen zur dritten Folge der Kolumne JavaFX Sixpack! Dieses Mal haben wir Verstärkung angefordert: Wir reden mit Dirk Lemmermann darüber, was Java 9 für JavaFX-Entwickler bereit hält. Außerdem sehen wir uns zwei JavaFX-Frameworks an und berichten, wie die Community die Zukunft von JavaFX einschätzt…

1. Die Zukunft von JavaFX – das denkt die Community

Wir starten mit den Ergebnissen unseres Quickvotes aus der letzten Folge des JavaFX Sixpacks. „Wird sich JavaFX duchsetzen“ hatten wir Sie gefragt. Dabei zeichnete sich ein recht klares Stimmungsbild ab:

57% der 991 Quickvote-Teilnehmer sehen in JavaFX zwar keine Konkurrenz zu JavaScript. Doch schätzen sie die Zukunftchancen von JavaFX so ein, dass sich JavaFX im Java-Umfeld doch eine breite Anwenderschaft sichern wird.

JavaFX Quickvote-Ergebnisse

Wie man sieht, überzeugten die pessimistischen Sichtweisen deutlich weniger: JavaFX werde sich auch gegen Swing nicht durchsetzen können, meinen nur 15%. JavaFX sei nur für wenige Anwendungen mit ausgefeilten UIs interessant, denken ebenfalls 15%.

Aber auch die ganz optimistische Einstellung, dass JavaFX sich als universal einsetzbare UI-Technologie als echte JavaScript-Alternative etablieren werde, teilen nur wenige (10%).

Was bedeutet dieses Ergebnis?

2. JavaFX versus JavaScript

Das müssen wir zum Glück nicht alleine herausfinden. In dieser Folge des JavaFX Sixpacks haben wir Dirk Lemmermann zu Gast, um über den aktuellen Stand und die Zukunft von JavaFX zu reden. Dirk ist Consultant und „JavaFX Freelancer“, der mit CalendarFX und FlexGanttFX selbst zwei JavaFX-basierte Frameworks anbietet. Vor Kurzem wurde er in den Adelsstand des „JavaOne Rockstars“ erhoben – herzlichen Glückwunsch dafür!

Zurück zur Frage des Quickvotes „Wird sich JavaFX durchsetzen?“. Dirk ist mit dem Ergebnis der Community-Abstimmung im Grunde auf einer Linie. Auch er sieht JavaFX nicht als Konkurrenten für JavaScript-lastige Web-UIs:

Dirk Lemmermann

Dirk Lemmermann

Ich persönlich habe JavaFX nie als einen Konkurrenten für JavaScript gesehen.

Für mich war es immer der Nachfolger von Swing und zwar hauptsächlich für Desktop Anwendungen. Dieser Markt ist inzwischen wesentlich kleiner geworden als noch vor ein paar Jahren, aber immer noch existent und beim besten Willen keine „Nische“.

Komplexe Anwendungen mit großen Datenmengen, schnellen Antwortzeiten und hoher Interaktion mit dem Benutzer gehören immer noch auf den Desktop und nicht in den Browser. In meinem speziellen Fall sind dies hauptsächlich Lösungen im Planungs- und Steuerungsumfeld. Aber auch Komplettlösungen, wie sie z.B. in OP-Sälen installiert werden und die eng mit der vorhandenen Hardware zusammen arbeiten, wollen sicherlich nicht im Browser laufen.

Warum auch? Man macht sich nur zusätzlich abhängig. Der Einsatz von Browsern bedeutet eine weitere Komponente innerhalb der Gesamtlösung und zwar eine Komponente, die häufig vom Kunden bestimmt und auch gerne mal geändert wird.“

Lesen Sie auch: 20 JavaFX-Anwendungen aus der Praxis: So schön kann ein Java UI sein!

3. Zwei JavaFX Frameworks stellen sich vor

Nachdem wir uns in den letzten Folgen stark auf Open-Source-Projekte im JavaFX-Umfeld konzentriert haben, weist Dirk zu Recht auf die Existenz vieler kommerzieller JavaFX-Frameworks hin:

Kommerzielle JavaFX-Lösungen sollen hier im JavaFX Sixpack natürlich auch ihr Recht bekommen. Schauen wir uns also gleich einmal an, was CalendarFX und FlexGanttFX zu bieten haben!

CalendarFX

CalendarFX soll es einfach machen, Kalender-Funktionalität in JavaFX-Anwendungen zu integrieren. Das Framework beinhaltet Custom Controls für Tages-, Wochen-, Monats-, und Jahresansichten.

Day-View im JavaFX Framework in CalendarFX

Day View in CalendarFX

Week View im JavaFX Framework CalendarFX

Week View in CalendarFX

 

Month View im JavaFX Framework CalendarFX

Month View in CalendarFX

Year View im JavaFX Framework CalendarFX

Year View in CalendarFX

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

Das Framework geht aber noch darüber hinaus, indem es all jene Elemente anbietet, die man zusätzlich benötigt, um tatsächlich Kalender zu bauen. Dazu gehören Ansichten der verschiedenen Kalenderquellen (z.B. Apple iCloud) oder auch die Anzeige von Suchergebnissen. Als Sahnehäubchen beinhaltet CalendarFX eine Unterstützung zum Drucken von Kalendern, einschließlich einer sehr komfortablen Vorschau.

Druck-View in CalendarFX

Druck-View in CalendarFX

 

Momentan arbeitet das CalendarFX-Team an einer vollständigen Integration mit dem Google Calendar API. Das Ziel ist, dass Applikationen, die ihre Daten auf den Google Servern speichern, diese dann sehr einfach anzeigen lassen können.

Code-Beispiel

Das folgende Beispiel zeigt, wie man bei CalendarFX einen neuen Kalender anlegt und einen Geburtstag einträgt:

	// create a birthday entry
	Entry birthday = new Entry(„Birthday“);
	birthday.setInterval(LocalDate.of(1969, Month.MARCH, 16);
	birthday.setRecurrenceRule(„RRULE:freq=yearly“);

	// create a family calendar and add entry
	Calendar familyCalendar = new Calendar(„Family“);
	familyCalendar.addEntry(birthday);

	// create a calendar source and attach family calendar
	CalendarSource mySource = new CalendarSource(„Home“);
	mySource.getCalendars().add(familyCalendar);

	// create a calendar view and attach source
	CalendarView calendarView = new CalendarView();
	calendarView.getCalendarSources().add(mySource);

 

FlexGanttFX

FlexGanttFX ist ein Framework für die Darstellung von Aktivitäten über die Zeit. Es wird für die Benutzeroberflächen von Planungs- und Steuerungssystemen, Manufacturing Execution Systems, Resource Management Systems, etc. verwendet. FlexGanttFX visualisiert Planungsergebnisse. Die Pläne sind interaktiv und können vom Benutzer geändert werden, wobei jede Änderung eine Neuberechnung durch die Businesslogik der Anwendung zur Folge hat.

JavaFX Framework FlexGanttFX

JavaFX Framework FlexGanttFX

 

FlexGanttFX ist eine reine UI-Komponente und beinhaltet keinerlei Planungsfunktionalität. Diese ist von den jeweiligen Anwendungen bereit zu stellen. Das Framework wird bereits von mehreren sehr großen Firmen weltweit eingesetzt, u.a. von Emirates Airlines in Dubai zum Managen ihrer Flugzeugflotte und von PSI für ihre komplette Suite von Planungssoftware.

FlexGanttFX im Einsatz bei den Emirates Airlines

FlexGanttFX im Einsatz bei den Emirates Airlines

FlexGanttFX im Einsatz bei PSI

FlexGanttFX im Einsatz bei PSI

.
.
.
.
.
.
.
.
.
.

4. JavaFX versus Swing

FlexGantt wurde von Dirk zunächst auch als Swing-Variante entworfen. Als langjähriger Kenner von Java-UI-Toolkits ist Dirk also bestens mit den Unterschieden zwischen Swing und JavaFX vertraut. Was macht also Dirks Erfahrung nach den größten Unterschied zwischen JavaFX und Swing aus?

Dirk LemmermannWorin liegt der größte Fortschritt bei JavaFX gegenüber Swing?

Aus Benutzer-Sicht: JavaFX-Anwendungen sehen moderner und besser aus, bieten mehr Features und können auf mehr Plattformen deployed werden – mittels Gluon für Mobile- und mittels JPRO für Browser-Anwendungen.

Aus Entwickler-Sicht: Für mich sind die größten Highlights in JavaFX das Property Binding API, das CSS Styling und natürlich die Controls, insbesondere jene, welche in Swing fehlten: WebView, Media Player, etc. In letzter Zeit arbeite ich allerdings auch viel mit Animationen und kann mich auch dafür begeistern, denn so etwas gab es in Swing nicht.

Alle genannten Punkte bedeuten für mich als Entwickler einen enormen Performance Boost oder sogar die Möglichkeit, Dinge zu machen, die so vorher gar nicht gingen. Für Swing gab es zwar für das eine oder andere Feature Lösungen von Drittanbietern (z.B. „Glazed Lists“ für observable Lists). Aber jetzt kommt einfach alles aus einem Guss und ist ausgezeichnet miteinander integriert.

In JavaFX ist der Übergang von 2D zu 3D völlig barrierefrei und mit dem gleichen API möglich. In Swing waren 2D und 3D noch „lightweight“ und „heavyweight“ und völlig unterschiedliche APIs.

Es macht einfach unglaublich Spaß mit JavaFX zu arbeiten, weil es mit guten Konzepten und einem sauberen API daherkommt. Zum Thema „JavaFX vs. Swing“ habe ich bei der letzten JavaOne in San Francisco auch einen Vortrag gehalten. Er stieß auf großes Interesse und zeigt, dass jetzt viele Unternehmen über einen Wechsel zu JavaFX nachdenken.

Wer interessiert ist, kann sich an mich wenden und ich schicke den Vortrag per Mail zu oder präsentiere ihn auch gerne noch einmal.“

5. JavaFX und Java 9

Wo steht JavaFX in der Entwicklung eigentlich gerade? Nach den großen Anstrengungen hin zur offiziellen Integration ins JDK ist es deutlich ruhiger auf Oracles JavaFX-Kanälen geworden. Doch steht mit dem Java-9-Release Ende Juli 2017 ja auch eine neue Version von JavaFX an. Welche Neuerungen sind hier zu erwarten?

Bezüglich JavaFX bedeutet Java 9 erst einmal Arbeit.

JavaFX und Java 9 – was ist neu?

Dirk Lemmermann: „Bezüglich JavaFX bedeutet das Java 9 Release hauptsächlich erst einmal Arbeit. Und zwar deshalb, weil es Änderungen am API gegeben hat. Dies geschah im Kontext von Projekt Jigsaw / Modularisierung und JEP 253: „Prepare JavaFX UI Controls & CSS APIs for Modularization“.

Viele JavaFX-Anwendungen benutzen private APIs. Dies sind entweder Methoden mit dem Prefix „impl_“ oder Klassen in „com.sun.javafx.*“ Packages (wie z.B. Skins). In Java 9 sind mehrere dieser Methoden und Klassen (alle Skins) inzwischen „public API“ und dürfen ganz „legal“ verwendet werden.

Grundsätzlich ist natürlich immer davon abzusehen, private APIs zu verwenden, aber bisher kam man bei JavaFX da meistens nicht herum. In Java 9 sollte sich das von nun an ändern. Abgesehen davon gab es keine großen Neuerungen, eher Feinschliff wie der neue, schnellere und präzisere Marlin Java2D Renderer oder auch High DPI Support.“

6. Die JavaFX Wunschliste

Nach dem Release ist vor dem Release, das gilt auch für JavaFX. Bedeutet Java 9 für JavaFX vor allem die Anpassung an die Jigsaw-Modularisierung, dürfte das Java-10-Release wieder mehr in Richtung Feature-Erweiterung gehen. Welche Neuerungen würde Dirk hier gerne umgesetzt sehen?

Was steht auf deiner Wunschliste für JavaFX?

JavaFX ist sehr schnell beim Zeichnen von Rechtecken, aber bei Dreiecken sieht es schon ganz anders aus.

Dirk Lemmermann: „Vor ein paar Monaten hat Jonathan Giles, der Controls und CSS Lead Engineer im JavaFX Team, auf der OpenJFX-Mailing-Liste nachgefragt, welche Features wir in Java 10 sehen möchten. Meine Antwort deckte sich mit den Antworten vieler anderer: Performance!

Sowohl die CSS und Layout Engine als auch die eigentlichen Zeichenoperationen müssen verbessert werden. So heißt es zwar immer, dass JavaFX die Hardware, sprich die GPU, direkt anspricht. Aber leider ist dies nur für wenige Operationen der Fall.

JavaFX ist sehr schnell beim Zeichnen von Rechtecken, aber bei Dreiecken oder Pfaden sieht es schon ganz anders aus. Abgesehen von der Performance sollte die TableView verbessert, eine Focus Traversal API und eine Desktop API hinzugefügt werden.“

Mehr JavaFX

Das war die heutige Folge des JavasFX Sixpack. Vielen Dank an unseren Gast Dirk Lemmermann und schön, dass auch Sie dabei waren!

Bis zum nächsten Mal, wenn es wieder heißt:

Es brodelt in der JavaFX Community! Im JavaFX Sixpack stellen wir spannende Projekte, Libraries und Werkzeuge vor und diskutieren über aktuelle Trends für JavaFX-Entwickler.

Mehr zum Thema:

Wie man Swing-Anwendungen mit JavaFX modernisiert

 

Geschrieben von
Hartmut Schlosser
Hartmut Schlosser
Hartmut Schlosser ist Redakteur und Online-Koordinator bei Software & Support Media. Seine Spezialgebiete liegen bei Java-Enterprise-Technologien, JavaFX, Eclipse und DevOps. Vor seiner Tätigkeit bei S & S Media studierte er Musik, Informatik, französische Philologie und Ethnologie.
Kommentare
  1. Interview on jaxenter.de – DLSC2017-04-13 14:08:28

    […] week and this week the article was published (in German) on their website. You can find it here: https://jaxenter.de/javafx-java9-javascript-56083. The interview was embedded in the “JavaFX Sixpack” series that tries to evaluate the […]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.