
Universität Bremen Universität Bremen Abstract Window Toolkit Rückblick „Generisches Programmieren“ Motivation Generische Klassen/Interfaces Generische Typen classclassNode<T> Node<T> Node<String>Node<String> nn == newnewNode<String>("foo"); Node<String>("foo"); 1 String s = n.getInfo(); Thomas Röfer {{ String s = n.getInfo(); privateprivateT T info;info; private Node<T> left, right; 2 3 private Node<T> left, right; Node(TNode(T i) i) {info{info = = i;}i;} Typebounds Desktop-Metapher Node(TNode(T i, i, Node<T>Node<T> l,l, Node<T>Node<T> r)r) classclassNode<T Node<Textends extendsComparable<T>> Comparable<T>> 4 5 {info{info = = i;i; leftleft = = l;l; rightright == r;}r;} {{ AWT und Swing TT getInfo()getInfo() { {returnreturn info;} info;} //// ...... Node<T>Node<T> getLeft()getLeft() { {returnreturn left;} left;} Applets und Anwendungen 6 Node<T>Node<T> getRight()getRight() { {returnreturn right;} right;} voidvoidsetInfo(T setInfo(T i) i) {info{info = = i;}i;} Rahmen und Menüs }} Polymorphe Methoden Komponenten und Container interfaceinterfaceFoldlFn<A, FoldlFn<A, B>B> {{ AA fn(Afn(A a, a, BB b);b); } } Panels und Layouts Wildcard-Typen Typ Lesen Schreib. Kompatible Typargumente <A,<A, B>B> AA foldl(FoldlFn<A,foldl(FoldlFn<A, B>B> f,f, AA a,a, B[]B[] b)b) { Grafik und Schriften Invarianz C<T> ja ja T { forfor(B(B b0 b0 :: b)b) Bivarianz C<?> nein nein Alle Ereignisbehandlung aa == f.fn(a,f.fn(a, b0);b0); Covarianz C<? extends B> ja nein B und abgeleitete Typen returnreturna; a; Contravarianz C<? super B> nein ja B und Basistypen }} PI-1: Abstract Window Toolkit 2 Universität Bremen Universität Bremen Desktop-Metapher AWT und Swing 4 Ansatz 4 Abstract Window Toolkit 4 Graphische Oberflächen bedienen sich Metaphern, d.h. sie bilden reale Objekte und 4 Seit Java 1.0 Abläufe nach, die dem Benutzer den Umgang mit dem Computer erleichtern sollen, da 4 Nutzt die Elemente des unterliegenden Fenstersystems er diese Objekte aus der realen Welt bereits kennt 4 Ist relativ schnell 4 Der Benutzer bestimmt, was zu tun ist, d.h. es gibt keine globale feste Reihenfolge 4 Der Leistungsumfang ist eingeschränkt 4 modal vs. nicht-modal 4 Findet sich unter java.awt.* 4 Beispiele 4 Swing 4 Desktop (Schreibtischoberfläche) 4 Seit Java 1.1 4 Man kann Dinge ablegen, hin- und herschieben und in den Papierkorb werfen 4 Teilweise schräg: Disketten in Papierkorb werfen, um sie entnehmen zu können 4 „Leichtgewichtige“ Komponenten (d.h. nur wenig Code des unterliegenden Fenstersystems) 4 Fenster 4 Zeigen einen Ausschnitt der Welt. Die Sicht kann durch Rollbalken geändert werden 4 Ist langsamer als AWT 4 Buttons (IBM-Deutsch: Schaltflächen) 4 Der Leistungsumfang ist deutlich größer 4 Listen, Dialoge, Karteikarten, Assistenten … 4 Unterstützt unterschiedliche „Look & Feels“ 4 Findet sich unter javax.swing.* PI-1: Abstract Window Toolkit 3 PI-1: Abstract Window Toolkit 4 Universität Bremen Universität Bremen Applets und Anwendungen Applets 4 Applets 4 Allgemein 4 Ein Applet ist eine Klasse, die von java.applet.Applet erbt 4 Können nur innerhalb eines Webbrowsers oder im AppletViewer ausgeführt werden 4 Funktionalität wird implementiert, indem existierende Methoden überschrieben oder Schnittstellen implementiert werden 4 Sind immer grafisch 4 Der Programmfluss wird von außen bestimmt (Ereignisbasierte Programmierung) 4 Zeichenfläche ist statisch 4 Don‘t call us, we‘ll call you! 4 Starten und Beenden automatisch durch Browser 4 Methoden 4 Initialisierung 4 Anwendungen 4 void init() 4 Können sowohl textuell als auch grafisch sein 4 Benutzer betritt mit Applet Seite (wieder) 4 Grafische Anwendungen generell aufwändiger als 4 void start() Applets 4 Benutzer verlässt Seite mit Applet (wieder) 4 void stop() 4 Müssen eine Funktion main() haben 4 Applet wird nicht mehr gebraucht 4 main() erzeugt typischerweise nur ein Objekt des 4 void destroy() Hauptfensters und kann daher in BlueJ entfallen 4 Alle Methoden von java.awt.Panel , z.B. 4 void paint(Graphics g) PI-1: Abstract Window Toolkit 5 PI-1: Abstract Window Toolkit 6 1 Universität Bremen Universität Bremen Struktur des AWT Rezept für eine AWT-Anwendung 4 Fenster und Dialogelemente 4 Benutzungsschnittstelle 4 CheckboxGroup , s. rechts 4 Erzeugen eines Rahmens (Ableitung von class Frame ) 4 Layouts 4 4 BorderLayout, CardLayout, Initialisierung der Schriften, Farben, Layouts und anderer sog. Resourcen FlowLayout, GridLayout, 4 Erzeugung der Menüs und des Menübalkens GridBagLayout … 4 Erzeugung der Steuerelemente, Dialoge, Fenster usw. 4 Zeichnen und Grafikprimitive 4 Color, Graphics, Image, Point, 4 Implementierung Polygon, Rectangle 4 Ereignisbehandler (event handlers) hinzufügen 4 Schriften 4 Funktionalität hinzufügen 4 Font, FontMetrics 4 Fehlerbehandlung hinzufügen 4 Ereignisse 4 Event 4 Menüs 4 MenuComponent, MenuBar, MenuItem, CheckboxMenuItem, Menu 4 Toolkit PI-1: Abstract Window Toolkit 7 PI-1: Abstract Window Toolkit 8 Universität Bremen Universität Bremen Erzeugen eines Rahmens Menüs 4 Allgemein //// im im Konstruktor Konstruktor MenuBar mbar = new MenuBar(); 4 Jede grafische Anwendung benötigt MenuBar mbar = new MenuBar(); ein Hauptfenster (einen Rahmen) import java.awt.*; MenuMenu m m = = new newMenu( Menu("File");"File"); import java.awt.*; m.add( new MenuItem( "New")); 4 Üblicherweise wird dazu eine Klasse m.add(new MenuItem("New")); m.add( new MenuItem( "Open…")); von Frame abgeleitet und ein einzelnes class AWTApp extends Frame m.add(new MenuItem("Open…")); class AWTApp extends Frame m.add( new MenuItem( "Save")); Objekt davon konstruiert (z.B. in { m.add(new MenuItem("Save")); main()) { m.add(m.add(newnew MenuItem( MenuItem("Save"Save As…" As…"));)); AWTApp() m.addSeparator(); 4 Einschränkungen AWTApp() m.addSeparator(); {{ m.add( new MenuItem( "Print…")); 4 Eine so erzeugte Anwendung reagiert m.add(new MenuItem("Print…")); super ("My App"); m.addSeparator(); noch auf keine Ereignisse, z.B. nicht super("My App"); m.addSeparator(); auf das Drücken der Schließen - setSize(300,setSize(300, 300);300); m.add(m.add(newnew MenuItem( MenuItem("Quit"));"Quit")); mbar.add(m); Schaltfläche setVisible(setVisible(true);true ); mbar.add(m); m = new Menu("Help"); 4 Man kann es nur beenden, indem man }} m = new Menu("Help"); es „abschießt“ (BlueJ: Virtuelle m.add( new MenuItem( "Help!!!!" )); }} m.add(new MenuItem("Help!!!!")); Maschine zurücksetzen) m.addSeparator();m.addSeparator(); m.add(m.add(newnew MenuItem( MenuItem("About..."));"About..." )); mbar.add(m);mbar.add(m); setMenuBar(mbar);setMenuBar(mbar); PI-1: Abstract Window Toolkit 9 PI-1: Abstract Window Toolkit 10 Universität Bremen Universität Bremen Komponenten und Container Panels und Layouts 4 Allgemein 4 Panel 4 Component ist die Basisklasse aller 4 Ein rechteckiger Bereich, der andere Komponenten Elemente, mit denen der Benutzer enthalten kann und dem ein LayoutManager interagieren kann zugeordnet ist 4 Arten 4 LayoutManager 4 List, Scrollbar, TextArea, TextField, 4 Erlauben die Anordnung von Komponenten nach Choice, Button, Label, … vorgegebenen Kriterien 4 Alle Container 4 Notwendig für Plattformunabhängkeit 4 Methoden, z.B. 4 BorderLayout 4 set/getBackground(Color) 4 Standard-LayoutManager für alle Fenster, z.B. 4 set/getFont(Font) Rahmen und Dialoge 4 setVisible() 4 Speichert Komponenten in fünf Bereichen 4 set/getLocation (int, int), set/getSize(int, 4 north , south , east , west und center int) 4 Der überschüssige Raum wird dem mittleren Bereich 4 paint(Graphics), update(Graphics), zugeordnet repaint() 4 CardLayout 4 Container 4 Speichert mehrere Komponenten, die nacheinander 4 Komponenten, die andere Komponenten angezeigt werden sollen, d.h. man kann zwischen enthalten können verschiedenen Komponenten umschalten PI-1: Abstract Window Toolkit 11 PI-1: Abstract Window Toolkit 12 2 Universität Bremen Universität Bremen Panels und Layouts Panels und Layouts 4 FlowLayout 4 GridBagLayout 4 Standard-LayoutManager für Panels 4 Kompliziertester, aber auch mächtigster LayoutManager 4 Kann beliebig viele Komponenten enthalten, 4 Erlaubt die Zuordnung sog. Einschränkungen die an den Fenstergrenzen umgebrochen (Constraints ) zu jeder Komponente werden 4 GridBagConstraints 4 Unterschiedliche Ausrichtungen 4 Legt die Einschränkungen für Komponenten in 4 FlowLayout.LEFT , FlowLayout.CENTER , GridBagLayout fest, z.B. FlowLayout.RIGHT 4 Relative Breite und Höhe 4 GridLayout 4 gridwidth , gridheight 4 Ordnet Komponenten in einem Gitter an 4 Anzahl Zellen, GridBagConstraints.RELATIVE , 4 Alle Komponenten haben die gleiche Größe GridBagConstraints.REMAINDER 4 Gewichtungen 4 weightx , weighty PI-1: Abstract Window Toolkit 13 PI-1: Abstract Window Toolkit 14 Universität Bremen Universität Bremen Grafik Schriften import java.awt.*; import java.awt.*; 4 Allgemein class FrameBeispiel extends Frame 4 Begriffe class FrameBeispiel extends Frame { 4 In alle Komponenten kann { FrameBeispiel() 4 Grundlinie, Oberlänge, Unterlänge, Höhe gezeichnet werden, in dem FrameBeispiel() { paint(Graphics) überschreibt { 4 Proportionalschrift, Schrittweite setSize(320,280); setSize(320,280); setVisible(true); 4 Aber es kann zu Konflikten mit setVisible(true); 4 Unterschneidung, Ligaturen } den Zeichenroutinen der } Komponenten kommen 4 Serifen public void paint(Graphics g) public void paint(Graphics g) { 4 Allgemeine Zeichenfläche { 4 Auswahl einer Schrift (Font) g.setColor(Color.black); 4 g.setColor(Color.black); class Canvas g.drawString("Vereinzellungseinheit", 150, 50); 4 g.drawString("Vereinzellungseinheit", 150, 50); Name, z.B. „SansSerif“ g.fillRect(90, 5, 5, 240); 4 Zeichenschnittstelle
Details
-
File Typepdf
-
Upload Time-
-
Content LanguagesEnglish
-
Upload UserAnonymous/Not logged-in
-
File Pages4 Page
-
File Size-