Grafische Benutzungsoberflächen
Nun werden wir uns mit der Erstellung von grafischen Benutzungsoberflächen (GUIs) beschäftigen. Bei der Erstellung von grafischen Benutzungsoberflächen nutzen wir in der Regel Benutzungsoberflächenbibliotheken, die uns vorgefertigte Komponenten wie Buttons und Textfelder zur Verfügung stellen. Diese Bibliotheken kümmern sich um das Zeichnen der Komponenten für uns, sodass wir nicht jede Komponente selbst zeichnen müssen, sondern diese lediglich zu unserem Programm hinzufügen.
Während bei textbasierten Oberflächen die Funktionalität mit einer bestimmten Art der Eingabe verknüpft ist, wird diese bei GUIs den Benutzungsoberflächenkomponenten hinzugefügt. Eine Programmiererin oder ein Programmierer kann zum Beispiel eine Methode zu einem Button hinzufügen, die ein Ereignis verarbeitet, das mit diesem Button verbunden ist.
Wir werden die Benutzungsoberflächenbibliothek JavaFX von Java verwenden, um unsere grafischen Benutzungsoberflächen zu erstellen. Die von uns entwickelten Anwendungen sind Desktop-Anwendungen.
Wir können ein einfaches Fenster mit JavaFX mit folgendem Programm erstellen.
package application;
import javafx.application.Application;
import javafx.stage.Stage;
public class JavaFxApplication extends Application {
@Override
public void start(Stage window) {
window.setTitle("Hei Maailma!");
window.show();
}
public static void main(String[] args) {
launch(JavaFxApplication.class);
}
}
Wenn das Programm gestartet wird, sieht es folgendermaßen aus.

Wenn die Methode launch aufgerufen wird, erstellt die Methode der Application-Klasse ein neues Objekt aus der angegebenen Klasse (hier JavaFxApplication) und ruft dessen Methode init auf. Die init-Methode ist in der Application-Klasse definiert und wird z. B. verwendet, um Objekte eines Programms zu initialisieren. Nach dem Aufruf der init-Methode ruft das Programm die start-Methode auf, die ein Stage-Objekt als Parameter erhält, das das Fenster beschreibt. In der Implementierung der oben stehenden start-Methode setzt die Methode setTitle den Titel des Stage-Fensterobjekts, das als Parameter übergeben wurde. Anschließend wird die Methode show aufgerufen, was dazu führt, dass das Fenster angezeigt wird. Das Programm bleibt dann in einem Zustand, in dem es kontinuierlich auf Ereignisse der Benutzungsoberfläche wartet, z. B. das Schließen des Fensters, was zur Beendigung der Anwendung führt.
Aufbau einer Benutzungsoberfläche
Grafische Benutzungsoberflächen bestehen aus drei wesentlichen Teilen. Das Stage-Objekt fungiert als Fenster des Programms. Einem Stage-Objekt wird eine Scene-Objekt zugewiesen, das eine "Szene" innerhalb des Fensters darstellt. Das Scene-Objekt enthält wiederum ein Objekt, das für das Anordnen der zur Szene gehörenden Komponenten verantwortlich ist (wie FlowPane), das die eigentlichen Benutzungsoberflächenkomponenten enthält.
Das folgende Programm erstellt eine Oberfläche mit einem einzelnen Button (Tämä on nappi = Das ist ein Button/Knopf).
package application;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.FlowPane;
import javafx.stage.Stage;
public class JavaFxApplication extends Application {
@Override
public void start(Stage window) {
Button button = new Button("Tämä on nappi");
FlowPane componentGroup = new FlowPane();
componentGroup.getChildren().add(button);
Scene scene = new Scene(componentGroup);
window.setScene(scene);
window.show();
}
public static void main(String[] args) {
launch(JavaFxApplication.class);
}
}
Die Anwendung sieht folgendermaßen aus.

Benutzungsoberflächenkomponenten werden als "Kinder" des für ihre Anordnung zuständigen Objekts hinzugefügt – in diesem Fall FlowPane. Dies ist Teil einer Designentscheidung von JavaFX, bei der jedes Objekt, das für die Anordnung von Benutzungsoberflächenkomponenten zuständig ist, andere Objekte enthalten kann, die ebenfalls für die Anordnung von Benutzungsoberflächenkomponenten zuständig sind, sowie die eigentlichen Benutzungsoberflächenkomponenten. Dies ermöglicht grafische Benutzungsoberflächen, bei denen das Layout der Benutzungsoberflächenkomponenten von ihrer Position auf der Benutzungsoberfläche abhängt. Zum Beispiel werden Menüelemente, die sich oben auf einer Benutzungsoberfläche befinden, normalerweise nebeneinander angeordnet, während Listenelemente untereinander platziert werden.
Zusammengefasst sieht die Struktur der Benutzungsoberfläche folgendermaßen aus: Das Fenster enthält ein Scene-Objekt. Das Scene-Objekt enthält das Objekt, das für die Anordnung der Benutzungsoberflächenkomponenten zuständig ist. Das für die Anordnung zuständige Objekt kann sowohl Benutzungsoberflächenkomponenten als auch andere Objekte zur Anordnung von Komponenten enthalten.