Advanced   Java   Services Eventhandling Back Next Up Home
Übungen

ActionListener

  1. 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.

    1. Empfängerklasse ist Hauptklasse (MyFrame).
    2. Empfängerklasse ist innere Klasse .
    3. Empfängerklasse ist anonyme Klasse .
    4. Empfängerklasse ist top-level Klasse .

    Verwenden Sie zum Schließen des Fenster noch den WindowCloser.

  2. 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.

    1. Empfängerklasse ist Hauptklasse, d.h. es gibt nur einen Empänger.
    2. Schreiben Sie für jeden Button einen eigenen Handler als innere Klasse .
    3. Schreiben Sie für jeden Button einen eigenen Handler als anonyme Klasse .

    Verwenden Sie zum Schließen des Fenster noch den WindowCloser.

  3. 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

  1. 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.

  2. 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.

  3. 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

  1. 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.

  2. Wie vorher, aber verwenden Sie nun eine Adapterklasse als innere Klasse und in ihr nur eine einzige Methode, eben die zum Beenden der Anwendung.

  3. Wie vorher, aber verwenden Sie die Adapterklasse als anonyme Klasse.

TextListener u.a.

  1. 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.

  2. Wie vorher, aber verwenden Sie für das TextFeld setEchoChar('*') um aus dem TextFeld ein PasswortFeld zu machen.

  3. 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.

  4. 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)

  5. 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".

  6. 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.

  7. 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() )

  8. Wie oben, aber fangen sie die NumberFormatException ab, die parseDouble() wirft.

  9. 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.

  10. 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

  1. 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.

  2. Wie oben, aber verwenden sie nun die Klasse MouseAdapter (und nur diese)

  3. Wie oben, aber verwenden sie nun die Klasse MouseMotionAdapter (und nur diese)

  4. Wie oben, aber verwenden sie nun die Klasse MouseInputAdapter.

  5. 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).

  6. 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

  1. Zu vielen Swinglisteners existieren (noch) keine Adapterklassen. Suchen Sie sich drei Listeners mit jeweils mindestens drei Methoden und schreiben Sie dazupassende Adapterklassen.

Valid XHTML 1.0 Strict Lösung top Back Next Up Home