Der Aufbau eines Fensters mit Swing ist relativ komplex. Basiselement ist ein JFrameObjekt. Ein JFrame enthält immer ein Objekt der Klasse JRoot, um das man sich normalerweise nicht weiter kümmern muß. Das Root Pane existiert, um weitere Objekte zu beinhalten und zu managen:

Als Anwendungsprogrammierer hat man normalerweise mit dem Frame, dem Content pane und dem Menübalken zu tun:

Um ein benutzbares Fenster für eine Anwendung zu erzeugen, muß man im einfachsten:
JFrame-Objekt erzeugenContainer-Objekt mit dem Content pane des Frame-Objekts holenJPanel-Objekt erzeugen und dem Content-Pane Container hinzufügenIn das JPanel-Objekt kann nun Text und Grafik ausgegeben werden, in dem weitere Objekte von Klassen wie JTextArea zum JPanel-Objekt hinzugefügt werden.
Die wichtigste Methode eines JPanel Objekts ist paintComponent. Immer wenn das GUI-System den Fensterinhalt neu zeichnen muß, wird paintComponent aufgerufen. Durch Aufrufen der Methode repaint läßt sich ein Neuzeichnen der Komponente auch direkt auslösen. Als Parameter bekommt die Methode ein Objekt der Klasse Graphics geliefert, das die Zeichenfläche der Komponente repräsentiert.
// Programm HalloGUI.java import java.awt.*; import java.awt.event.*; import javax.swing.*; class MeinInhalt extends JPanel { public void paintComponent(Graphics g) // Zeichnet Fensterinhalt { super.paintComponent(g); // Superklasse zeichnet Hintergrung usw. // Graphics stellt viele Methoden zum zeichnen und zur Textausgabe bereit g.drawString("Hallo, ich bin ein Java-Programm mit Swing!", 50, 100); } } class MeinFrame extends JFrame { // Default Constructor public MeinFrame() { setTitle("Java-Anwendung mit Swing"); // Titel des Fensters setSize(300, 200); // Fensterabmessungen in Pixeln // Event-Listener hinzufügen // WindowAdapter ist eine Utility-Klasse, die ein WindowListener Interface implementiert. // Alle Methoden von WindowAdapter tun nichts, um eigenes Verhalten zu ermöglichen // werden einfach die gewünschten Methoden redefiniert. // Anonymous inner class - new und Klassendefinition in einem Schritt! addWindowListener(new WindowAdapter() { // Uns interessiert nur das durch [x] ausgelöste Event zum Schliessen des Fensters public void windowClosing(WindowEvent e) { System.exit(0); // Programm beenden } }); } Container contentPane = getContentPane(); // Content pane Objekt des Frames holen contentPane.add(new MeinInhalt()); // Fensterinhalt erzeugen und hinzufügen } public class MeineAnwendung { public static void main(String[] args) { JFrame frame = new MeinFrame(); // Fenster erzeugen frame.show(); // Fenster anzeigen } }
Und so sieht das erzeugte Fenster aus:

GraphicsDie eigentliche Ausgabe des Inhalts einer Anwendung erfolgt über Methoden der Klasse Graphics oder ihre verbesserte Subklasse Graphics2D. Graphics - Objekte funktionieren wie eine State-Machine, das bedeutet, mit Methoden wie zum Beispiel setColor wird die Zeichenfarbe eingestellt, die dann für alle nachfolgenden Zeichenoperationen erhalten bleibt, setClip setzt eine Clipping-Region, die alle nachfolgenden Zeichnungen beschneidet usw.
| Methode | Beschreibung |
|---|---|
drawArc, draw Line, drawOval, draw Polygon, drawRect ... |
Methoden zum Zeichnen geometrischer Umrisse |
drawImage |
Rasterbild vom Typ Image zeichnen |
drawString |
Textstring ausgeben |
fillArc, fillOval, fillPolygon, fillRect ... |
Methoden zum Zeichnen gefüllter geometrischer Flächen |
setClip |
Aktuelle rechteckige oder frei geformte Clipping-Region setzen |
setColor |
Aktuelle Zeichenfarbe setzen |
setFont |
Aktuellen Schrifttyp setzen |
Die Tabelle zeigt typische Swing-Klassen und deren Funktion. Zu allen Arten von GUI-Features gibt es Klassen oder Klassengruppen. Die meisten Swing-Klassen sind dazu gedacht, als Superklassen für Eigenentwicklungen zu dienen. Dadurch sind alle denkbaren GUI-Oberflächen realisierbar, der Programmieraufwand kann aber beträchtlich sein, und der Ressourcenverbrauch für Swing ist hoch.
| Klasse | Beschreibung |
|---|---|
JFrame |
Grundgerüst eines Fensters |
JPanel |
Behälter für Fensterinhalte |
JMenu |
Ein Menü, beinhaltet JMenuItm unf JSeparator Objekte |
JButton |
Repräsentiert einen Button |
JTextField |
Einzeilige Textzeile für Ein-/Ausgabe |
JTextArea |
Mehrzeilige Textzeile Ein-/Ausgabe |
JScrollBar |
Repräsentiert einen Scrollbar |
JFileChooser |
Komponente zur Auswahl von Dateien |
Das Swing-Package enthält über 100 Klassen für GUI-Elemente und Hilfsfunktionen wie die Auswahl eines Look-and-Feel Schemas. Außerdem werden 25 Interfaces und viele Exceptions definiert. Für eine kleine Einführung in Swing und Beispiele findet sich bei Sun unter User Interfaces that Swing: A Quick Start Guide, ein Umfangreiches Tutorial unter Creating a GUI with JFC/Swing. Außerdem ist ein Programmierhandbuch The JFC Swing Tutorial erhältlich, daß im Wesentlichen dem Online-Kurs entspricht.
