Style my UI: Eine neue Chance für Java auf dem Desktop?

JavaFX-2.0-Integration mit Eclipse 4.x

Kai Tödter

Ein Ziel von Eclipse 4.x (Codename e4) war es, die Anpassbarkeit des UIs durch CSS Styling besser zu unterstützen. Leider sind die aktuellen Stylingmöglichkeiten des SWT UI Toolkits noch recht eingeschränkt. Dieser Artikel beschreibt einen Ansatz, SWT als GUI-Framework durch JavaFX 2.0 zu ersetzen. Dabei wird auch der Prototyp einer neuen JavaFX 2.0-basierten Rendering Engine für das Eclipse 4.x Workbench Model erklärt. Weiterhin wird auf die Frage eingegangen, ob dieser Ansatz mittelfristig tragen kann oder nur eine Spielerei ist.

Als die Entwicklung und das Design von Eclipse 4.x vor einigen Jahren begann, war eines der Ziele, die Anpassbarkeit des User Interface (UI) durch CSS Styling besser zu unterstützen. Das SWT (Standard Widget Toolkit) hat als Designgrundlage, möglichst alle UI-Elemente des unterliegenden Betriebssystems direkt (native) zu nutzen. Das ermöglicht es, Desktopapplikationen in Java zu entwickeln, die sich nahtlos in das Betriebssystem eingliedern und für den Endanwender keinen Paradigmenwechsel bei der Bedienung bedeuten. Hat man aber die Anforderung, ein bestimmtes UI-Design zu implementieren, das von dem nativen Look and Feel des Betriebssystems abweicht, kommt man mit SWT meistens nicht sehr weit. Durch das CSS Styling kann man heutzutage schon einiges anpassen, aber gerade bei nativen UI-Komponenten wie Menü-Bars, Buttons, Scroll Bars etc. sind die aktuellen CSS-Styling-Möglichkeiten des SWT sehr eingeschränkt.

Contacts-Demoapplikation

Für e4 habe ich eine kleine Demoapplikation einwickelt, die e4-Contacts-Demo. Die Demo ist im Eclipse Platform UI Git Repository enthalten [1]. Ein Ziel ist, das aktuelle implementierte SWT CSS Styling zu testen und zu veranschaulichen. Abbildung 1 zeigt die SWT-basierte Contacts-Demo mit einem blauen CSS Styling, was sich recht gut in Windows 7 integriert. Die Contacts-Demo bringt auch noch ein dunkles CSS Styling mit. In Abbildung 2 sehen Sie schon sehr deutlich einige der oben angesprochenen Probleme mit dem CSS Styling von SWT, wie beispielsweise das nicht stylebare Hautmenü und die Tabellen-Header.

Abb. 1: Die SWT-basierte e4-Contacts-Demo mit blauem CSS Styling

Abb. 2: Die SWT-basierte e4-Contacts-Demo mit dunklem CSS Styling
JavaFX 2.0

Ursprünglich war JavaFX als Sun Microsystems Antwort auf Flash und Silverlight gedacht, konnte sich aber aus verschiedenen Gründen nie durchsetzten. Nach der Übernahme von Sun durch Oracle gab es mit der aktuellen Version 2.0 einen deutlichen Schub. Oracle scheint strategisch sehr viel Wert auf die Etablierung von JavaFX, zum Beispiel auch als Basis für Desktop-UIs, zu legen. Ich hatte mir JavaFX in den letzten Jahren immer mal wieder angeschaut, aber stets als uninteressant eingestuft. JavaFX 2.0 ist die erste Version, die ich persönlich interessant finde, insbesondere als Java-Desktop-UI. Ich möchte an dieser Stelle nicht im Detail auf JavaFX 2.0 eingehen, einen guten Überblick mit einer Menge Tutorials und Beispielen finden Sie unter [2]. Für mich waren in erster Linie folgende Features von Java FX 2.0 relevant:

  • Vollständiges Java API
  • UI Controls sind „ganz normale“ Nodes im Scene Graph, das komplette GUI einer Applikation inklusive Menüs, Toolbars, Views, Formularen, Grafiken, Animationen etc. ist aus einem Guss
  • Alle JavaFX Controls sind komplett über CSS Styling anpassbar, und zwar äußerst flexibel, z. B. werden auch lineare und radiale Gradienten unterstützt.

Abbildung 3 zeigt die JavaFX-2.0-Demo „Ensemble“, die einen guten Überblick über alle Standardkomponenten gibt. Sie können die Applikation über Java WebStart direkt unter [3] ausprobieren. Natürlich gibt es auch noch ein paar Wehrmutstropfen:

Abb. 3: JavaFX Ensemble, ein netter Show Case mit allen Standardkomponenten
  • Im Moment wird noch kein Sub-Pixel Anti-Aliasing für Fonts unterstützt. Auf LCD-Displays sehen deshalb die Fonts sehr unschön und unscharf aus. Im JavaFX Bug Tracking ist dieses Feature aber schon gefordert und wird hoffentlich schon in einer der nächsten Releases verfügbar sein [4].
  • Die GUI Controls sind noch recht rudimentär. Basis-Controls wie Button, Toolbar, Menu, Tree und Table sowie einige Panels/Layouts sind verfügbar, allerdings bieten sie im Gegensatz zu etablierten UI Toolkits oft nur rudimentären Features. Ich hoffe, dass hier in Zukunft noch Erweiterungen einfließen, der Grundstock ist jedenfalls schon vorhanden.
Geschrieben von
Kai Tödter
Kommentare

Schreibe einen Kommentar

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