Programovanie

Podujatia a poslucháči

Ako vytvoríte vlastnú udalosť a ako ju aktivujete, aby komponent mohol získať udalosť?

Predtým, ako sa pozrieme na vlastnú udalosť, pozrime sa na už existujúcu udalosť: the ActionEvent.

Komponenty ako Tlačidlo a JButton vypáliť Akčné udalosti na označenie určitého druhu činnosti definovanej ako súčasť. Napríklad Tlačidlo vystrelí an ActionEvent kedykoľvek to užívateľ stlačí. Zmyslom udalosti je informovať poslucháča, že sa niečo stalo s komponentom v grafickom používateľskom rozhraní. Udalosť obsahuje všetky informácie, ktoré poslucháč potrebuje, aby zistil, čo sa stalo a komu sa stalo (čo a kto udalosti). Udalosť musí poskytnúť dostatok informácií na to, aby sa dala úplne opísať. Takto môže poslucháč prísť na to, čo sa presne stalo, a zmysluplne reagovať.

The ActionEvent zahŕňa metódy na naučenie sa príkazového reťazca akcie, modifikátorov a identifikačného reťazca. The getActionCommand () metóda vráti príkazový reťazec, ktorý označuje zamýšľanú akciu udalosti, napríklad tlač alebo kopírovanie (čo). The getSource () metóda vráti objekt, ktorý generuje udalosť (kto).

Za účelom získania ActionEvent, poslucháč musí implementovať ActionListener rozhranie a zaregistruje sa s komponentom. Komponent musí ďalej sledovať svojich poslucháčov, aby ich mohol informovať o udalosti.

Použitím ActionEvent napríklad ako model, môžeme ľahko vidieť kúsky potrebné na to, aby komponent vygeneroval udalosť, a poslucháča, ktorý si túto udalosť vypočuje. Na vysokej úrovni sú tri kúsky:

  1. Komponent
  2. Trieda udalosti
  3. Rozhranie poslucháča

Pozrime sa na každú zvlášť.

Komponent

Komponenty generujú udalosti. Udalosť je spôsob, ako dať komponentu poslucháčovi vedieť, že sa niečo stalo. Komponent preto musí poskytovať mechanizmus na registráciu a zrušenie registrácie poslucháčov udalostí. Komponent musí tiež sledovať svojich poslucháčov a prenášať udalosti na týchto poslucháčov.

Mechanika registrácie / odhlásenia a sledovania je ponechaná na jednotlivom komponente. Avšak komponent bude mať obvykle addXXXListener a removeXXXListener pre každý typ udalosti, ktorú generuje. Interne môže komponent ukladať poslucháča, akokoľvek si vyberie; obvykle však komponenty ukladajú poslucháčov do a java.util.Vector alebo javax.swing.event.EventListenerList. Ak chcete spustiť udalosť pre svojich poslucháčov, komponent jednoducho pretočí zoznam poslucháčov a odovzdá udalosť každému poslucháčovi volaním metódy odoslania udalosti poslucháča.

Je čas na príklad:

... EventListenerList xxxListeners = nový EventListnerList (); public void addXXXListener (poslucháč XXXListener) {xxxListeners.add (XXXListener.class, poslucháč); } public void removeXXXListener (XXXListener poslucháč) {xxxListeners.remove (XXXListener.class, poslucháč); } protected void fireXXX (XXXEvent xxxEvent) {Object [] listeners = xxxListeners.getListenerList (); // prelistujte každého poslucháča a v prípade potreby odovzdajte udalosť Int numListeners = listeners.length; pre (int i = 0; i

Tento príklad ukazuje, ako registrovať, zrušiť registráciu a spustiť udalosti typu XXXEvent. Poslucháči sa môžu zaregistrovať a odhlásiť z registrácie prostredníctvom servera addXXXListener () a removeXXXListener () metódy. Keď dôjde k udalosti, komponent vytvorí objekt udalosti a odovzdá ho fireXXX () metóda, pri ktorej sa postupuje poslucháčom.

Tento príklad definuje všeobecný recept, ktorým sa môžu riadiť všetky komponenty. Aby však príklad fungoval, musíte definovať znak XXXEvent a an XXXListener rozhranie.

Trieda udalosti

Táto udalosť obsahuje všetky informácie potrebné pre poslucháča, aby zistil, čo sa stalo. Zahrnuté informácie sú skutočne špecifické pre každú udalosť. Stačí si dobre premyslieť udalosť a navrhnúť triedu udalosti tak, aby obsahovala všetky informácie potrebné na jej úplné opísanie poslucháčovi. Udalosti zvyčajne predlžujú java.awt.AWTEvent trieda udalosti.

Rozhranie poslucháča

Rozhranie poslucháča udalostí definuje metódy používané komponentom na odosielanie udalostí. Každý typ udalosti bude mať v rozhraní poslucháča aspoň jednu zodpovedajúcu metódu odoslania.

Rozhranie poslucháča má nasledujúci všeobecný formát:

verejné rozhranie XXXListener rozširuje EventListener {// metódy odosielania udalostí somethingHappened (XXXEvent e); somethingElseHappened (XXXEvent e); ...} 

Ak chce poslucháč počúvať udalosť, musí implementovať XXXListener rozhranie a zaregistruje sa s komponentom. Ak dôjde k udalosti, komponent zavolá správnu metódu odoslania. Metódy sú definované v rozhraní tak, aby udalosť mohol prijať akýkoľvek objekt. Pokiaľ poslucháč implementuje rozhranie, komponent bude vedieť, ako odoslať udalosť poslucháčovi.

Zabaliť

Ako vidíte, medzi jednotlivými časťami existujú závislosti. Rozhranie poslucháča zodpovedá priamo udalosti. Udalosť je nevyhnutne argumentom metódy odoslania.

Komponent priamo korešponduje s udalosťou a poslucháčom. Musí o každom vedieť, aby mohol vytvárať udalosti, odosielať udalosti a registrovať poslucháčov.

Na rozdiel od ďalších dvoch častí je objekt udalosti nezávislý. Výsledkom je, že mnoho komponentov môže vypáliť typ udalosti. Viaceré rozhrania môžu ďalej definovať metódy na odoslanie udalosti.

Tony Sintes je hlavným konzultantom spoločnosti BroadVision. Tony, programátor Java 1.1 a vývojár Java 2, ktorý je certifikovaný spoločnosťou Sun, pracoval s Java od roku 1997.

Tento príbeh, „Udalosti a poslucháči“, bol pôvodne publikovaný spoločnosťou JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found