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()); } } );