EAD II – Übung 5
Graphische Benutzungsoberfläche mit BlueJ
Java GUI Überblick
Java GUI erste Schritte
! Fenster erzeugen
! Elemente in Container des Fensters einfügen
! Größe und andere Eigenschaften der Elemente
festlegen
! Fenster sichtbar machen
Graphische Benutzungsoberfläche (GUI)
! Fenster, das weitere Komponenten zur Darstellung
und Interaktion enthält
! spezielle Standardbibliotheken erforderlich, die
importiert werden müssen
import javax.swing.*;
import java.awt.*;
! über Interaktion mit den Komponenten können
Methoden aufgerufen werden
! bisher: Interaktion nur über Rechtsklick auf Klassen
und Objekte in BlueJ
Bestandteile von GUIs
! Komponenten werden durch Objekte repräsentiert
! z.B. Labels zur Anzeige von Text, Textfelder, in die
Nutzer etwas eingeben können
! Buttons können angeklickt werden und durch
weitere Verknüpfung Methoden aufrufen
! Layout der Komponenten auf dem Bildschirm wird
durch Layoutmanager kontrolliert
! Ereignisverarbeitung sorgt dafür, dass das
Programm auf Nutzereingaben (wie Klick auf
Button) reagiert
Komponenten
! JFrame: oberflächenunabhängiges Fenster
http://www.dpunkt.de/java/Referenz/Das_Paket_javax.swing/175.html
! Container: abstrakte Klasse, die Komponenten
zusammenfasst
http://www.dpunkt.de/java/Referenz/Das_Paket_java.awt/37.html
! JButton: implementiert einen drückbaren Button
http://www.dpunkt.de/java/Referenz/Das_Paket_javax.swing/100.html
! JLabel: zeigt unveränderbaren Text oder Graphik an
http://www.dpunkt.de/java/Referenz/Das_Paket_javax.swing/147.html
Fenster erzeugen und Zeit darstellen
! neue Klasse erzeugen, die für die GUI zuständig ist
! Klasse soll von JFrame abgeleitet werden, damit sie
alle Eigenschaften und Methoden davon erbt
public class GUI extends JFrame
! alle geplanten Komponenten als Instanzvariablen
deklarieren
private JLabel zeitanzeige;
! im Konstruktor der Oberfläche die Instanzvariablen
erzeugen
zeitanzeige = new JLabel();
Fenster darstellen und Uhrzeit anzeigen
! zur Darstellung einer Uhrzeit braucht die Oberfläche
Zugriff auf eine Uhr
! braucht also ein Objekt Uhr, mit dem sie
interagieren kann
! Instanzvariable vom Typ Uhrenanzeige deklarieren
und im Konstruktor erzeugen
private Uhrenanzeige meineUhr;
meineUhr = new Uhrenanzeige();
Fenster darstellen und Uhrzeit anzeigen
! Komponenten müssen nach der Erzeugung noch
dem Inhaltsbereich des Fensters hinzugefügt werden
! Variable für den Inhaltsbereich erzeugen und dann
mit add() Komponenten hinzufügen
private Container inhalt;
inhalt = new Container();
inhalt = getContentPane();
inhalt.add(zeitanzeige);
Fenster darstellen und Uhrzeit anzeigen
! Fenster muss noch sichtbar gesetzt werden (im
Konstruktor)
setVisible(true);
! sinnvolle Ergänzungen:
Größe setSize(100,100);
Farbe inhalt.setBackground(Color.blue);
! für Farbe siehe auch Übung 2, Farbe als Parameter
übergeben:
Color farbe = new Color(120, 200, 0);
inhalt.setBackground(farbe);
Beispiel Uhr: Konstruktor
zeitanzeige = new JLabel();
meineUhr = new Uhrenanzeige();
inhalt = new Container();
inhalt = getContentPane();
inhalt.setLayout(new GridLayout(2,2));
setSize(100,100);
Color farbe = new Color(120, 200, 0);
inhalt.setBackground(farbe);
inhalt.add(zeitanzeige);
zeitanzeige.setText(meineUhr.getZeitanzeige());
setVisible(true);
Button und Ereignisverarbeitung
! sollen weitere Komponenten im Fenster platziert
werden, muss ein Layout eingerichtet werden
! Buttons für Interaktivität
! Ereignisverarbeitung muss beschrieben werden: was
genau soll passieren, wenn ein Button angeklickt
wird?
! Button muss auf Ereignisse warten, das muss
aktiviert werden
Layout: Grid-Layout
! Layout inhalt.setLayout(new
GridLayout(1,2)); (1 Zeile, 2 Spalten)
! Komponenten werden in einem Gitter aus gleich
großen Zellen angeordnet
! Breite bzw. Höhe entspricht der breitesten/höchsten
Komponente
! Abstand zwischen Zellen standardmäßig 0, kann im
Konstruktor eingestellt werden
! Zellen werden von oben links nach unten rechts
gefüllt
Button hinzufügen
! Instanzvariable erstellen, im Konstruktor erzeugen
und zum Container hinzufügen:
private JButton button1;
button1 = new JButton("Taktsignal");
inhalt.add(button1);
Ereignisverarbeitung
! Objekt kann auf Ereignisse „lauschen“ mit einem
EventListenerInterface
! braucht dazu ein weiteres Package
import java.awt.event.*;
! Button löst ein ActionEvent aus, wenn er gedrückt
wird
! für Button muss eine eigene Listener-Klasse erstellt
werden, die auf die Ereignisse von genau diesem
Button „lauscht“
Listener für Button
button1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
meineUhr.taktsignalGeben();
zeitanzeige.setText(meineUhr.getZeitanzeige());
}
}
);