WS 2011/12 Fakultät Angewandte Informatik Programmierung verteilter Systeme 16.01.2011 Prof. Dr. Bernhard Bauer Übungen zur Vorlesung Informatik II, Blatt 10 Abgabe: Montag, 23.01.2012, 12.00 Uhr, Informatik II - Briefkasten und Programme zusätzlich per Mail an den Tutor, bitte Namen und Matrikelnummer angeben. Aufgabe 35 * (Mausereignisse, Klausuraufgabe WS 10/11, 15 Punkte) Implementieren Sie ein schließbares Fenster mit einer Zeichenfläche und zwei nicht editierbaren Textfeldern, die sich nebeneinanderliegend unterhalb der Zeichenfläche befinden. Bewegt man die Maus über die Zeichenfläche (Maustaste nicht gedrückt), so soll in den Textfeldern immer die aktuelle Mausposition innerhalb der Zeichenfläche angezeigt werden (ein Textfeld für die XKoordinate, das andere Textfeld für die Y-Koordinate). Aufgabe 36 + 37 ** (Zeichnen mit Vorschau) Es soll ein Programm erstellt werden, mit dem man Polygonzüge und Freihandlinien in eine Zeichenfläche zeichnen kann. Ein Polygonzug (Klasse Polygon, bereits teilweise vorgegeben) ist dabei durch eine Liste von Punkten (Klasse Point, bereits vorgegeben), die die Eckpunkte des Polygonzugs angeben, gegeben. Das bedeutet, ein Polygon wird gezeichnet, indem zwischen zwei aufeinanderfolgenden Punkten dieser Liste jeweils Linien gezogen werden. Ein Polygon soll durch den Benutzer wie folgt gezeichnet werden können: i. Durch Klick auf eine Schaltfläche soll festgelegt werden, dass als nächstes ein Polygon gezeichnet wird ii. Durch einen Linksmausklick soll daraufhin der Startpunkt des Polygons gesetzt werden. iii. Mit jedem weiteren Rechtsmausklick werden aufeinanderfolgende Zwischenpunkte des Polygons gesetzt. iv. Mit dem zweiten Linksmausklick wird der Endpunkt des Polygons gesetzt. v. Das Polygon soll bis zum letzten festgelegten Zwischenpunkt sichtbar sein. Vor jedem Klick (außer dem ersten) soll außerdem eine Vorschau auf die nächste Linie des Polygons zu sehen sein. Eine Freihandlinie entsteht durch einen Polygonzug mit sehr nah benachbarten aufeinanderfolgenden Punkten (jeweils nur wenige Pixel Abstand). Eine Freihandlinie soll durch den Benutzer wie folgt gezeichnet werden können: i. Durch Klick auf eine Schaltfläche soll festgelegt werden, dass als nächstes eine Freihandlinie gezeichnet wird ii. Mit gedrückter Maustaste soll daraufhin entlang der Mausbewegung eine Freihandlinie entstehen. Zur Verwaltung aller gezeichneten Polygonzüge ist außerdem teilweise eine zugehörige Containerklasse Polygone vorgegeben. Benutzen Sie das Beobachtermuster, um sicherzustellen, dass immer alle bisher gezeichneten Polygone und Freihandlinien und das aktuell gezeichnete Polygon bzw. die aktuell gezeichnete Freihandlinie dargestellt werden. 1 Die Implementierung der Zeichenfläche zum Zeichnen von Polygonen war Klausuraufgabe im WS 08/09 (15 Punkte) public class Point { private int x,y; public Point (int x, int y){ this.x = x; this.y = y; } public int getY(){return y;} public int getX(){return x;} } import java.awt.*; import java.util.*; public class Polygon { private Vector nodes = new Vector(); public Polygon(Point start){ nodes.addElement(start);} public void addPoint(Point p) { nodes.addElement(p);} public void removeLastPoint() { nodes.remove(nodes.size()-1);} public void paint(Graphics g){ //zu ergänzen} } import java.util.*; public class Polygone implements Iterable { private Vector meinePolygone = new Vector(); private static Polygone uniqueListe = null; private Polygone(){} public static Polygone instancePolygone (){ if (uniqueListe == null){ uniqueListe = new Polygone();} return uniqueListe; } public void addPolygon(Polygon p){ meinePolygone.addElement(p);} public Iterator iterator(){ return meinePolygone.iterator();} } Aufgabe 38 *** (Verschieben von Zeichnungen) Ergänzen Sie das Programm aus Aufgabe 36 + 37, so dass man wie folgt Polygone auswählen und verschieben kann: i. Befinden sich die Mausposition innerhalb des Rechtecks, das durch den am weitesten rechts liegenden Punkt, dem am weitesten links liegenden Punkt, den am weitesten oben liegenden Punkt und den am weitesten unten liegenden Punkt des Polygons gebildet wird, so soll das Polygon in einer anderen Farbe gezeichnet werden und das Rechteck angezeigt werden (siehe Screenshot). Ein solches Polygon gilt als ausgewählt. Das kann natürlich auch für mehrere Polygone gleichzeitig der Fall sein. ii. Mit gedrückter Maustaste sollen daraufhin alle ausgewählten Polygone entlang der Mausbewegung verschoben werden. 2