Nach einigen Fehlversuchen mit den frühen Versionen von JavaFX betreibt Oracle die Entwicklung von JavaFX 2.0 mit erheblichem Aufwand und beachtlichen Resultaten. Alleine schon deshalb lohnt es sich, JavaFX 2.0 genauer anzuschauen: die Fähigkeiten, das Programmiermodell, die APIs, die Werkzeugunterstützung und die Controls mit Hinblick auf die Einsatztauglichkeit heute und das Potenzial für morgen.
Lange Zeit schien es, als hätten sich Sun Microsystems und Oracle damit abgefunden, dass clientseitiges Java stetig an Attraktivität verliert. War es zu Beginn von Java mit der Einführung der Applets noch eines der Hauptzugpferde, so verschwand es zusehends aus dem Fokus des Interesses und wurde schließlich zum Mauerblümchen. Nicht wenige meinen, die Zeit von Java auf dem Desktop sei vorbei und künftig spiele sich alles in der WebMile ab, also im Browser oder auf mobilen Endgeräten. Geertjan Wielanga hat diese Sichtweise unter [1] sehr schön relativiert: auch wenn die Gelegenheitsapplikationen in der WebMile und damit nicht mehr auf der Java-Plattform laufen, die Productivity Apps brauchen weiterhin die Power von Java. Productivity Apps benutzt ein Experte den ganzen Tag. Es macht einen großen Unterschied, ob 500 Benutzer gelegentlich eine Aktie handeln oder ein Händler 500 Aktien pro Tag handelt. Im ersten Fall ist eine Webapplikation sinnvoll, im zweiten Fall eine Desktopapplikation.
JavaFX 2.0 ist momentan für die Entwicklung von Desktopapplikationen ausgelegt. Zwar wurden auf der JavaOne 2011 auch Möglichkeiten vorgeführt, JavaFX auf Smartphones und Tablets inklusive Android und iOS-Geräten auszuführen, diese Fähigkeit ist aber in der aktuellen Version nicht enthalten. Besonders augenfällig sind die visuellen Effekte von JavaFX. Das Kürzel „FX“ steht in der Filmwelt für die Spezialeffekte (Fire and Explosion). Das scheint mir etwas übertrieben, aber JavaFX 2.0 schlägt sich in dieser Kategorie durchaus wacker, wie auch schon seine Vorgängerversionen. Im Prinzip kann man die Effekte auch alle mit Java2D und Swing bauen, das ist aber deutlich aufwändiger. Als Beispiel benutzt Abbildung 1 lineare Gradienten, Reflektionen und einen farbigen Schatten, der wie ein Leuchten wirkt. Das Ganze ist mit wenigen Zeilen Code implementiert (Listing 1). Diese Visualisierungen sind im Gegensatz zu Bitmap-Bildern nicht nur voll skalierbar, sondern lassen sich beliebig zur Laufzeit hinzufügen, wegnehmen, miteinander verknüpfen oder in ihrer Intensität verändern. Die Veränderungen wiederum können mit einem weichen Übergang (Transition) animiert werden. Da kommt Freude auf.
Listing 1
package groovyfx
stage(title: 'GriffonFX', visible: true, centerOnScreen: true) {
scene(fill: black, width: 400, height: 300) {
hbox(padding: 80) {
text(text: "Java", font: "80pt sanserif",effect: reflection()) {
fill linearGradient(endX: 0, stops: [[0, orange], [1, chocolate]])
}
text(text: "FX", font: "80pt sanserif") {
fill linearGradient(endX: 0, stops: [[0, cyan], [1, dodgerblue]])
effect dropShadow(color: dodgerblue, radius: 25, spread: 0.25) {
reflection()
} }
text(text: " Magazin", font: "80pt sanserif",effect: reflection()) {
fill linearGradient(endX: 0, stops: [[0, orange], [1, chocolate]])
} } } }
Neu hinzugekommen sind einfache Möglichkeiten, um Audio, Video und eine Browsersicht zu integrieren. Das war bisher umständlich. Die Audiounterstützung funktioniert ohne merkliche Verzögerung, was ein echter Fortschritt ist, und es erlaubt endlich, ein sinnvolles Tonfeedback auf Benutzeraktionen zu geben. Außerdem gehört zum Lieferumfang eine einfache Bibliothek für Geschäftsgrafiken. Listing 2 ist alles, was man braucht, um die Tortengrafik in Abbildung 2 aufzubauen. Sie zeigt das Verhältnis der Suchanfragen im letzten Jahr zu den Themen in der Legende. Wie immer bei den Google-Trends muss man die Zahlen mit einer Prise Salz nehmen.
Listing 2
import groovyx.javafx.*
final trends = [Swing: 1, JavaFX: 0.29, AWT:0.2, SWT: 0.13]
GroovyFX.start {
def sgb = new SceneGraphBuilder()
sgb.stage title: 'Google Trends', visible: true, {
scene {
pieChart data: trends
} } }...