EAD II – Übung 5
Graphische Benutzungsoberfläche mit BlueJ
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
getContentPane().add(zeitanzeige);
oder man erstellt eine Variable vom Typ Container
und weist dieser den Rückgabewert von
getContentPane() zu (einfacher lesbar)
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);
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());
}
}
);