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 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, 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
- Grafik
- Maus, Tastatur und Fenster: Ereignisbehandlung in Swing
- Hinzufügen und Anordnen von Kontrollelementen: Swing-Layouts
Java | Grafikprogrammierung |