GUI Programmierung (50 Punkte)

Werbung
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
Herunterladen