Beispiel aus Schulungsunterlagen für Java


Grafische Oberflächen - Swing

<<  Index

Fenster und Inhalte

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:


Swing-Komponenten eines Fensters

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


Aufbau der Swing-Komponenten für ein Fenster

Um ein benutzbares Fenster für eine Anwendung zu erzeugen, muß man im einfachsten:

  1. Ein JFrame-Objekt erzeugen
  2. Das Container-Objekt mit dem Content pane des Frame-Objekts holen
  3. Ein JPanel-Objekt erzeugen und dem Content-Pane Container hinzufügen

In 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:


Ausgabe von HalloGUI.java

Übersicht der Klasse Graphics

Die 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

Übersicht Swing-Klassen

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.


Das Java Lehrbuch zu Swing

Programme: HalloGUI.java, TextView.java, DataView.java, Webdb.java

<<  Index


© by arxio GmbH, Januar 2003