Abstract Window Toolkit Rückblick „Generisches Programmieren“

Abstract Window Toolkit Rückblick „Generisches Programmieren“

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

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    4 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us