Programování

Události a posluchači

Jak vytvoříte vlastní událost a jak ji aktivujete, aby součást mohla získat událost?

Než se podíváme na vlastní událost, podívejme se na již existující událost: ActionEvent.

Součásti jako Knoflík a JButton vypálit Akční akce k označení nějakého druhu akce definované komponentou. Například Knoflík vystřelí z ActionEvent kdykoli jej uživatel stiskne. Celým bodem události je informovat posluchače, že se něco stalo s komponentou v grafickém uživatelském rozhraní. Událost zahrnuje všechny informace, které posluchač potřebuje, aby zjistil, co se stalo a komu se to stalo (co a kdo události). Událost musí poskytnout dostatek informací, aby se mohla plně popsat. Tímto způsobem může posluchač zjistit, co se přesně stalo, a reagovat smysluplným způsobem.

The ActionEvent zahrnuje metody pro učení příkazového řetězce akce, modifikátorů a identifikačního řetězce. The getActionCommand () metoda vrací řetězec příkazu, který označuje zamýšlenou akci události, jako je tisk nebo kopírování (co). The getSource () metoda vrací objekt, který generuje událost (kdo).

Za účelem získání ActionEvent, posluchač musí implementovat ActionListener rozhraní a zaregistruje se u komponenty. Kromě toho musí komponenta sledovat své posluchače, aby je mohla upozornit na událost.

Pomocí ActionEvent příklad jako model, můžeme snadno vidět části nezbytné pro generování události komponentou a posluchače, který událost poslouchá. Na vysoké úrovni existují tři kusy:

  1. Komponenta
  2. Třída události
  3. Rozhraní posluchače

Podívejme se na každou zvlášť.

Komponenta

Komponenty generují události. Událost je způsob, jak dát komponenty posluchači vědět, že se něco stalo. Proto komponenta musí poskytovat mechanismus pro registraci a zrušení registrace posluchačů událostí. Komponenta musí také sledovat své posluchače a předávat události těmto posluchačům.

Mechanika registrace / zrušení registrace a sledování je ponechána na jednotlivé součásti. Součást však obvykle bude mít addXXXListener a removeXXXListener pro každý typ události, kterou generuje. Interně může komponenta ukládat posluchače, jakkoli si zvolí; obvykle však komponenty ukládají posluchače do a java.util.Vector nebo javax.swing.event.EventListenerList. Chcete-li vypnout událost svým posluchačům, komponenta jednoduše projde seznamem posluchačů a předá událost každému posluchači voláním metody odeslání události posluchače.

Je čas na příklad:

... EventListenerList xxxListeners = nový EventListnerList (); public void addXXXListener (posluchač XXXListener) {xxxListeners.add (XXXListener.class, posluchač); } public void removeXXXListener (posluchač XXXListener) {xxxListeners.remove (XXXListener.class, posluchač); } protected void fireXXX (XXXEvent xxxEvent) {Object [] posluchači = xxxListeners.getListenerList (); // projděte každého posluchače a v případě potřeby předejte událost Int numListeners = listeners.length; pro (int i = 0; i

Tento příklad ukazuje, jak zaregistrovat, zrušit registraci a aktivovat události typu XXXEvent. Posluchači se mohou zaregistrovat a odhlásit se prostřednictvím addXXXListener () a removeXXXListener () metody. Když dojde k události, komponenta vytvoří objekt události a předá jej fireXXX () metoda, kdy je předána posluchačům.

Příklad definuje obecný recept, kterým se mohou řídit všechny komponenty. Aby však příklad fungoval, musíte definovat XXXEvent a XXXListener rozhraní.

Třída události

Tato událost obsahuje všechny informace potřebné pro posluchače, aby zjistil, co se stalo. Zahrnuté informace jsou skutečně specifické pro konkrétní událost. Prostě si o události pečlivě promyslete a navrhněte třídu události tak, aby obsahovala veškeré informace potřebné k úplnému popisu události posluchači. Události obvykle prodlužují java.awt.AWTEvent třída události.

Rozhraní posluchače

Rozhraní posluchače událostí definuje metody používané komponentou k odesílání událostí. Každý typ události bude mít v rozhraní posluchače alespoň jednu odpovídající metodu odeslání.

Rozhraní posluchače má následující obecný formát:

veřejné rozhraní XXXListener rozšiřuje EventListener {// metody odesílání událostí somethingHappened (XXXEvent e); somethingElseHappened (XXXEvent e); ...} 

K naslouchání události musí posluchač implementovat XXXListener rozhraní a zaregistruje se u komponenty. Když dojde k události, komponenta zavolá správnou metodu odeslání. Metody jsou definovány v rozhraní, takže událost může přijmout jakýkoli objekt. Dokud posluchač implementuje rozhraní, komponenta bude vědět, jak událost odeslat posluchači.

Zabalit

Jak vidíte, mezi některými částmi existují závislosti. Rozhraní posluchače odpovídá přímo události. Událost je nutně argumentem metody odeslání.

Komponenta odpovídá přímo události a posluchači. Musí o každém vědět, aby mohl vytvářet události, odesílat události a registrovat posluchače.

Na rozdíl od ostatních dvou částí je objekt události nezávislý. Ve výsledku může mnoho komponent vypálit typ události. Více rozhraní může dále definovat metody pro odeslání události.

Tony Sintes je hlavním konzultantem společnosti BroadVision. Tony, programátor prostředí Java 1.1 a vývojář prostředí Java 2, pracoval se společností Java od roku 1997.

Tento příběh „Události a posluchači“ byl původně publikován společností JavaWorld.

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