Blog

JavaFX 2.0 beta

Gerard van de Glind

Aktualisiert Dezember 5, 2025
8 Minuten

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 Es folgt eine Beschreibung von Abbildung 1 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 oder Clojure 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.
Mein Versuch mit JavaFX ist ebenfalls auf GitHub verfügbar. Javascript und HTML5? Seit dem Vormarsch von HTML5 und verschiedenen clientseitigen Javascript-Frameworks wie JQuery und dem neuen Canvas-Element-Control ist es auch möglich, fortgeschrittene grafische Anwendungen in Javascript zu erstellen. Wenn Sie JavaFX verwenden, sind Sie jedoch nicht auf eine Sprache festgelegt. Sie können sowohl das Backend als auch das Frontend in ein und derselben Programmiersprache Ihrer Wahl erstellen. Der Nachteil ist natürlich, dass Sie auf ein Plugin im Browser angewiesen sind. Mobile und andere Plattformen Die aktuelle Beta ist nur für Windows verfügbar. Nach dem, was ich gehört habe, und nach dem, was auf der Website steht, sollten bald auch Versionen für MacOS und Linux erscheinen. Vorerst gibt es keine mobile Version von JavaFX. Da JavaFX 1 ursprünglich für den Einsatz auf Mobiltelefonen, Fernsehgeräten, Set-Ops und vielen anderen Plattformen gedacht war, ist das etwas seltsam.Den meisten Mobiltelefonen fehlt zwar die hardwarebeschleunigte Grafik, die für die Verwendung von JavaFX erforderlich ist, aber viele moderne Tablet-Geräte verfügen über hardwarebeschleunigte OpenGL-Unterstützung. Ich gehe davon aus, dass nach der Veröffentlichung von JavaFX 2 bald auch Versionen für andere Plattformen als Desktop-PCs und Macs folgen werden. Update um 21:53 Uhr JavaFX wird nach Angaben des Hauptentwicklers auch für andere Plattformen als die drei großen (Windows, Mac und Linux) verfügbar sein. Grafiken Und zu guter Letzt, warum sollten Sie sich für Programme mit fortschrittlichen Grafiken interessieren? Sind bestehende Web-Frameworks wie Wicket, GWT, JSF, Liftweb oder Rails nicht gut genug? Diese Frameworks eignen sich alle sehr gut für die Erstellung von CRUD-Anwendungen: Software zur Anzeige und Eingabe von Daten aus und in eine Datenbank unter Verwendung verschiedener Arten von Formularen und Tabellen. Wenn Sie enorme Datenmengen anzeigen müssen, die in Big-Data-Systemen erzeugt oder enthalten sind, reichen diese Frameworks nicht aus. Was ist, wenn Sie Millionen von Datensätzen haben? Dafür können Sie keine blätterbare Tabelle erstellen - Sie brauchen viel fortschrittlichere grafische Anwendungen. Sie könnten z.B. dynamische Diagramme verwenden, um Millionen von Transaktionen zu visualisieren oder einem Benutzer die Möglichkeit geben, komplexe Daten durch einfaches Berühren des Bildschirms oder Bewegen der Maus zu manipulieren. Fazit Oracle hat viel Zeit und Mühe in JavaFX investiert, und soweit ich das beurteilen kann, handelt es sich um eine ernstzunehmende Software. Hoffentlich gibt es bald auch Versionen für MacOS und Linux. Wenn Sie umfangreiche grafische Anwendungen erstellen möchten, ist JavaFX einen Blick wert.

Verfasst von

Gerard van de Glind

Contact

Let’s discuss how we can support your journey.