Java | 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.
Zwar erklärte Oracle, dass Swing durch Java FX abgelöst wird. Ob dies allerdings gelingt, ist noch nicht sicher. Der Charme von Swing ist, dass dessen API besonders einfach zu verstehen ist und damit ein guter Ausgangspunkt für alle, die den Umgang mit grafischen Oberflächen lernen wollen.
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 \datei{module-info.java} bei.
Für Swing-Programme muss das Modul \ident{java.desktop} angefordert werden. \begin{verbatim} module MeinProjektName { requires java.desktop; } \end{verbatim} 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
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); } }
- JFrame fenster = new JFrame("Kleines Fenster");
Ein JFrame wird erzeugt und wird auch sofort aktiv. Die Titelzeile lautet Kleines Fenster. - fenster.setSize(400, 300);
Das Fenster wird auf 400 mal 300 Pixel aufgeblasen. An sich würde es nur den Raum einnehmen, den der Inhalt benötigt. Da es keinen Inhalt gibt, wäre das Fenster so klein, dass es kaum zu finden wäre. - fenster.setVisible(true);
Standardmäßig ist ein JFrame unsichtbar. Erst durch diesen Aufruf wird es sichtbar. - fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Man erwartet, dass die Schließbox das Programm beendet. Das ist aber nicht das normale Verhalten von JFrame, da es ja möglich ist, dass eine Anwendung mehrere JFrames öffnet. Also muss das automatische Enden der Anwendung durch das Schließen des Fensters explizit eingebaut werden.
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, JFrame beispielsweise zu MeinFrame zu erweitern. 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.
Schauen wir uns MeinFrame an. Die bisherigen Methodenaufrufe über fenster erfolgen nun über this, 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
- 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
- Grafik
- Maus, Tastatur und Fenster: Ereignisbehandlung in Swing
- Hinzufügen und Anordnen von Kontrollelementen: Swing-Layouts
Java | Grafikprogrammierung |