Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de Aufgabenzettel VII zur Vorlesung „Programmieren“ Abgabe: 10.02.09, 14:30 Uhr in der Vorlesung Allgemeines a) Dieser Übungszettel ist freiwillig und dient der Aufbesserung Ihrer Punktestatistik für die Zulassung zur Klausur. Die erreichten Punkte dieses Zettels werden daher auf Ihrem „Punktekonto“ gutgeschrieben aber die Gesamtpunktzahl dieses Zettels fließt nicht in die Berechnung der Mindestpunktzahl ein. b) Geben Sie pro 2er- bzw. 3er-Gruppe Ihre Lösung termingerecht unter Nennung von Vor- und Nachnamen sowie Matrikelnummern und Übungsgruppennummer auf jeder abgegebenen Seite ab. c) Unvollständige sowie unleserliche Angaben und Lösungen führen zu Punktabzügen. d) Zur Bearbeitung der Aufgaben ist es erforderlich, sich selbständig über die Inhalte der Vorlesung und der Übung hinaus zu informieren. Die folgenden Quellen und Hinweise sind als Anregung und nicht als erschöpfende Auflistung zu verstehen. e) Senden Sie die übersetzbare Java-Datei an [email protected] mit dem Betreff „UebungsNr [x] Nachname1, Nachname2, ….“. Java-Dateien, die sich nicht übersetzen lassen können, führen zu erheblichem Punktabzug. Geben Sie den erzeugten Quellcode, sowie die Antworten auf die Fragen auch in Papierform ab! Aufgabe 1 – GUI Programmierung (50 Punkte) In dieser Aufgabe soll ein Zeichenprogramm entwickelt werden. Mit diesem soll es möglich sein, einfache Formen wie Kreise und Quadrate auf der Zeichenfläche zu positionieren. Dazu soll der Benutzer des Programms wählen können, ob als nächstes ein Kreis oder ein Quadrat in grün, blau oder rot gezeichnet werden soll. Ebenso kann der Radius bzw. die Seitenlänge zwischen den Werten 20, 30 und 40 variiert werden. Informieren Sie sich über die Programmierung von GUIs (Graphical User Interface) mit Swing (mindestens) auf den folgenden Seiten: - http://java.sun.com/javase/6/docs/technotes/guides/swing/ http://openbook.galileocomputing.de/javainsel7/javainsel_15_001.htm#mj2e89 1cdc51578f8f083b119b543f13ac http://java.sun.com/docs/books/tutorial/uiswing/ Bewegt der Benutzer die Maus über den Zeichenbereich, so soll der Mauscursor seine Form vom Standardzeiger auf ein Kreuz wechseln. Verlässt die Maus wieder den Zeichenbereich, so soll wieder der Standardzeiger dargestellt werden. Klickt der Nutzer mit der Maus in den Zeichenbereich, so soll an dieser Stelle die aktuell gewählte Form mit der ebenfalls gewählten Farbe und Größe hinzugefügt werden. Verwenden sie dazu einen MouseListener der beim Eintritt der Maus auf „Ihr“ JPanel den Mousecursor auf das Fadenkreuz setzt und beim Austritt wieder auf den Standardcursor wechselt. Klickt der Benutzer auf den „Clear“ Button, so sollen alle Zeichenelemente von der Zeichenfläche entfernt werden. Klickt der Benutzer auf „Exit“, so soll das Programm beendet werden. Abbildung 1 zeigt dabei beispielhaft, wie die GUI aussehen könnte nachdem einige Formen gezeichnet worden sind. Fügen Sie den beiden Buttons einen ActionListener hinzu, so dass Sie auf Klicks auf diese Buttons reagieren können. Abbildung 1: Beispielhafte Nutzung der grafischen Oberfläche Abbildung 2 zeigt dabei die Auswahlmöglichkeiten auf der grafischen Oberfläche und Abbildung 3 stellt deren Aufbau aus Swing Komponenten dar. Das Hauptfenster der Anwendung (ein JFrame), verwendet dabei das BorderLayout. In dessen BorderLayout.NORTH-Bereich ist eine Instanz von JPanel untergebracht und im Bereich BorderLayout.CENTER ist eine Instanz einer von Ihnen zu implementierenden Klasse, die von JPanel abgeleitet ist, untergebracht. Die JPanelInstanz beherbergt die zwei verschiedenen Buttons (JButton) und die drei Auswahlboxen (JComboBox) unter Verwendung des FlowLayouts. Abbildung 2: Details der einzelnen GUI Elemente Abbildung 3: Aufbau der GUI aus Swing Elementen Hinweise: - Implementieren Sie eine abstrakte Klasse FarbigeForm mit den Eigenschaften „int mittelpunktX, mittelpunktY, radius;“ und „Color farbe;“. Ergänzen Sie einen Konstruktor mit der Signatur public FarbigeForm(int mittelpunktX, int mittelpunktY, int radius, Color farbe). Definieren Sie eine öffentliche, abstrakte Methode void druckeGraph(Graphics g). Leiten Sie jeweils die Klasse FarbigerKreis und FarbigesQuadrat von FarbigeForm ab und implementieren Sie die Methode druckeGraph geeignet. - Die Formen auf dem von Ihnen implementierten JPanel-Kind müssen regelmäßig neu gezeichnet werden, z.B. wenn der Zeichenbereich von einem anderen Fenster überzeichnet wurde. Dazu müssen Sie die darzustellenden Formen in einer Datenstruktur zwischenspeichern. Verwenden Sie dazu eine Liste vom Typ List<FarbigeForm>, um die auf der GUI zu zeichnenden Formen zu speichern. Als konkrete Implementierung können sie LinkedList<FarbigeForm> verwenden. Informieren Sie sich über List unter http://java.sun.com/javase/6/docs/api/java/util/List.html. - Erstellen Sie eine Anwendungsfester, indem Sie eine Klasse von JFrame ableiten und in deren Konstruktor die GUI-Elemente erstellen. - Leiten Sie eine eigene Klasse von JPanel ab, überschreiben sie die void paint(Graphics g) in der sie das Panel (bzw. die einzelnen Kreise und Quadrate) zeichnen, die in der Liste gespeichert sind. - Die Verwendung vom MouseListeners kann unter http://java.sun.com/docs/books/tutorial/uiswing/events/mouselistener.html im Detail nachvollzogen werden. Informationen zu ActionListenern finden Sie unter http://java.sun.com/docs/books/tutorial/uiswing/events/actionlistener.html. Erreichbare Gesamtpunktzahl: 50 Punkte