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