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 ActionEvent
klausī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:
- Komponents
- Pasākuma klase
- 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.