Advanced Java
Services
|
Eventhandling |
|
|
Übungen |
|
ActionListener
- Schreiben sie eine Applikation mit einem (J)Frame ( MyFrame extends (J)Frame ).
Legen sie einen (J)Button in den Norden und eine (J)Label als Statuszeile in den Süden.
Geben Sie auf der Statuszeile aus, wie oft man auf den Button drückt. Verwenden Sie
verschiedene Ansätze als Empfängerklasse.
- Empfängerklasse ist Hauptklasse (MyFrame).
- Empfängerklasse ist innere Klasse .
- Empfängerklasse ist anonyme Klasse .
- Empfängerklasse ist top-level Klasse .
Verwenden Sie zum Schließen des Fenster noch den WindowCloser.
- Erweitern Sie obige Übung, indem Sie einen zweiten (J)Button in den Osten legen. Wenn man
auf den Button drückt, soll der Hintergrund des Frames (bzw. des ContentPane) auf eine zufällige
Farbe gesetzt werden. Verwenden Sie verschiedene Ansätze als Empfängerklassen.
- Empfängerklasse ist Hauptklasse, d.h. es gibt nur einen Empänger.
- Schreiben Sie für jeden Button einen eigenen Handler als innere Klasse .
- Schreiben Sie für jeden Button einen eigenen Handler als anonyme Klasse .
Verwenden Sie zum Schließen des Fenster noch den WindowCloser.
- Schreiben sie eine Klasse ColorButton, die eine Ableitung von Button ist. ColorButton soll bei
jedem Click seine Farbe ändern. Verwenden Sie für die Ereignisverarbeitung in ColorButton eine innere
Klasse. Testen sie ColorButton indem Sie ihn genauso einsetzen wie einen normalen Button
(d.h. ColorButton muß die gleichen Konstruktoren haben wie Button).
ItemListener
- Schreiben sie eine Applikation mit einem (J)Frame ( MyFrame extends (J)Frame ).
Legen sie eine Checkbox (JCheckBox) in den Norden und eine (J)Label als Statuszeile in den Süden.
Geben Sie dem Frame (ContentPane) eine Farbe und setzen Sie die Farbe der Statuszeile auf Color.lightGray.
Blenden Sie mit Hilfe der Checkbox die Statuszeile ein und aus. default für die Statuszeile ist
eingeblendet. Verwenden Sie verschiedene Ansätze als Empfängerklasse.
Verwenden Sie zum Schließen des Fenster noch den WindowCloser.
- Wie oben, aber legen Sie mit Hilfe eines Panels eine zweite Checkbox in den Norden. Diese soll
mit Hilfe der Methode setUndecorated(boolean decorated) den Rahmen und die Titelzeile des Hauptfensters
ein- und ausblenden. Man kann setUndecorated() allerdings nur dann einsetzen, wenn das Fenster nicht
im Hauptspeicher gehalten wird. Diese Resourcen werden mit der Methode dispose() freigegeben. Sie
müssen also vor setUndecorated() dispose() einsetzen und nach setUndecorated() setVisble().
Überschreiben Sie deswegen die Methode setUndecorated() so, daß sie die Aufrufe von dispose() und
setVisible() in die überschriebene Methode legen und nicht mehr extra benötigen
(siehe auch die Übungen zu AWT Nr7 und Nr.8)
Verwenden Sie zum Schließen des Fenster noch den WindowCloser.
- PizzaService ! Legen Sie vier Checkboxen an für die Auflagen Broccoli, Pilze, Oliven und
Pepperoni. Voreinstellung: Keine Auflage gewählt. Fassen sie drei weitere Checkboxen in einer
Checkboxgroup zusammen, sodaß sie Radiobuttons erhalten. Hier gibt es die alternative Auswahl
Schinken oder Salami oder vegetarisch. Voreinstellung ist vegetarisch. Legen Sie die sieben
Komponenten in ein Panel, das Sie ins Zentrum des Frames legen. Setzen sie die Breite des Hauptfenster
so, daß die Radiobuttons in der zweiten Zeile des Panels erscheinen und verhindern mit
setResizable() eine Größenänderung des Frames. Geben Sie die Wahl eines Benutzers in einer
Statuszeile bekannt.
Verwenden Sie zum Schließen des Fenster noch den WindowCloser.
WindowListener
- Machen Sie sich nun unabhängig von der Klasse WindowCloser und verwenden den WindowListener,
um eine AWT-Applikation zu beenden. Implementieren Sie zunächst alle Listenermethoden ohne
Adapterklasse und stellen Sie fest, wann welche Methoden des Interfaces gerufen werden, indem Sie
in jede Methode als reaktion das Statement System.out.println( e.paramString() ); schreiben.
Damit man ein Frame schließen kann, muß man in genau einer der 7 Methoden
das Statement System.exit(0); stehen. Finden Sie die richtige.
- Wie vorher, aber verwenden Sie nun eine Adapterklasse als innere Klasse und in ihr nur eine
einzige Methode, eben die zum Beenden der Anwendung.
- Wie vorher, aber verwenden Sie die Adapterklasse als anonyme Klasse.
TextListener u.a.
- Legen Sie in einem Frame ein TextField in den Norden und ein statusLabel in den Süden.
Alle Eingaben in das TextFeld sollen mit Hilfe eines TextListeners auch in der Statuszeile
erscheinen.
- Wie vorher, aber verwenden Sie für das TextFeld setEchoChar('*') um aus dem TextFeld ein
PasswortFeld zu machen.
- Legen Sie in einem Frame ein TextField in den Norden, ein StatusLabel in den Süden und
einen Button in das Zentrum. Das TextField sei als Passwortfeld konfiguriert. Beim Anklicken des
Buttons erscheint der eingegebene Text in Klarschrift auf dem StatusLabel.
- Wie vorher, aber mit zusätzlicher Funkionalität. Bei Betätigung der ENTER-Taste wir das Passwort
auf dem Label angezeigt. (Hinweis: Verwenden Sie einen ActionListener für das TextFeld)
- Wie vorher, aber denken sie sich ein Passwort aus. Wird das Passwort eingegeben, dann erscheint
in der statuszeile die Meldung "Passwort OK", sonst "falsches Passwort".
- Legen Sie zwei TextFelder in einem Frame an, eines im Norden, das andere im Süden. Das TextFeld
im Norden sei editierbar, das im Süden nicht. geben Sie dem TextFeld im Süden eine hellgraue Farbe.
Der oben eingegebene Text soll im unteren TextFeld erscheinen. Enthält der oben eingegebene Text
das Wort "ein" so wird das untere Textfeld editierbar und seine Hintergrundfarbe wird weiß.
Enthält der oben eingegebene Text das Wort "aus" so wird das untere Textfeld nicht editierbar und
seine Hintergrundfarbe wird grau.
- Euro-Dollar-Umrechnung. Legen Sie einen Button mit der Aufschrift "Umrechnen" in den Norden.
Legen Sie ein TextFeld, ein Label, wieder ein TextFeld und noch ein Label in ein Panel und legen
Sie dieses in das Zentrum eines Frames. Legen Sie die Textfelder breit an ( new TextField(20) )
und beschriften Sie die Labels mit "EURO" und "DOLLAR". Machen Sie das Hauptfenster so klein,
daß das zweite Textfeld und das zweite Label in einer zweiten Zeile erscheinen und verhindern sie mit
setResizable() eine Änderung der Fenstergröße. Die Statuszeile soll den Umrechnungskurs enthalten.
Überwachen Sie die Textfelder mit einem TextListener und den Button mit einem ActionListener.
Bei einem Buttondruck wird der Inhalt des zuletzt bearbeiteten Textfeldes abgeholt und die
Umrechnung durchgeführt. Das Ergebnis wird dann im jeweils anderen TextFeld angezeigt.
(Hinweis: Umrechnung mit Double.parseDouble() )
- Wie oben, aber fangen sie die NumberFormatException ab, die parseDouble() wirft.
- Palindromtest. Legen Sie zwei TextAreas an und legen Sie sie in ein Panel. Legen Sie das Panel
ins Zentrum eines Frames. Geben Sie den TextAreas verschiedene Hintergrundfarben und verschiedene
Textfarben. Der in der oberen TextArea eingegeben Text soll in der unteren TextArea in Großbuchstaben
und rückwärts erscheinen.
- Zwei TextAreas wie oben. Legen Sie einen zusätzlichen Button in den Norden. Auf einen Buttondruck
erscheint der in der oberen TextArea markierte Text in der unteren TextArea (Sie brauchen dazu keinen
Textlistener).
Hinweis: Markiert man mit der Maus oder mit Ctrl A den gesamten Text, so wird am Textende eine zusätzliche
Leerstelle mitmarkiert, die nicht Bestandteil des Textes ist und die Methode getSelectedText() wirft
eine StringIndexOutOfBoundsException. Fangen sie diese Exception ab und stellen sie die gewünschte
Funktionalität auch für diesen Fall her.
MouseListener, MouseMotionListener
- Schreiben sie eine Anwendung mit zwei nebeneinanderliegenden Komponenten, etwa zwei Labels
oder zwei JLabels. Überwachen Sie ein (J)Label mit MouseListener und MouseMotionListener.
Schreiben Sie in jede ReaktionsMethode eine Meldung der Form System.out.println( e.paramString() ),
wobei e der MouseEvent ist und machen Sie sich klar, wann welche Reaktionsmethode aufgerufen wird.
Verwenden Sie zunächst keine Adapterklasse und kodieren sie die Listenerklasse als innere Klasse.
- Wie oben, aber verwenden sie nun die Klasse MouseAdapter (und nur diese)
- Wie oben, aber verwenden sie nun die Klasse MouseMotionAdapter (und nur diese)
- Wie oben, aber verwenden sie nun die Klasse MouseInputAdapter.
- Legen Sie eine Statuszeile in den Süden eines Frame und schließen an Sie einen MouseListener an.
Überwachen Sie auch den Frame mit einem MouseListener. Ein Doppelclick auf die Statuszeile bringt
diese zum Verschwinden, ein Doppelclick auf den Frame bringt sie wieder zum Vorschein
(verwenden Sie getClickCount() von MouseEvent).
- Wie vorher, aber die Stauszeile verschwindet/bzw. erscheint durch einen einfachen Klick auf
die rechte Maustaste (verwenden Sie getButton() und die BUTTONx-Konstanten aus MouseEvent).
Adapterklassen
- Zu vielen Swinglisteners existieren (noch) keine Adapterklassen. Suchen Sie sich drei Listeners
mit jeweils mindestens drei Methoden und schreiben Sie dazupassende Adapterklassen.