Graphische Benutzungsoberflächen Graphische Benutzungsoberflächen (graphical user interfaces, GUI) dienen zur interaktiven Bedienung von Programmen, Ein- und Ausgabe mit graphischen Techniken und visuellen Komponenten SWE-86 Javas Standardbibliothek jawa.awt (abstract windowing toolkit) enthält wiederverwendbare Klassen zur Implementierung und Benutzung der wichtigsten GUI-Komponenten: Graphik GUI-Komponenten (siehe SWE-84) Plazierung, Layoutmanager Ereignisbehandlung (java.awt.event) Bildmanipulation Vorlesung Software-Entwicklung / Folie 86 Thema einführen Beispiel erläutern interaktive E/A statt Eingabeströme Interaktion mit graphischen Objekten Wiederverwendung aus der AWT-Bibliothek Judy Bishop: Java lernen, 3.Aufl., Abschnitt 10.1 Welche Ein- und Ausgaben sowie Ereignisse erkennen Sie an dem Beispielbild?
Graphische Darstellung von AWT-Komponenten SWE-87 Label Button Checkbox Choice List Window Frame ScrollPane Dialog FileDialog Scrollbar TextField TextArea Panel Vorlesung Software-Entwicklung / Folie 87 Anschauliche Vorstellung der Komponenten Funktion der Komponenten erläutern Judy Bishop: Java lernen, 3.Aufl., Abschnitt 10.2 Folie 84, Folie 85 Welche Komponenten enthalten wiederum Komponenten?
Programmschema: Fenster mit Zeichenfläche SWE-88 import java.awt.*; import java.awt.event.*; // Hauptklasse als Unterklasse von Frame: class GraphicWarning extends Frame { GraphicWarning (String title) // Konstruktor { super (title); // Aufruf des Konstruktors von Frame setbackground (Color.cyan); public void paint (Graphics g) // überschreibt paint in einer Oberklasse { g.drawrect (2*letter, 2*line, 30*letter, 6*line);// auf der Fläche g g.drawstring ("W A R N I N G", 9*letter, 4*line); // zeichnen und // schreiben public static void main (String[] args) { Frame f = new GraphicWarning ("Draw Warning"); // Objekt erzeugen f.setsize (35*letter,6*line); // Größe festlegen f.setvisible (true); // führt zu erstem Aufruf von paint f.addwindowlistener // Ereignisbehandlung: Beim Drücken des (new WindowAdapter () { public void windowclosing(windowevent e) { System.exit(0); ); static private final int line = 15, letter = 5; // Schließknopfes Programm beenden. // zur Positionierung Vorlesung Software-Entwicklung / Folie 88 Schema für ein vollständiges Programm kennenlernen Struktur und Aufgaben erläutern Judy Bishop: Java lernen, 3.Aufl., Abschnitt 10.2, Example 10.1 Wie verändern Sie das Programm, so dass zwei gleiche Fenster erzeugt werden?
Ablauf des Programms von SWE-88 SWE-89 1. main aufrufen: 2. GraphicWarning Objekt erzeugen, Konstruktor aufrufen: 3. Frame-Konstruktor aufrufen 4. Eigenschaften setzen, z. B. Farben, 5. ggf. weitere Initialisierungen des Fensters 6. Objekt an f zuweisen 7. Größe festlegen, f.setsize (...), (evtl. besser bei 4.) 8. Fenster sichtbar machen, f.setvisible(true): weiter in Methoden der Oberklassen: 9. Graphics Objekt erzeugen 10. damit erstmals paint aufrufen (immer wieder, wenn nötig): weiter in paint von GraphicWarning 11. auf der Zeichenfläche des Parameters g schreiben und zeichnen 12. Reaktion auf das Drücken des Schließknopfes vorbereiten, f.addwindowlistener 13. ggf. weitere Anweisungen zur Programmausführung 15. Schließknopf Drücken weiter in Methoden der Oberklassen: 16. windowclosing des WindowListener aufrufen weiter in paint von GraphicWarning 17. Programm beenden, exit(0) Vorlesung Software-Entwicklung / Folie 89 Programmablauf verstehen Objekt zeigen Ablauf erläutern 3 Stellen zur Erweiterung des Schemas Judy Bishop: Java lernen, 3.Aufl., Abschnitt 10.2, Example 10.1 Kopieren Sie das Programm aus der Programmsammlung, führen Sie es aus und variieren es. Zu welchen Gelegenheiten wird paint aufgerufen? Wie kann eine Bibliotheksmethode Aufrufe von paint-methoden enthalten, die noch gar nicht geschrieben sind?
Beispiel: Balkendiagramm zeichnen public void paint (Graphics g) SWE-90 { int x = 50, y = 300; // Schnittpunkt der Achsen int width = 20, gap = 5; // Balken und Zwischenraum g.drawline (x,y,x+12*(width+gap),y); g.drawline (x,y,x,30); // x-achse // y-achse for (int m = 0; m < 12; m++) // Monate an der x-achse g.drawstring(months[m],m*(width+gap)+gap+x,y+20); for (int i = 0; i <y; i+=100) g.drawstring(string.valueof(i),20,y-i); // Werte an der y-achse g.setfont(new Font("SansSerif",Font.BOLD,14)); g.drawstring("savanna Rainfall Chart",120,40); // Überschrift g.setcolor(color.red); // die Balken for (int month = 0; month < 12; month++) { int a = (int) raintable[month]*10; g.fillrect(month*(width+gap)+gap+x, y-a,width,a); static double[] raintable = new double[12]; static String Months [] = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"; Vorlesung Software-Entwicklung / Folie 90 Umfangreicheres Beispiel zum Zeichnen Operationen erläutern Koordinaten der Zeichenfläche Judy Bishop: Java lernen, 3.Aufl., Abschnitt 10.2, Example 10.2 Folie 90a Kopieren Sie das Programm aus der Programmsammlung, führen Sie es aus und variieren es.
Ergebnis zum Programm von SWE-90 SWE-90a Vorlesung Software-Entwicklung / Folie 90a Bild zu SWE-90 Erläuterung zusammen mit SWE-90 Unzulänglichkeiten zeigen, begründen, beheben Judy Bishop: Java lernen, 3.Aufl., Abschnitt 10.2, Example 10.2 Folie 90
AWT-Komponenten anwenden SWE-91 Ein einfaches Beispiel für Text und Schaltknöpfe: Aufgaben zur Herstellung: Aussehen: Label- und Button-Objekte generieren Anordnung der Komponenten festlegen Ereignisse: ein Listener-Objekt mit den Buttons verbinden call-back-methode für Buttons implementieren Vorlesung Software-Entwicklung / Folie 91 Aufgaben zum Umgang mit AWT-Komponenten kennenlernen Aufgaben am Beispiel erläutern Judy Bishop: Java lernen, 3.Aufl., Abschnitt 10.3