Programmēšana

Notikumi un klausītāji

Kā izveidot pielāgotu notikumu un kā to aktivizēt, lai komponents varētu iegūt notikumu?

Pirms aplūkot pielāgotu notikumu, ļauj apskatīt jau esošu notikumu: ActionEvent.

Tādi komponenti kā Poga un JPoga aizdedzināt ActionEvents lai norādītu kāda veida komponenta definētu darbību. Piemēram, Poga izšauj ActionEvent ikreiz, kad lietotājs to nospiež. Viss notikuma mērķis ir informēt klausītāju, ka kaut kas ir noticis ar GUI komponentu. Notikums ietver visu informāciju, kas klausītājam ir nepieciešama, lai noskaidrotu, kas notika un ar ko tas notika (kas un kas no notikuma). Pasākumam jāsniedz pietiekami daudz informācijas, lai sevi pilnībā raksturotu. Tādā veidā klausītājs var saprast, kas tieši notika, un atbildēt jēgpilni.

The ActionEvent ietver metodes darbības komandu virknes, modifikatoru un identifikācijas virkņu apguvei. The getActionCommand () method atgriež komandu virkni, kas norāda notikuma paredzēto darbību, piemēram, drukāt vai kopēt (kas). The getSource () method atgriež objektu, kas ģenerē notikumu (kurš).

Lai saņemtu ActionEventklausītājam ir jāievieš ActionListener interfeisu un reģistrēt sevi komponentā. Turklāt komponentam jāseko līdzi klausītājiem, lai paziņotu viņiem par notikumu.

Izmantojot ActionEvent Kā paraugu mēs varam viegli redzēt detaļas, kas nepieciešamas komponentam, lai ģenerētu notikumu, un klausītāju, lai klausītos notikumu. Augstā līmenī ir trīs gabali:

  1. Komponents
  2. Pasākuma klase
  3. Klausītāja interfeiss

Apskatīsim katru atsevišķi.

Komponents

Komponenti ģenerē notikumus. Notikums ir komponenta veids, kā informēt klausītāju, ka kaut kas ir noticis. Tāpēc komponentam jānodrošina mehānisms, lai reģistrētu un reģistrētu notikumu klausītājus. Komponentam ir arī jāseko klausītājiem un jānodod notikumi šiem klausītājiem.

Reģistrācijas / reģistrācijas atcelšanas un izsekošanas mehānika tiek atstāta atsevišķa komponenta ziņā. Tomēr komponentam parasti ir addXXXListener un noņemtXXXListener katram notikuma veidam, ko tas ģenerē. Iekšēji komponents var glabāt klausītāju neatkarīgi no tā, ko tā izvēlas; parasti tomēr komponenti glabā klausītājus a java.util.Vektors vai javax.swing.event.EventListenerList. Lai aktivizētu notikumu tā klausītājiem, komponents vienkārši iepazīstas ar savu klausītāju sarakstu un nodod notikumu katram klausītājam, izsaucot klausītāja notikuma nosūtīšanas metodi.

Ir pienācis laiks sniegt piemēru:

... EventListenerList xxxListeners = new EventListnerList (); public void addXXXListener (XXXListener klausītājs) {xxxListeners.add (XXXListener.class, klausītājs); } public void removeXXXListener (XXXListener klausītājs) {xxxListeners.remove (XXXListener.class, klausītājs); } protected void fireXXX (XXXEvent xxxEvent) {Object [] klausītāji = xxxListeners.getListenerList (); // cilpa caur katru klausītāju un, ja nepieciešams, nododiet notikumu Int numListeners = klausītāji.length; par (int i = 0; i

Šis piemērs parāda, kā reģistrēt, dereģistrēt un aktivizēt šāda veida notikumus XXXEvent. Klausītāji var reģistrēties un reģistrēties paši, izmantojot addXXXListener () un noņemtXXXListener () metodes. Kad notiek notikums, komponents izveido notikuma objektu un nodod to fireXXX () metodi, kur to nodod klausītājiem.

Piemērā ir definēta vispārēja recepte, kurai var sekot visi komponenti. Tomēr, lai piemērs darbotos, jums ir jādefinē XXXEvent un an XXXListener interfeiss.

Pasākuma klase

Pasākumā ir visa informācija, kas nepieciešama klausītājam, lai saprastu, kas noticis. Iekļautā informācija patiešām ir raksturīga notikumam. Vienkārši rūpīgi padomājiet par pasākumu un noformējiet pasākuma klasi, lai turētu visu nepieciešamo informāciju, lai pilnībā aprakstītu notikumu klausītājam. Notikumi parasti paplašina java.awt.AWTEvent pasākuma klase.

Klausītāja interfeiss

Notikumu klausītāja saskarne nosaka metodes, kuras komponents izmanto notikumu nosūtīšanai. Katram notikumu veidam būs vismaz viena atbilstoša nosūtīšanas metode klausītāja saskarnē.

Klausītāja saskarnei ir šāds vispārīgs formāts:

publiskā saskarne XXXListener paplašina EventListener {// notikumu nosūtīšanas metodes somethingHappened (XXXEvent e); somethingElseHappened (XXXEvent e); ...} 

Lai klausītos notikumu, klausītājam ir jāievieš XXXListener interfeisu un reģistrēt sevi komponentā. Kad notiek notikums, komponents izsauks pareizo nosūtīšanas metodi. Metodes ir definētas saskarnē, lai notikumu varētu saņemt jebkurš objekts. Kamēr klausītājs ievieš saskarni, komponents zinās, kā nosūtīt notikumu klausītājam.

Satīt

Kā redzat, starp dažiem gabaliem pastāv atkarības. Klausītāja interfeiss tieši atbilst notikumam. Notikums ir obligāti nosūtīšanas metodes arguments.

Komponents tieši atbilst notikumam un klausītājam. Tai jāzina par katru, lai tā varētu izveidot pasākumus, nosūtīt notikumus un reģistrēt klausītājus.

Atšķirībā no pārējiem diviem gabaliem, pasākuma objekts ir neatkarīgs. Tā rezultātā daudzi komponenti var atbrīvot notikuma veidu. Turklāt vairākās saskarnēs var noteikt metodes notikuma nosūtīšanai.

Tonijs Sintess ir galvenais BroadVision konsultants. Tonijs, Sun sertificēts Java 1.1 programmētājs un Java 2 izstrādātājs, strādā ar Java kopš 1997. gada.

Šo stāstu “Notikumi un klausītāji” sākotnēji publicēja JavaWorld.

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