Am vergangenen Wochenende wurde die öffentliche Beta von JavaFX 2.0 herausgekommen. Wie Sie vielleicht aus meinem früheren Beitrag über JavaFX 2.0 entnehmen können, habe ich diese Veröffentlichung mit Spannung erwartet. Ich habe die JavaFX-Runtime, das SDK und die Netbeans-Plugins am folgenden Abend von Oracles JavaFX-Seite heruntergeladen und begonnen, JavaFX auszuprobieren, indem ich mir die Beispiele aus dem SDK von Netbeans angesehen und ausgeführt habe. Ich bin ziemlich begeistert, lesen Sie weiter, um mehr zu erfahren!
JavaFX-Übersicht Das neue JavaFX ist eine Bibliothek, wie in meinem vorherigen Beitrag geschrieben. Das SDK besteht nur noch aus der Dokumentation (einschließlich Beispielen), einer jar-Datei und dem JavaFX-Plugin. Sie müssen das Plugin auf Ihrem Computer installieren, bevor Sie JavaFX verwenden können, aber irgendwann (wahrscheinlich um Java 7 oder 8 herum) wird JavaFX in die Standard-Java-Laufzeitumgebung integriert sein. Derzeit sind nur die Windows-Versionen des Plugins und des SDKs fertig und verfügbar. Die Windows-Version verwendet DirectX, während die Mac- und Linux-Versionen OpenGL verwenden, wie in der folgenden Abbildung zu sehen ist (entnommen aus JavaFX Architecture and Framework): Figure 1 JavaFX Architecture Diagram
Beschreibung von "Figure 1 JavaFX Architecture Diagram"
Nach dem, was ich auf der NLJug-Veranstaltung gehört habe, wird Windows immer noch am häufigsten verwendet und diese Version zuerst veröffentlicht. Versionen für andere Plattformen wie MacOS, Linux und andere werden folgen.
Ich habe JavaFX anhand einiger Beispiele in Netbeans ausprobiert. Normalerweise verwende ich Eclipse für die Entwicklung, aber da alle Beispiele Netbeans-Projekte sind und ich ziemlich faul bin, habe ich mich für eine andere IDE entschieden. Hinweis: Da es sich bei JavaFX um eine Bibliothek handelt, steht es Ihnen frei, eine andere IDE (oder die Befehlszeile) zu verwenden, um JavaFX zu nutzen. Das Kompilieren oder Ausführen einer JavaFX-Anwendung unterscheidet sich nicht vom Ausführen jeder anderen Java-Anwendung.
Das SDK enthält eine Menge lesenswerter Beispiele, die die Möglichkeiten von JavaFX demonstrieren und die verschiedenen Techniken erklären, die Sie verwenden können.
Hier sind einige Highlights:
- Sie müssen sich weniger Gedanken über Threads machen, als Sie es bei der Verwendung von Swing tun mussten: Der Thread für die Ereignisbehandlung ist vom Thread für die UI-Behandlung getrennt. In JavaFX gibt es drei Threads, die ihre Arbeit verrichten: Event Dispatch Thread - für die Behandlung von Ereignissen, der Renderer-Thread für das Rendern von Grafiken und der Media-Thread für die Wiedergabe von Medien.
Durch die Verwendung mehrerer Threads kann JavaFX die heute üblichen Multi-Core-Prozessoren besser nutzen.
Wenn Sie jedoch eine langwierige Operation innerhalb des Ereignisbehandlungsthreads haben, ist die Verwendung eines separaten Threads immer noch notwendig:
... // Inhalt erstellen imageView = new ImageView(); imageView.setImage(new Image(imageUrl, 241, 91, true, true, false)); Schaltfläche btn = new Schaltfläche("Drücken Sie mich"); btn.setOnAction(new EventHandler() { public void handle(ActionEvent ke) { //Die Benutzeroberfläche friert ein, da keine Ereignisse verarbeitet werden, aber zumindest kein neues Bild //mess wie in Swing Thread.sleep(1500); //InterupptedException Behandlung ausgelassen //Rendering wird in einem separaten Thread ausgeführt logo.imageView.setEffect(dropShadow); logo.setLayoutX(190); logo.setLayoutY(180); } }); - JavaFX bietet Möglichkeiten, sehr einfach Übergänge und verschiedene Effekte anzuwenden. Im folgenden Beispiel füge ich den Reflexionseffekt zu einem bestehenden Bildobjekt hinzu.
Reflection reflection = new Reflection(); reflection.setFraction(REFLECTION_SIZE); imageView.setEffect(reflection);
- Einfaches Binden von Eigenschaften. Alle Eigenschaften von JavaFx-Steuerelementen können gebunden werden. Das bedeutet, dass die Werte von zwei Eigenschaften aneinander gebunden werden können. Wenn sich eine Eigenschaft ändert, ändert sich auch die andere. Sie können zum Beispiel die x-Eigenschaft eines Steuerelements an die x-Eigenschaft eines anderen Steuerelements binden. Wieder etwas, das die Programmierung erheblich erleichtert. Im folgenden Beispiel bindet die Eigenschaft von die x- und y-Eigenschaft eines Kreisobjekts an das Logo-Objekt:
circle.centerXProperty().bind(logo.layoutXProperty()); circle.centerYProperty().bind(logo.layoutYProperty());
Wenn sich das Logo bewegt, oder genauer gesagt, wenn sich die x- oder y-Eigenschaft ändert, ändert sich auch der Kreis. Die Bindung erfolgt in diesem Fall in eine Richtung. Wenn ich die Methode bindBidirectional verwenden würde, würden die Aktualisierungen auch in die andere Richtung gehen. Sie können auch Ausdrücke in Bindungen verwenden:circle.centerXProperty().bind(logo.translateXProperty().add(10d));
- Animationen und andere zeitabhängige Effekte können mithilfe des Timeline-Objekts erstellt werden. Wenn sich etwas im Laufe der Zeit ändern soll, funktioniert die Timeline viel einfacher als Threads, Runnables, Jobs oder andere schwer zu verwendende Konzepte. In dem folgenden Beispiel verwende ich die Timeline, um die radiusProperty eines Schlagschattens zu erhöhen. Der Wert wird linear vom Startwert (in diesem Fall 0) bis zu 20 innerhalb eines Zeitrahmens von 4 Sekunden erhöht. Auch hier ist keine explizite Thread-Codierung erforderlich. Sie müssen keine Sperren setzen, keine flüchtigen oder synchronisierten Schlüsselwörter verwenden und auch keine anderen umständlichen Dinge tun.
KeyValue keyValue; KeyValue keyValue = new KeyValue(dropShadow.radiusProperty(), 20d, Interpolator.LINEAR); //erstellen Sie einen keyFrame mit der Dauer 4s keyFrame = new KeyFrame(Duration.valueOf(4000), keyValue); //Fügen Sie den Keyframe zur Zeitleiste hinzu timeline.getKeyFrames().add(keyFrame); logo.imageView.setEffect(dropShadow); timeline.play()
- Viele Standard-Steuerelemente, u.a. für Tabellen, Schaltflächen, Bäume und verschiedene Diagramme. Um sich schnell einen Überblick zu verschaffen, führen Sie das Ensemble-Projekt aus. Dieses Projekt enthält auch eine sehr gute Dokumentation, die Ihnen den Einstieg in JavaFX erleichtert.

