Einstieg

JavaFX ist (nach dem Willen von Oracle) die Standard - Plattform für Rich Client Anwendungen. Hier sind sowohl Web-Anwendungen als auch Desktop Anwendungen gemeint, wobei JavaFX auch das Swing - Framework ablösen soll, welches nun als deprecated gilt. Swing wird zwar weiterhin von Oracle unterstützt und ist Bestandteil der Java SE Distribution, aber es wird nicht weiterentwickelt. Die aktuelle Version ist JavaFX 8. Seit der Version 8 sind die Versionsnummern von JavaSE und JavaFX vereinheitlicht worden. Da JavaFX zwar damals von Sun stark promotet wurde aber nicht weit vorangetrieben wurde ist der Versionszweig 2 von JavaFX eher als ein 1er Versionszweig zu sehen.

Wer sich noch (fast) gar nicht mit JavaFX beschäftigt hat, dem seien folgende Links ans Herz gelegt, um einen ersten Eindruck von JavaFX zu erhalten:

Voraussetzungen

JavaFX ist Bestandteil des JDK ab der Java SE Version 7 update 6. Wer noch mit Java 6 arbeitet, hat die Möglichkeit JavaFX separat zu installieren, wobei nur eine Windows Version zur Verfügung steht. JavaFX für Java 6 kann von der Seite http://www.oracle.com/technetwork/java/javase/downloads/javafxjdk6-1728173.html heruntergeladen werden. Bevor JavaFX für Java 6 installiert wird, empfiehlt es sich, die aktuellste (Java 6) Version zu installieren.

Um JavaFX-Anwendungen aus der Kommandozeile heraus kompilieren zu können, müssen wir die Datei jfxrt.jar zuvor in unseren Classpath aufnehmen. Diese Datei befindet sich im JDK-Unterverzeichnis jre/lib.

Um mit Eclipse (Luna) und JavaFX 8 sauber arbeiten zu können ist eine Installtion des e(fx)clipse Flagge Großbritanien PlugIns erforderlich.

Hello World!

JavaFX ist keine eigenständige Programmiersprache sondern seit Java 7 (update 6) Bestandteil des JDK. Doch ist ein vernünftiger Einstieg in Java FX ein "Hello World!"-Programm, wie es als Einstieg in diverse Programmiersprachen dient.

Die nachfolgende Klasse ist unsere "main"-Klasse und dient dem Start der nachfolgenden JavaFX Klasse.

import javafx.application.*;

public class MyMainClass {

  public static void main(String[] args) {
    Application.launch(MyMainView.class);
  }
}

itmapa.de - X2H V 0.20

Die nachfolgende Klasse ist die eigentlich zu startende JavaFX-Klasse.

import javafx.application.*;
import javafx.event.*;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.paint.*;
import javafx.stage.*;

public class MyMainView extends Application {

  @Override
  public void start(Stage stage) throws Exception{
    Group root = new Group();
    Scene scene = new Scene(root, 300, 250, Color.BLACK);
    
    Button button = new Button();
    button.setLayoutX(100);
    button.setLayoutY(80);
    button.setText("Hello World!");
    
    button.setOnAction(new EventHandler<ActionEvent>() {
      public void handle(ActionEvent event) {
        System.out.println("Hello World!");
      }
    });
    root.getChildren().add(button);
    
    stage.setScene(scene);
    stage.setTitle("Hello world example!");
    stage.show();
  }
}
itmapa.de - X2H V 0.21

Vorausgesetzt, die beiden Dateien befinden sich im selben Verzeichnis und jfxrt.jar befindet sich im Classpath (siehe oben), so können wir unser Programm mit dem Befehl javac *.java kompilieren. Ausführen tun wir unser Programm mit dem Befehl java MyMainClass.

Die Ausführung des Programms führt zur Anzeige folgendes Fensters.

JavaFX Hello world!

Bei mir, als "alter Zu-Fuß-Swing-Entwickler", erzeugt dieses kleine Beispiel ein wenig Beruhigung. Der Quelltext ist Swing doch recht ähnlich. OK, es sieht ein wenig wie NullLayout aus (sollte man nicht von Hand verwenden), aber mal sehen was folgt.

FXML - Einstieg

Gerade noch über die Swing Ähnlichkeit gefreut stolpert man im Zusammenhang mit JavaFX schnell über FXML. FXML ist die Möglichkeit, JavaFX Oberflächen im XML-Stil zu definieren. Angst vor einem Technologiebruch braucht man jedoch nicht zu haben, da FXML im Zusammenhang mit JavaFX von den gängigen IDE's (Eclipse, Netbeans, IntelliJ (12.1)) unterstützt wird. Auch existieren für FXML GUI-Builder, mit der man die Oberfläche "zusammenklicken" kann.

Ohne jetzt zu tief ins Detail zu gehen, wollen wir uns zunächst ein "Hello world" mit FXML ansehen. Als Erstes folgt die FXML-Datei, welche das Layout spezifiziert. Im Anschluss folgt der Java-Quelltext, welcher das zu startende Programm darstellt.

<?xml version="1.0" encoding="UTF-8"?>
 
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
 
<FlowPane xmlns:fx="http://javafx.com/fxml"
          prefHeight="100" prefWidth="100">         
  <Text text="Hello world!"/> 
</FlowPane>
itmapa.de - X2H V 0.20

import java.io.IOException;
 
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
 
 
public class MyApp extends Application {

  public static void main(String[] args) {
    launch(args);
  }
          
  public void start(Stage primaryStage) throws IOException {
    Parent root = FXMLLoader.load(getClass().getResource("ui.fxml"));
    Scene scene = new Scene(root);
    primaryStage.setScene(scene);          
    primaryStage.show();
  }
}
itmapa.de - X2H V 0.20

Die "FXML Hello world" Anwendung können wir wie gewohnt aus der Kommandozeile aus mit javac *.java. Davon ausgegangen, dass sich beide Dateien im selben Verzeichnis befinden können wir unsere Anwendung mit java MyApp von der Kommandozeile aus starten.

Die Ausführung des Programms führt zur Anzeige folgenden Fensters.


FXML Hello world

Einordnung in die Java Plattform

In einer Präsentation von Jai Suri (Product Manager Oracle) wird JavaFX in die Java-Plattform eingegliedert. Die nachfolgende Grafik entspricht der, welche Jai Suri verwendet hat. Wie man sieht, steht JavaFX direkt neben JavaEE, was die Wertigkeit von JavaFX für Oracle verdeutlicht.

Einordnung in die Hava Plattform
______________________________
1 Vergleiche Overview JavaFX - Where does JavaFX fit in the Java platform? (3:12) Flagge Großbritanien