Java und Swing
Willemers Informatik-Ecke
Java Java-Kurs Grafikprogrammierung

Swing ist der zweite Anlauf für eine grafische Oberfläche für Java. Da Java portabel ist, laufen auch Swing-Anwendungen auf jeder Plattform, die eine Laufzeitumgebung (JRE) für Java hat.

Als etwas größeres Anschauungsprojekt für den Java-Kurs auf diesen Seiten finden Sie das Spiel CodeKnacker und darauf aufbauend eine zwei Varianten für Swing.

Module für Swing

Seit Java 9 wird die Laufzeitumgebung in Module gegliedert. Ziel ist es, dass der Start von Java-Programmen nicht haufenweise Bibliotheken lädt, die es später nie benötigt.

Dazu muss ein Projekt anmelden, welche Module benötigt werden. Dazu liegt dem Projekt die Datei module-info.java bei.

Für Swing-Programme muss das Modul java.desktop angefordert werden.

module MeinProjektName {
    requires java.desktop;
}
Hinter dem Schlüsselwort module muss der Name des Projekts genannt werden.

JFrame

Das Swing-Programm benötigt zunächst einen Rahmen, also ein Fenster. Die Klasse JFrame stellt ein solches Fenster zur Verfügung.

Erzeugen eines Fensters

Die Bibliotheken für Swing finden Sie in dem Package javax.swing, das Sie zu Anfang des Programms importieren müssen.
import javax.swing.JFrame;

public class MeinSwing {
    public static void main(String[] args) {
        JFrame fenster = new JFrame("Kleines Fenster"); 
        fenster.setSize(400, 300);
        fenster.setVisible(true);
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
Das Beispielprogramm erzeugt ein Objekt der Klasse JFrame, positioniert es, zeigt es an und bereitet die Möglichkeit vor, das Programm über die Schließbox zu verlassen.

JFrame erweitern

Niemand hat Spaß an einem leeren, grauen Fenster ohne Inhalt. Langfristig soll sich das auch ändern. Wenn das Programm einen eigene Version von JFrame erzeugen will, ist es der bessere Weg, ein eigenes JFrame zu bauen. Dazu wird das objektorientierte Konzept der Vererbung genutzt und beispielsweise eine eigene Klasse namens MeinFrame zu erstellen, die JFrame erweitert.

Das Sichtbarmachen und die anderen Aktivitäten verlagern wir in den Konstruktor von MeinFrame. Das Hauptprogramm wird so sehr schlank.

public class ErsterSwing {
    public static void main(String[] args) {
        MeinFrame fenster = new MeinFrame();
    }
}

Genau genommen könnte man die eine Zeile sogar soweit reduzieren, dass nur noch new MeinFrame(); dasteht, da die Referenz gar nicht benötigt wird.

Die Unterschiede zwischen MeinFrame und JFrame wurden bisher durch Methodenaufrufe über fenster realisiert. Diese werden nun im Konstruktor abgelegt, der bei Entstehung des Objekts immer durchlaufen wird. Um nun auf das Fenster zuzugreifen, wird über this zugegriffen, da MeinFrame ja eine erweiterte Form von JFrame ist.

import javax.swing.JFrame;

public class MeinFrame extends JFrame {
    public MeinFrame() {
        this.setSize(400, 300);
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
Prinzipiell können Sie die Methode main auch in die Klasse MeinFrame übernehmen, da jede Klasse eine main-Methode enthalten kann. Dann können Sie die Klasse MeinFrame direkt starten und benötigen die Klasse ErsterSwing nicht mehr.
import javax.swing.JFrame;

public class MeinFrame extends JFrame {
    public MeinFrame() {
        this.setSize(400, 300);
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    
    public static void main(String[] args) {
        new MeinFrame();
    }
}

Methoden

Die Klasse JFrame stellt einige Methoden zur Verfügung, von denen wir einige schon verwendet haben.

setSize(int a, int b)
setzt Breite und Höhe
setLocation(int a, int b)
setzt Position auf a, Höhe auf b
setTitle(String s)
setzt s als Fensterüberschrift in den Verschiebebalken
setVisible(boolean b)
macht den JFrame sichtbar oder unsichtbar
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
führt zum Beenden der Anwendung, wenn das Schließkreuz angeklickt wird.

Weiterführende Themen


Java Grafikprogrammierung