16.11.2013 Aufrufe

Programmieren in Java - HostFiXX.de

Programmieren in Java - HostFiXX.de

Programmieren in Java - HostFiXX.de

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Programmieren</strong> <strong>in</strong> <strong>Java</strong><br />

3.1.6 Der Weg e<strong>in</strong>es Ereignisses<br />

Je<strong>de</strong> Ereignisquelle besitzt e<strong>in</strong>e Reihe von Metho<strong>de</strong>n, die für das Aufbereiten und<br />

Verteilen <strong>de</strong>r Nachricht zuständig s<strong>in</strong>d. Beim Weiterreichen e<strong>in</strong>er Nachricht wird<br />

<strong>in</strong>nerhalb <strong>de</strong>r Nachrichtenquelle die Metho<strong>de</strong> processEvent aufgerufen. Diese<br />

verteilt die Nachricht anhand ihres Typs an spezialisierte Metho<strong>de</strong>n, <strong>de</strong>ren Name<br />

sich nach <strong>de</strong>m Typ <strong>de</strong>r zugehörigen Ereignisquelle richtet:<br />

protected void processComponentEvent(ComponentEvent e)<br />

protected void processFocusEvent(FocusEvent e)<br />

protected void processKeyEvent(KeyEvent e)<br />

protected void processMouseEvent(MouseEvent e)<br />

protected void processMouseMotionEvent(MouseEvent e)<br />

protected void processActionEvent(ActionEvent e)<br />

Abb.: Spezialisierte Metho<strong>de</strong>n für das Event-Handl<strong>in</strong>g<br />

"processEvent" bzw. die spezialisierten Metho<strong>de</strong>n für das Event-Handl<strong>in</strong>g wer<strong>de</strong>n<br />

nur aufgerufen, wenn <strong>de</strong>r entsprechen<strong>de</strong> Ereignistyp für diese Ereignisquelle aktiviert<br />

wur<strong>de</strong>. Dies geschieht <strong>in</strong> folgen<strong>de</strong>n Fällen:<br />

- E<strong>in</strong> passen<strong>de</strong>r Ereignisempfänger wur<strong>de</strong> über die zugehörige addEventListener-Metho<strong>de</strong><br />

registriert.<br />

- E<strong>in</strong> Ereignistyp wur<strong>de</strong> explizit durch Aufruf <strong>de</strong>r Metho<strong>de</strong> protected f<strong>in</strong>al void<br />

enableEvents(long eventsToEnable) aktiviert. Die Metho<strong>de</strong> erwartet e<strong>in</strong>e Maske, die<br />

durch e<strong>in</strong>e bitweise O<strong>de</strong>r-Verknüpfung passen<strong>de</strong>r Konstanten aus <strong>de</strong>r Klasse AWTEvent<br />

zusammengesetzt wer<strong>de</strong>n kann. Folgen<strong>de</strong> Bitmasken akzeptiert diese Metho<strong>de</strong>:<br />

ACTION_EVENT_MASK<br />

ADJUSTMENT_EVENT_MASK<br />

COMPONENT_EVENT_MASK<br />

CONTAINER_EVENT_MASK<br />

FOCUS_EVENT_MASK<br />

ITEM_EVENT_MASK<br />

KEY_EVENT_MASK<br />

MOUSE_EVENT_MASK<br />

MOUSE_MOTION_EVENT_MASK<br />

TEXT_EVENT_MASK<br />

WINDOW_EVENT_MASK<br />

Die Namen dieser Bitmasken verweisen auf die Namen <strong>de</strong>r Ereignisklassen, für<br />

<strong>de</strong>ren Objekte sie <strong>de</strong>n Ereignisfilter durchlässig schalten. Sollen mehrere aktiviert<br />

wer<strong>de</strong>n, dann ist diese Komb<strong>in</strong>ation durch Addition bzw. bitweises O<strong>de</strong>r möglich,<br />

z.B.:<br />

enableEvents(ACTION_EVENT_MASK + WINDOW_EVENT_MASK)<br />

bzw.<br />

enableEvents(ACTION_EVENT_MASK | WINDOW_EVENT_MASK)<br />

Sobald e<strong>in</strong> soches Ereignis erzeugt wird, sieht se<strong>in</strong> Weg dann folgen<strong>de</strong>rmaßen aus:<br />

1. Die Metho<strong>de</strong> processEvent <strong>de</strong>r eigenen Klasse erhält das Ereignis<br />

2. Nach <strong>de</strong>r Ereignisverarbeitung wird die Metho<strong>de</strong> <strong>de</strong>r Subklasse aufgerufen<br />

3. Diese prüft <strong>de</strong>n Ereignistyp und ruft dann typspezifische process...Event-Metho<strong>de</strong>n auf, z.B.<br />

processActionEvent, processFocusEvent.<br />

4. Diese prüfen, ob Listener registriert s<strong>in</strong>d, und rufen sie gegebenenfalls auf.<br />

5. Nach diesen Aufrufen wird die Metho<strong>de</strong> processEvent <strong>de</strong>r nächsten Superklasse aufgerufen.<br />

219

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!