- Swing und JavaFX können nebeneinander existieren. Sie können JavaFX-Steuerelemente innerhalb von Swing-Anwendungen verwenden. Wenn Sie viel Swing-basierten Java-Code haben, kann das ein großes Plus sein. Vielleicht muss Ihre Swing-Anwendung ja gar nicht zu einer Legacy-Anwendung werden:
JTable table = new JTable(tableModel); JTableHeader header = table.getTableHeader(); header.addMouseListener(new SampleTableSorter(table)); JScrollPane panel = new JScrollPane(table); panel.setPreferredSize(new Dimension(550,100)); frame.getContentPane().add(panel, BorderLayout.SOUTH); // javafx-Panel erstellen javafxPanel = new JFXPanel(); javafxPanel.setPreferredSize(new Dimension(550,400)); frame.getContentPane().add(javafxPanel, BorderLayout.CENTER); // JavaFX-Szene erstellen Platform.runLater(new Runnable() { public void run() { createScene(); } }); // Rahmen anzeigen frame.pack(); - Und nicht zuletzt kann JavaFX mit jeder Sprache für die JVM verwendet werden! Sie sind nicht gezwungen, in Java oder gar Javascript zu schreiben. Sie können JavaFX-Anwendungen mit
JRuby ,Scala oderClojure erstellen. Ich denke, dass einige der Funktionen von JavaFX sehr gut in eine (hybride) funktionale Sprache passen würden. Wenn Sie eine Rich-Internet-Anwendung erstellen möchten und nicht in Javascript oder Actionscript programmieren wollen, hilft Ihnen das JavaFX-Framework weiter:Hier ein Beispiel von der JavaFX-Seite. Wenn ich noch etwas Zeit habe, werde ich ein Beispiel in Scala erstellen.$zeit = Zeitleiste.neu $time.cycleCount = Zeitleiste::INDEFINITE $time.keyFrames << KeyFrame.new(Duration.valueOf(1000), refresh_time_handler) sleep(1 - (System.currentTimeMillis()%1000)/1000.0) $time.play()
- Browser-Integration - JavaFX-Anwendungen werden mithilfe des Java-Plugins in einem Browser ausgeführt. Das Java-Plugin wird aktualisiert, so dass die JavaFX-Laufzeitumgebung enthalten ist, wenn JavaFX nicht mehr im Beta-Stadium ist. Oracle investiert Zeit, um die Installation und Aktualisierung des Java-Plugins noch einfacher zu gestalten. Außerdem ist bei den meisten neuen Desktop-Plugins das Java-Plugin bereits vorinstalliert.
Wenn Oracle die Installation und Aktualisierung des Java-Plugins so einfach macht wie die des Flash-Plugins, könnte Java auf den Client zurückkehren. Der Vorteil, die Anwendung nicht für jede Art von Webbrowser testen zu müssen (da sie alle dasselbe Plugin verwenden), könnte den Nachteil überwiegen, ein Plugin verwenden zu müssen.
Verfasst von
Gerard van de Glind
Contact



