JavaFX ist eine der jüngsten Erweiterungen der Java-Plattform. Ihr Ziel ist es, "die Erstellung und den Einsatz von hochwirksamen Inhalten für eine Vielzahl von Geräten zu vereinfachen und zu beschleunigen". Ich denke, es ist richtig, dass SUN sich auf diesen Markt konzentriert.
Erste Schritte Oke, wie fange ich an? Es gibt ein Netbeans Plug-in und ein Eclipse Plug-in. Da Eclipse meine übliche Arbeitsumgebung ist, habe ich mich dafür entschieden, dieses Plug-in zu meiner Installation hinzuzufügen. Die Installation ist (wie erwartet) ganz einfach über die Update-Site (download.java.net/general/openjfx/plugins/eclipse/site.xml). Nachdem ich also ein neues Projekt gestartet habe, habe ich meine erste JavaFX-Datei erstellt.
Die leere FX-Datei starrt Ihnen ins Gesicht. Wie fangen Sie an? Nachdem ich ein wenig im Internet gestöbert hatte, fand ich einige Beispiele und kam auf diesen trivialen Code.
Es kompiliert oke. Wie führen Sie es aus? Das Plug-in verfügt über eine Startkonfiguration, mit der JavaFX ausgeführt werden kann. Eigentlich wird die Klasse net.java.javafx.FXShell verwendet, um die Anwendung zu starten.
Sie müssen den Namen des JavaFX-Skripts, das Sie ausführen möchten, in die Befehlszeile eingeben.
Nachdem Sie auf die Schaltfläche "Ausführen" geklickt haben, wird dieser eher nutzlose Rahmen angezeigt.
Listen So weit, so gut. Wir fangen gerade an. Wie wäre es also mit einem Beispiel aus der Praxis? Beginnen wir mit einem Textfeld, einer Schaltfläche und einer Liste. Die Deklaration der Schnittstelle mit JavaFX ist recht einfach. Dies:
import javafx.ui.*;
Rahmen {
sichtbar: true
Inhalt: Box {
Ausrichtung: VERTICAL
Inhalt : [
TextFeld {
},
Schaltfläche {
Text: "Hinzufügen"
},
ListBox {
}
]
}
}
Wird diese einfache Anwendung erstellen:
Wie bekommen Sie also die Dynamik hinein? Nun, für einen Java-Entwickler ist das eine ziemliche Überraschung. Das Ereignissystem in den Komponenten kommt Ihnen sicher bekannt vor, wenn Sie schon einmal Swing programmiert haben, aber der Daten-/Modellteil ist ganz anders. Wir brauchen eine Klasse, die die Daten enthält, so weit nichts Neues. Aber anstelle von Feldern und Methoden hat diese Klasse Attribute und Operationen. Mit dem folgenden Code wird die Anwendung funktionieren.
import javafx.ui.*;
Klasse MyModel {
Attribut input:String;
Attributliste: String*;
}
var model: MyModel = new MyModel();
Rahmen {
sichtbar: true
Inhalt: Box {
Ausrichtung: VERTICAL
Inhalt : [
TextFeld {
Wert: bind model.input
},
Schaltfläche {
Text: "Hinzufügen"
Aktion: operation() {
fügen Sie model.input nach model.list[sizeof model.list] ein;
}
},
ListBox {
Zellen: binden foreach (Zeile in model.list)
ListCell {
Text: Zeile
}
}
]
}
}
Die Komponenten werden mit dem Schlüsselwort bind an das Modell gebunden. Die Aktionshandler heißen operation</span und die Datenelemente in den Klassenattributen. Außerdem gibt es eine ganze Reihe von Schlüsselwörtern, die angewendet werden können, wie
Flex Wie würde das also in Flex aussehen? Für Flex gibt es ein von Adobe entwickeltes Eclipse-Plugin. Es verfügt über einen grafischen Modus, mit dem Sie per Drag-and-Drop eine Oberfläche zusammenstellen können.
Diese Entwurfsansicht ist sehr gut und einfach zu verwenden, aber es gibt auch eine "Code"-Ansicht, in der Sie den eigentlichen MXML-Code sehen können, der dieser Anwendung zugrunde liegt. Dies ist ein XML-ähnliches Format.
Die Namespaces in dem Dokument unterscheiden sich ein wenig von dem, was Sie von XSD erwarten würden. Sie beziehen sich tatsächlich auf die Paketstruktur des zugrunde liegenden Codes. Die "XSD" ist also recht dynamisch. Das Ausführen der Anwendung in Eclipse ist ganz einfach. Eclipse verwendet das Flex SDK, um die MXML-Datei in einen SWF-Film zu kompilieren, und kann den Standalone-Flash-Player verwenden, um ihn anzuzeigen.
Wie fügen wir nun das dynamische Verhalten hinzu? Wir müssen uns den MXML-Quelltext ansehen und etwas ActionScript-Code hinzufügen. Der Code wird wie folgt aussehen:
Eine ArrayCollection wird verwendet, um die Daten zu speichern. Die Liste wird sie als DataProvider verwenden. Das Klickereignis der Schaltfläche ist mit einem benutzerdefinierten Code verknüpft, der den Text zu den Daten hinzufügt.
Fazit Wir konnten diese Anwendung mit JavaFX und Flex in wenigen Minuten implementieren. Zugegeben, es handelt sich um eine sehr einfache Anwendung, die in beiden Systemen anders hätte implementiert werden können, aber ich denke, wir haben einige Funktionen beider Systeme gesehen.
- Deklarative Sprache für Benutzeroberflächen Sowohl JavaFX als auch Flex sind eine deklarative Sprache zur Erstellung einer Benutzeroberfläche. Ich denke, das ist ein großer Fortschritt gegenüber dem Swing-Code, den Sie für eine einfache Anwendung wie diese benötigen.
- Skriptsprache Flex verwendet ActionScript, einen ECMA4-Dialekt. Dies ist eine Sprache ähnlich wie JavaScript. Sie ist objektorientiert und kann sowohl strenge als auch nicht strenge Typisierung verwenden. JavaFX wird mit einer neuen Skriptsprache ausgeliefert. Warum SUN sich für diese Sprache entschieden hat, ist mir schleierhaft. Ich denke, die Java-Syntax und -Semantik wären perfekt gewesen, um die Dynamik der Benutzeroberfläche auszudrücken.
- Syntax Das mag Geschmackssache sein, aber für mich macht die Entscheidung für XML sehr viel Sinn. Diese Sprache wird verwendet, um Dinge auszudrücken, die hierarchisch sind, wie z.B. ein Komponentenbaum. JavaFX kommt wieder mit einer neuen Syntax, die der Java-Sprache ähnelt, aber ganz anders ist. Das wird nur zu Verwirrung führen.
- Tools Der FlexBuilder entstammt einer langen Reihe von Tools, die von MacroMedia entwickelt wurden, wie DreamWeaver und Flash. Er ist recht gut, auch wenn er sich manchmal etwas instabil anfühlt. Das Tooling für JavaFX hinkt noch hinterher, aber das wird wahrscheinlich aufgeholt.
Verfasst von
Maarten Winkels
Contact



