Visualisierung in Java mit JavaFX

Java auf dem Desktop mag zwar in die Jahre gekommen sein, ist allerdings allen Nörglern zum Trotz noch weit verbreitet. Mit JavaFX steht eine Möglichkeit zur Verfügung, Anwendungen ansprechend zu gestalten und den Staub von mit Swing gebauten Applikationen zu blasen.

In Pocket speichern vorlesen Druckansicht 6 Kommentare lesen
Lesezeit: 20 Min.
Von
  • Gerrit Grunwald
Inhaltsverzeichnis

Auch wenn es nicht mehr "Hype" ist, ist Java auf dem Desktop noch immer weit verbreitet. Als Framework zur Visualisierung kommt überwiegend das etwas in die Jahre gekommene Java Swing zum Einsatz. Mit ihm lassen sich zwar so ziemlich alle Arten von Benutzeroberflächen bewerkstelligen, allerdings gelingt das nicht mit den Bordmitteln, sondern erfordert einen teilweise erheblichen Aufwand.

Deshalb sehen viele Swing nutzende Desktop-Anwendungen nicht besonders schick aus, hat man den Fokus doch häufiger auf die Funktionen als auf das Aussehen gelegt. In der Vergangenheit störte das meist nicht weiter, aber in Zeiten von iOS, Android, OS X, Ubuntu und Windows 8 ist der Durchschnittsanwender bei den Oberflächen verwöhnt, und somit wirken die Swing-Oberflächen teilweise verstaubt.

Mit JavaFX gibt es eine Technik, die es ermöglichen soll, auch in Java ansehnliche Desktop-Anwendungen zu schreiben. JavaFX ist gar nicht mehr so neu, wie es den Anschein hat, seine Geschichte reicht zurück bis ins Jahr 2006, als es unter dem Namen F3 (Form Follows Function) von Chris Oliver entwickelt wurde, um die UI-Entwicklung in Java zu vereinfachen. Mit der Übernahme der Firma Seebeyond durch Sun wurde Oliver mit seiner Entwicklung Teil von Sun Microsystems, und als man dort auf der Suche nach einem Swing-Nachfolger war, kam F3 gelegen. Das Unternehmen entschloss sich, F3 in JavaFX umzubenennen und es zu einem kompletten UI-Framework auszubauen.

Leider hat das Projekt nie richtig abgehoben, was nicht zuletzt an der Art und Weise lag, in der bei Sun entwickelt wurde. So stellte man JavaFX auf Konferenzen in drei aufeinanderfolgenden Jahren jeweils als absolute Neuheit vor. Das Ganze wurde erst besser, als Oracle Sun Microsystems übernahm und man sich dort dazu entschloss, JavaFX konsequent als Nachfolger von Swing zu etablieren. Dazu wurde zunächst die JavaFX eigene Sprache JavaFX Script durch eine Implementierung in "reines" Java ersetzt, um die Einstiegshürde für Java-Programierer so gering wie möglich zu halten. Des Weiteren hielten die Entwickler die aufgestellte Roadmap ein, was zu Sun-Zeiten eher nicht der Fall war.

Im Prinzip gilt folgendes: JavaFX 1.x mit JavaFX Script ist aus der Sun-Ära, und seit JavaFX 2 gibt es eine Java-API. Dabei muss man Oracle zugute halten, dass das Unternehmen versucht hat, die Vorteile von JavaFX Script soweit es geht nach Java zu portieren, was Entwicklern Features wie Properties und Bindings beschert hat.

JavaFX kommt seit JDK 7 Update 6 immer zusammen mit dem JDK, man muss sich somit nicht erst irgendwo ein JAR herunterladen, sondern kann im Prinzip sofort mit JavaFX loslegen. Ein weiterer Vorteil der Sun-Übernahme durch Oracle ist die Tatsache, dass nun die JDK-Versionen für alle Plattformen bei Oracle entstehen. Das führt dazu, dass am selben Tag Versionen für Windows, Mac OS X und Linux veröffentlicht werden, was plattformübergreifende Entwicklung ermöglicht. JavaFX 2.x steht ebenfalls mit all seinen Features auf den genannten Plattformen zur Verfügung. In der nächsten Version können sich Entwickler unter anderem über Unterstützung für ARM-Geräte (wie Raspberry Pi und BeagleBoard xM) freuen. Ein weiteres Novum in der Entwicklung von JavaFX ist die Tatsache, dass der Quellcode komplett als Teil des OpenJDK (Unterprojekt OpenJFX) zur Verfügung stehen wird.

Wenn man sich nun anschaut, was genau JavaFX ist, kommt man schnell zu dem Schluss, dass es sich nur um eine neue Bibliothek handelt, deren API man sich aneignen muss. Es ist keine komplett neue Sprache, sondern einfach Java. Eine gute IDE-Unterstützung für Entwickler ist folglich sichergestellt (zurzeit ist man mit allen drei großen IDEs gut bedient: NetBeans 7.3, E(fx)clipse und IntelliJ IDEA 12.1).

Die Architektur von JavaFX ist ebenfalls interessant, da sie von Grund auf neu ist und nicht auf Swing beziehungsweise dem Abstract Window Toolkit (AWT) basiert. Das bedeutet allerdings auch, dass man nicht ohne weiteres JavaFX und Swing/AWT miteinander mischen kann (aber auch hier gibt es Lösungen, auf die später eingegangen wird). JavaFX besteht aus mehreren Bausteinen, die man in Abbildung 1 dargestellt sieht.

Architektur von JavaFX (Abb. 1)


Die wichtigsten Teile sind:

  • Prism
  • Glass
  • Quantum Toolkit

Bei Prism handelt es sich um die neue Rendering Engine, die Gebrauch von der Grafikhardware macht (falls unterstützt). Dabei wird auf OS X und Linux mit OpenGL gerendert, während unter Windows Direct 3D zum Einsatz kommt. Wird die Grafikhardware nicht unterstützt (bei Hardware, die nicht älter als drei Jahre ist, sollte das allerdings der Fall sein) wird ein Software-Fallback auf Java2D verwendet. Das Glass Windowing Toolkit stellt den Zugriff auf Low-Level-Betriebssystemroutinen zur Verfügung. Das Quantum Toolkit verknüpft es dann mit Prism und stellt beides der Java-API zur Verfügung.