Graphische Oberflächen bauen in Java

Viele Anwender von Software heutzutage benutzen in ihrem alltäglichen Workflow nur noch Programme mit einer graphischen Oberfläche. Man könnte sogar behaupten, dass viele Benutzer heutzutage nicht mehr in der Lage sind Programme auf einer Konsole auszuführen.Für den Bau von einer GUI oder einer graphischen Oberfläche in Java gibt es folgende Standard Klassen:

  • AWT: Ist unübersichtlich und wieder sehr oft überarbeitet. Viele Methoden lassen sich heute mit aktuelleren Java Versionen nur noch eingeschränkt verwenden (“deprecated”). Du importierst diese Klasse über den Befehl: import java.awt.* .
  • SWING: Neuere Version von AWT. Ist gut strukturiert und ermöglicht eine einfache Implementierung von Fenstern. Swing erbt von AWT. Du importiertst diese Klasse über den Befehl: import javax.swing.*.

Um in Java GUIs zu implementieren benötigt es den Aufruf folgender Befehle:

  • AWT (Frame)
  • Swing (JFrame)

Wichtig ist hierbei zu merken, dass JFRAME als Klasse von Frame erbt. Aus diesem Grund lassen sich viele Ähnlichkeiten von SWING und AWT feststellen. Außerdem ist es bei der Verwendung von AWT und SWING sinnvoll, die implementierung von GUIs in zwei Klassen zu organisieren. Es sollte eine Designklasse geben, in der das Aussehen des Fensters festgelegt wird. Neben der Designklasse gibt es noch eine Steuerungsklasse, die dann den Konstruktor von der Designklasse aufruft, um ein Fenster zu erstellen. Beim Design des Fensters muss man quasi alles selber machen. Drag and Drop kennt Java in diesem Bezug leider nicht.

Der Weg zum ersten eigenen Fenster

Es müssen also alle Textfelder, Buttons, Labels usw. einzeln deklariert werden. Im nächsten Schritt erfolgt die Initialisierung eines sogenannten Listeners. Man benötigt Listerner, um auf die getätigten Aktionen eines Benutzers reagieren zu können. Hierfür wird ein Interface verwendet, das den Namen “ActionListener” trägt. Mit diesem Listener lassen sich Eingaben und Klicks im Fenster abfangen. Ein ActionListener hört auf ein bestimmtes Event, was bedeutet, dass du für jeden Klick und jede Aktion des Benutzers einen “ActionEvent” benötigst. Der ActionListener” hat genau eine Methode mit dem Namen “actionPerformed”, die du in deinem ActionListener aufrufen musst. Im nächsten Schritt werden die Elemente pixelgenau im späteren Fenster positioniert.

Schritt 1

Zuerst erfolgt die Überladung des Standardkonstruktors, die Deklaration und Implementierung der einzelnen Elemente des Fensters. Dies geschieht über:

Schritt 2

Nun ist es an der Zeit die ActionListener für die beiden Buttons zu initialisieren.Die Initialisierung erfolgt in der Methode “FensterAnmelden()” Wir werden nur für die beiden Buttons einen ActionListener definieren, da der Benutzer in dem Textfeld keine Eingaben machen kann, die eine Aktion auslösen. Der Button mit dem Namen “Aktion1” soll durch einen Klick “Hallo Benutzer” in das Textfeld schreiben. Der andere Button mit dem Namen “Aktion2” soll das Fenster wieder schließen. Hierbei gehen wir folgendermaßen vor:

Schritt 3

Im nächsten Schritt müssen die Elemente im Fenster angeordnet werden. Man sollte hier schon grob wissen, welche Abmessungen das spätere Fenster haben soll (in Pixeln). Die Größe des Fensters wird nämlich in der Steuerungsklasse festgelegt. Die Positionierung der Elemente erfolgt in der Methode “FensterAnmelden()”.Du gehst hierbei  folgendermaßen vor:

Schritt 4

Nun müssen wir nur noch die einzelnen Elemente auf dem Panel positionieren.  Du meldest in diesem Schritt deine Elemente auf dem Panel an. Dies machst du folgendermaßen:

Schritt 5

Du hast nun alle Elemente angemeldet nun müssen wir nur noch die Methode “aktion1geklickt()” programmieren. Wir gehen hierbei folgendermaßen vor:

Schritt 6

So nun bist du mit dem Fenster bauen fertig. Nun müssen wir nur noch das Fenster in der Steuerungsklasse aufrufen. Hierbei gehen wir folgendermaßen vor:

Wenn du das Programm nun ausführst müsste dein Fenster so aussehen: