Upload
thomas-kuenneth
View
178
Download
13
Embed Size (px)
DESCRIPTION
Der Vortrag skizziert kurz die Geschichte von JavaFX, zeigt dann aber recht schnell die Vorgehensweisen beim Bau von JavaFX-Anwendungen auf. Hierbei steht die Frage im Mittelpunkt, welche Mittel JavaFX zur Verfgung stellt und wie diese Bausteine zu einem sinnvollen Ganzen verbunden werden. Dabei werden die Vorgehensweisen in Swing und JavaFX einander gegenbergestellt. MATHEMA Campus 2012, Freitag 24. Februar 2012 14:00 bis 15:15
Citation preview
Thomas Künneth 1 Copyright © 2012 MATHEMA Software GmbH
Desktop wiederentdeckt?
Moderne Anwendungen mit JavaFX
Thomas Künneth
http://kuennetht.blogspot.com/
Thomas Künneth 2 Copyright © 2012 MATHEMA Software GmbH
Zur Person
Arbeitgeber:
Bundesagentur für Arbeit
Vorgaben, Richtlinien und Best Practices
zur Softwarearchitektur von
Eigenentwicklungen und Kaufprodukten
Unterstützung bei der Fortentwicklung der
Gesamtarchitektur
privat:
Autor von Fachbüchern und –artikeln zu
Java, Eclipse und Android
Gadget Junkie
Old-School-Gaming
Thomas Künneth 3 Copyright © 2012 MATHEMA Software GmbH
Werbung (Was ist JavaFX?)
“the premier platform for rich enterprise client applications”
“the next step in the evolution of Java as a rich client platform”
“designed to provide a modern Java environment that
shortens the development time and eases the deployment of
data driven business and enterprise client applications”
“enables application developers to easily create and deploy
Rich Internet Applications that behave consistently across
multiple platforms”
http://www.oracle.com/technetwork/java/javafx/overview/javafx-2-datasheet-496523.pdf
Thomas Künneth 4 Copyright © 2012 MATHEMA Software GmbH
Was bedeutet das?
JavaFX ist ein Technologiestapel für den Bau von
Benutzeroberflächen
Soll moderne Programmierschnittstellen bieten
Oberflächen sollen sich schnell umsetzen lassen
Oberflächen sollen „sexy“ aussehen
Soll zeitgemäße multimediale Fähigkeiten haben
Thomas Künneth 5 Copyright © 2012 MATHEMA Software GmbH
Java? Oberflächen? Da war doch was...?
JavaFX ist offiziell der Nachfolger von Swing
Swing bleibt aber weiterhin Teil der Java SE Runtime
Swing- und JavaFX-Komponenten können in Anwendungen
gemischt werden
Derzeit ist JavaFX kein integraler Bestandteil der Java
Plattform. Dies soll sich mit Java 8 ändern.
Thomas Künneth 6 Copyright © 2012 MATHEMA Software GmbH
Oracle hat JavaFX also im Griff
Aber: Stabile Sicht war nicht immer vorhanden
Lange Zeit viel Slide-Ware
Geschichte von JavaFX hat viele unerwartete Wendungen
Thomas Künneth 7 Copyright © 2012 MATHEMA Software GmbH
Agenda
Ein Blick in die Geschichtsbücher
Wie lange gibt es JavaFX schon?
Wie hat es sich entwickelt?
Anatomie einer JavaFX-Anwendung
Struktur und Inhalt einer einfachen Anwendung
Ähnlichkeiten mit und Unterschiede zu Swing
Glaskugel
Hat JavaFX eine Chance?
Wie hält es Oracle mit seinem „neuen Liebling“?
Thomas Künneth 8 Copyright © 2012 MATHEMA Software GmbH
Agenda
Ein Blick in die Geschichtsbücher
Anatomie einer JavaFX-Anwendung
Glaskugel
Thomas Künneth 9 Copyright © 2012 MATHEMA Software GmbH
Schauspiel in mehreren Akten: 2007
JavaOne 2007: Sun kündigt JavaFX, JavaFX Script und
JavaFX Mobile an
Idee: mit der Programmiersprache JavaFX Script und
bestimmten weiteren Tools grafisch opulente Anwendungen
für unterschiedliche Gerätekategorien entwickeln.
Nicht mehr nur Programmierer, sondern Designer sollen UIs
gestalten
2007: starker Fokus auf Mobility (Smartphones treten ihren
Siegeszug an)
Thomas Künneth 10 Copyright © 2012 MATHEMA Software GmbH
2008
JavaOne 2008: Sun nennt drei JavaFX-Profile: JavaFX
Mobile, JavaFX Desktop und JavaFX TV
Juli 2008: Developer Previews des JavaFX SDKs für Windows
und Macintosh sowie ein Plugin für NetBeans
Veröffentlichung von JavaFX (Desktop) 1.0 am 4. Dezember
2008
Thomas Künneth 11 Copyright © 2012 MATHEMA Software GmbH
2009
JavaFX Mobile wird als Teil von JavaFX 1.1 veröffentlicht
Es folgen mehrere Updates des JavaFX 1.x-Releases
die letzte 1er Version ist JavaFX 1.3.1 (August 2010)
Thomas Künneth 12 Copyright © 2012 MATHEMA Software GmbH
JavaFX Mobile
War als Plattform für mobile Geräte gedacht
Sun hatte die Rechte an SavaJe, einem Java-basierten
Betriebssystem, übernommen
später eher Aufsatz auf bestehende Plattformen
Apps sollten mit der Programmiersprache JavaFX Script
geschrieben werden
Thomas Künneth 13 Copyright © 2012 MATHEMA Software GmbH
JavaFX Script
eine übersetzte, statisch typisierte, deklarative
Programmiersprache
läuft in der JVM
kam als F3 (Form follows Function) mit der Übernahme von
Chris Oliver und SeeBeyond im September 2005 in den Besitz
von Sun
Wurde 2007 open source
Thomas Künneth 14 Copyright © 2012 MATHEMA Software GmbH
JavaFX Script-Demo
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
Stage {
title: "Hello World"
width: 250
height: 80
scene: Scene {
content: Text {
font : Font {
size : 24
}
x: 10, y: 30
content: "Hello World"
}
}
}
Thomas Künneth 15 Copyright © 2012 MATHEMA Software GmbH
Vision von JavaFX 1.x
ästhetische, plattformübergreifende Anwendungen
Erschließung neuer Entwicklerschichten durch
leichtgewichtige JavaScript-artige Programmiersprache
Fokus mehr auf Design als auf Programmierung
JavaFX Production Suite als Brücke zu Designerwerkzeugen
Silverlight und Flash/Flex als Vorbilder und Konkurrenten
Thomas Künneth 16 Copyright © 2012 MATHEMA Software GmbH
Wandel
September 2010: JavaFX Script wird abgekündigt und JavaFX
2.0 angekündigt
Ende 2011: Verfügbarkeit von JavaFX 2.0 für Windows und
Preview für Mac
JavaFX soll quelloffen und perspektivisch durch die
Community weiterentwickelt werden
fundamental: JavaFX enthält Java-API
Thomas Künneth 17 Copyright © 2012 MATHEMA Software GmbH
Agenda
Ein Blick in die Geschichtsbücher
Anatomie einer JavaFX-Anwendung
Glaskugel
Thomas Künneth 18 Copyright © 2012 MATHEMA Software GmbH
Voraussetzungen
Nutzung
Java SE 6 oder 7
JavaFX 2.0 Runtime
Entwicklung
ein entsprechendes JDK
JavaFX 2.0 SDK
Unterstützung in IDEs (optional)
Eclipse: e(fx)clipse (http://efxclipse.org/)
NetBeans 7.1: "out of the box"
Thomas Künneth 19 Copyright © 2012 MATHEMA Software GmbH
Setup (am Beispiel von Eclipse)
Thomas Künneth 20 Copyright © 2012 MATHEMA Software GmbH
Hallo Welt
public class HalloWelt extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage)
throws Exception {
primaryStage.setTitle("Hallo Welt");
Group group = new Group();
Scene scene = new Scene(group);
// anzuzeigender Text...
Text text = new Text("Hallo Welt!");
text.setTextOrigin(VPos.TOP);
// Font
text.setFont(new Font(72));
// anzeigen
group.getChildren().add(text);
primaryStage.setScene(scene);
primaryStage.show();
}
}
Thomas Künneth 21 Copyright © 2012 MATHEMA Software GmbH
Minimalstruktur einer Anwendung
leitet von javafx.application.Application ab
überschreibt die Methode start()
main()-Methode ruft launch() auf
...aber was sind Stage, Group und Scene?
Thomas Künneth 22 Copyright © 2012 MATHEMA Software GmbH
Stage
Die Stage ist der Top Level-Container einer Anwendung
Sie enthält eine oder mehrere Scenes
Eine Scene bildet die Zeichenoberfläche für den Inhalt einer
Anwendung (die Benutzeroberfläche bzw. einen Teil davon)
Die so genannte primary stage wird durch die Plattform
erzeugt
Das Enum javafx.stage.StageStyle steuert in Teilen
das Aussehen (transparent, …)
Fensterstatus (minimiert, Vollbild) werden über setter
gesteuert
Thomas Künneth 23 Copyright © 2012 MATHEMA Software GmbH
Scene
Die Scene ist ein Container für alle Elemente eines so
genannten Scene Graphs
Sie legt fest, was wann wo wie angezeigt wird
Eine Anwendung kann viele Scenes enthalten
Thomas Künneth 24 Copyright © 2012 MATHEMA Software GmbH
Scene Graph
Der Scene Graph ist eine Baumstruktur
JavaFX hält ein internes Modell aller grafischen Objekte
einer Anwendung
Zu jeder Zeit ist bekannt,
welche Objekte angezeigt werden müssen
welche Bereiche neu gezeichnet werden müssen
wie Objekte am effizientesten gerendert werden
Thomas Künneth 25 Copyright © 2012 MATHEMA Software GmbH
Elemente des Scene Graphs
Elemente des Scene Graphs heißen nodes
nodes sind entweder branches oder leafs
Der erste node wird root node genannt - er hat keinen
Elternknoten
Thomas Künneth 26 Copyright © 2012 MATHEMA Software GmbH
Beispiele für nodes
JavaFX kennt eine ganze Reihe von Klassen, die als nodes
fungieren.
…und viele mehr…
Thomas Künneth 27 Copyright © 2012 MATHEMA Software GmbH
Evolution
// Effekt
text.setEffect(new Reflection());
// Linie
text.setStrokeType(StrokeType.OUTSIDE);
text.setStroke(Color.BLUE);
text.setStrokeWidth(2);
// Füllung
text.setFill(new LinearGradient(0f, 1f, 1f, 0f,
true,
CycleMethod.NO_CYCLE, new Stop[] {
new Stop(0, Color.web("#f8bd55")),
new Stop(0.14, Color.web("#c0fe56")),
new Stop(0.28, Color.web("#5dfbc1")),
new Stop(0.43, Color.web("#64c2f8")),
new Stop(0.57, Color.web("#be4af7")),
new Stop(0.71, Color.web("#ed5fc2")),
new Stop(0.85, Color.web("#ef504c")),
new Stop(1, Color.web("#f2660f")), }));
Thomas Künneth 28 Copyright © 2012 MATHEMA Software GmbH
Na und…?
Die angedeuteten grafischen Objekte sind natürlich auch mit
Java2D und Swing möglich…
Der Unterschied zum klassischen Komponentenkonzept von
AWT und Swing ist unter anderem…
…dass der Scene Graph zu jedem Zeitpunkt weiß, wann was wie
gezeichnet werden muss, in AWT bzw. Swing Komponenten aber
nur sich selbst kennen
es in AWT/Swing keine Plattform-Konzepte für Übergänge oder
Animationen gibt
Thomas Künneth 29 Copyright © 2012 MATHEMA Software GmbH
Schön und gut, aber…
Eye Candy allein
macht keine
moderne
Anwendung
JavaFX bietet
deshalb eine
ganze Reihe von
Standard-Controls
...und hat in 2.0
deutlich zugelegt
Thomas Künneth 30 Copyright © 2012 MATHEMA Software GmbH
...wie war das nochmal...?
Thomas Künneth 31 Copyright © 2012 MATHEMA Software GmbH
Architektur von Swing-Anwendungen
Benutzeroberfläche wird durch Komponentenbäume definiert
Position und Größe von Komponenten wird von Layout
Managern gesteuert
Manipulationen von Komponenten finden in einem speziellen
Thread (EDT) statt
Anwendungsaktivitäten (u. a. Serviceaufrufe) werden unter
Nutzung von SwingWorker in eigene Threads ausgelagert
Kommunikation zwischen Komponenten durch
Nachrichtenaustausch
Thomas Künneth 32 Copyright © 2012 MATHEMA Software GmbH
Aussehen von Swing-Anwendungen
wird durch das verwendete Look and Feel bestimmt
von der Fähigkeit der Entwickler, Komponenten mit
geeigneten Layout Managern positionieren zu lassen
viele ästhetische Eigenschaften (Ausrichtung an der
Grundlinie) hat Swing erst im Laufe der Zeit gelernt
Thomas Künneth 33 Copyright © 2012 MATHEMA Software GmbH
Abbildung von Bedienelementen auf nodes
Da JavaFX die Benutzeroberfläche in Scenes abbildet,
müssen sich einzelne Bedienelemente in dieses Konzept
einfügen
Die Position und Größe von Bedienelementen wird mit
Layouts festgelegt
Layouts sind vergleichbar mit Swing-Panels, für die ein
bestimmter Layout Manager gesetzt wurde
Beispiele für Layouts sind BorderPane, HBox und GridPane
Thomas Künneth 34 Copyright © 2012 MATHEMA Software GmbH
Eine Beispieloberfläche
Thomas Künneth 35 Copyright © 2012 MATHEMA Software GmbH
Beispiel: Leiste mit Schaltflächen
HBox hboxButtons = new HBox();
hboxButtons.setPadding(new Insets(10,
0, 0, 0));
hboxButtons.setAlignment(Pos.BOTTOM_RIG
HT);
hboxButtons.setSpacing(10);
Button buttonDiscard = new
Button("Discard");
buttonDiscard.setOnAction(new
EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent
event) {
listviewContacts.getSelectionModel
().clearSelection();
}
});
Button buttonSave = new Button("Save");
hboxButtons.getChildren().addAll(button
Discard, buttonSave);
Thomas Künneth 36 Copyright © 2012 MATHEMA Software GmbH
Beispiel: Texte und Textfelder
GridPane gridpaneDetails = new
GridPane();
gridpaneDetails.setHgap(10);
gridpaneDetails.setVgap(10);
gridpaneDetails.setPadding(new
Insets(10, 10, 10, 20));
Label labelForename = new
Label("Forename:");
gridpaneDetails.add(labelForename, 0,
0);
GridPane.setHalignment(labelForename,
HPos.RIGHT);
textfieldForename = new TextField();
gridpaneDetails.add(textfieldForename,
1, 0);
Label labelSirname = new
Label("Sirname:");
gridpaneDetails.add(labelSirname, 0, 1);
GridPane.setHalignment(labelSirname,
HPos.RIGHT);
textfieldSirname = new TextField();
gridpaneDetails.add(textfieldSirname, 1,
1);
Label labelBirthday = new
Label("Birthday:");
gridpaneDetails.add(labelBirthday, 0,
2);
GridPane.setHalignment(labelBirthday,
HPos.RIGHT);
gridpaneDetails.add(hboxBirthday, 1, 2);
gridpaneDetails.add(hboxButtons, 0, 3);
GridPane.setColumnSpan(hboxButtons,
GridPane.REMAINING);
Thomas Künneth 37 Copyright © 2012 MATHEMA Software GmbH
Gesamtstruktur
Thomas Künneth 38 Copyright © 2012 MATHEMA Software GmbH
Trennung von Gestaltung und Code
Mit FXML können Oberflächen außerhalb des
Programmcodes geschrieben werden
Der Scene Builder soll ein Werkzeug für Designer werden
ist für Ende 2012 angekündigt
Thomas Künneth 39 Copyright © 2012 MATHEMA Software GmbH
Zusammenfassung
JavaFX 2 hat mit Swing nichts mehr zu tun
Aber auch JavaFX muss Probleme lösen, die schon in Swing
aufgetreten sind:
Umgang mit Nebenläufigkeit/Threading
Internationalisierung
ggf. Barrierefreiheit
Anpassbarkeit der Komponenten
Thomas Künneth 40 Copyright © 2012 MATHEMA Software GmbH
Agenda
Ein Blick in die Geschichtsbücher
Anatomie einer JavaFX-Anwendung
Glaskugel
Thomas Künneth 41 Copyright © 2012 MATHEMA Software GmbH
Erfolgschancen
Wer steigt auf JavaFX um?
Werden neue Anwendungen anstelle von Swing mit JavaFX
gebaut?
Ist der Mehrwert von JavaFX groß genug?
Oder ist der Trend zu Web-Frameworks weiterhin
ungebrochen?
Thomas Künneth 42 Copyright © 2012 MATHEMA Software GmbH
Oracle investiert viel
viele Tutorials
gute Dokumentation
nachvollziehbare Roadmap
Thomas Künneth 43 Copyright © 2012 MATHEMA Software GmbH
Walled Gardens
Oracle wirbt mit leichter Deploybarkeit und Nutzbarkeit auf
vielen Endgeräten
Aber wollen Endnutzer überhaupt noch Downloads jenseits
geschützter Einkaufsmeilen?
Sowohl Apple als auch Microsoft drängen zur Distribution über
die jeweiligen Softwareläden
Oracle hat Demos von JavaFX unter iOS und Android gezeigt
– ob daraus ein fertiges Produkt werden kann, ist auch von
rechtlichen Fragen abhängig
Mit Windows 8 wird diese Welt in zwei Teile geteilt – es bleibt
abzuwarten, in welchen Teilen sich JavaFX niederlassen
kann/wird
Thomas Künneth 44 Copyright © 2012 MATHEMA Software GmbH
Links
http://javafx.com/ - Offizielle JavaFX-Homepage
http://efxclipse.org/ - e(fx)clipse, JavaFX 2.0 Tooling and
Runtime for Eclipse and OSGi
http://docs.oracle.com/javafx/ - Oracle JavaFX 2
Documentation