Kuinka luot mukautetun tapahtuman ja miten käynnistät sen, jotta komponentti voi saada tapahtuman?
Ennen kuin katsot mukautettua tapahtumaa, tarkastellaan jo olemassa olevaa tapahtumaa: ActionEvent
.
Komponentit, kuten Painike
ja JPainike
tulipalo pois Toiminta Tapahtumat
osoittamaan jonkinlaista komponentin määrittelemää toimintaa. Esimerkiksi Painike
ampuu pois ActionEvent
aina kun käyttäjä painaa sitä. Tapahtuman koko tarkoitus on ilmoittaa kuuntelijalle, että GUI: n komponentille on tapahtunut jotain. Tapahtuma sisältää kaikki tiedot, jotka kuuntelijan on selvitettävä, mitä tapahtui ja kenelle se tapahtui (mitä ja kenelle tapahtumasta). Tapahtuman on annettava riittävästi tietoa kuvaamaan itseään täysin. Tällä tavalla kuuntelija voi selvittää, mitä tapahtui, ja vastata mielekkäästi.
ActionEvent
sisältää menetelmät toiminnon komentosarjan, muokkaajien ja tunnistemerkkijonon oppimiseksi. getActionCommand ()
method palauttaa komentosarjan, joka ilmaisee tapahtuman suunnitellun toiminnon, kuten tulosta tai kopioi (mitä). getSource ()
method palauttaa tapahtuman generoivan objektin (kuka).
Saadakseen ActionEvent
, kuuntelijan on toteutettava ActionListener
käyttöliittymä ja rekisteröidy komponenttiin. Lisäksi komponentin on seurattava kuuntelijoitaan ilmoittaakseen heille tapahtumasta.
Käyttämällä ActionEvent
Esimerkiksi mallina voimme helposti nähdä kappaleet, jotka tarvitaan komponentille tapahtuman luomiseen ja kuuntelijan tapahtuman kuuntelemiseen. Korkealla tasolla on kolme kappaletta:
- Komponentti
- Tapahtuman luokka
- Kuuntelijan käyttöliittymä
Katsotaanpa kutakin erikseen.
Komponentti
Komponentit tuottavat tapahtumia. Tapahtuma on komponentin tapa kertoa kuuntelijalle, että jotain on tapahtunut. Siksi komponentin on tarjottava mekanismi tapahtumakuuntelijoiden rekisteröimiseksi ja rekisteröinnin poistamiseksi. Komponentin on myös seurattava kuuntelijoita ja välitettävä tapahtumat näille kuuntelijoille.
Rekisteröinnin / rekisteröinnin poistamisen ja seurannan mekaniikka jätetään yksittäisen komponentin tehtäväksi. Komponentilla on kuitenkin yleensä addXXXListener
ja poistaXXXListener
jokaiselle tapahtumalle, jonka se tuottaa. Sisäisesti komponentti voi tallentaa kuuntelijan valitsemaansa tapaan; yleensä kuitenkin komponentit tallentavat kuuntelijat a java.util. vektori
tai javax.swing.event.EventListenerList
. Käynnistääkseen tapahtuman kuuntelijoilleen komponentti yksinkertaisesti kuuntelee kuuntelijaluettelonsa ja välittää tapahtuman jokaiselle kuuntelijalle kutsumalla kuuntelijan tapahtumien lähettämistavan.
On aika antaa esimerkki:
... EventListenerList xxxListeners = new EventListnerList (); public void addXXXListener (XXXListener kuuntelija) {xxxListeners.add (XXXListener.class, kuuntelija); } public void removeXXXListener (XXXListener kuuntelija) {xxxListeners.remove (XXXListener.class, kuuntelija); } suojattu void fireXXX (XXXEvent xxxEvent) {Object [] kuuntelijat = xxxListeners.getListenerList (); // silmukoita jokaisen kuuntelijan läpi ja välitä tapahtuma tarvittaessa Int. kuuntelijat = kuuntelijat.pituus; varten (int i = 0; i
Tämä esimerkki näyttää, kuinka rekisteröidä, poistaa rekisteröinti ja käynnistää tyyppisiä tapahtumia XXXEvent
. Kuuntelijat voivat rekisteröityä ja rekisteröidä itsensä addXXXListener ()
ja poistaXXXListener ()
menetelmiä. Kun tapahtuma tapahtuu, komponentti luo tapahtumaobjektin ja välittää sen paloXXX ()
menetelmä, jossa se välitetään kuuntelijoille.
Esimerkki määrittelee yleisen reseptin, jota kaikki komponentit voivat noudattaa. Jotta esimerkki toimisi, sinun on kuitenkin määritettävä XXXEvent
ja XXXListener
käyttöliittymä.
Tapahtuman luokka
Tapahtuma sisältää kaikki tarvittavat tiedot, jotta kuuntelija voi selvittää, mitä tapahtui. Mukana olevat tiedot ovat todella tapahtumakohtaisia. Ajattele vain tapahtumaa huolellisesti ja suunnittele tapahtumaluokka pitämään kaikki tarvittavat tiedot tapahtuman täydelliseen kuvaamiseen kuuntelijalle. Tapahtumat tavallisesti pidentävät java.awt.AWTEvent
tapahtumaluokka.
Kuuntelijan käyttöliittymä
Tapahtumakuuntelijan rajapinta määrittelee menetelmät, joita komponentti käyttää tapahtumien lähettämiseen. Jokaisella tapahtumalajilla on ainakin yksi vastaava lähetystapa kuuntelijan käyttöliittymässä.
Kuuntelijan käyttöliittymä on seuraavan yleisen muodon:
julkinen käyttöliittymä XXXListener laajentaa EventListener {// tapahtumien lähettämismenetelmiä somethingHappened (XXXEvent e); jotainElseHappened (XXXEvent e); ...}
Kuunnellakseen tapahtumaa, kuuntelijan on toteutettava XXXListener
käyttöliittymä ja rekisteröidy komponenttiin. Kun tapahtuma tapahtuu, komponentti kutsuu oikean lähetystavan. Menetelmät on määritelty käyttöliittymässä, jotta kuka tahansa objekti voi vastaanottaa tapahtuman. Niin kauan kuin kuuntelija toteuttaa käyttöliittymän, komponentti tietää kuinka lähettää tapahtuma kuuntelijalle.
Paketoida
Kuten näette, joidenkin kappaleiden välillä on riippuvuuksia. Kuuntelijan käyttöliittymä vastaa suoraan tapahtumaa. Tapahtuma on välttämättä lähetystavan argumentti.
Komponentti vastaa suoraan tapahtumaa ja kuuntelijaa. Sen on tiedettävä jokaisesta, jotta se voi luoda tapahtumia, lähettää tapahtumia ja rekisteröidä kuuntelijoita.
Toisin kuin kaksi muuta kappaletta, tapahtumaobjekti on riippumaton. Tämän seurauksena monet komponentit voivat vapaasti laukaista tapahtuman tyypin. Lisäksi useat rajapinnat voivat määritellä tapoja lähettää tapahtuma.
Tony Sintes on BroadVisionin pääkonsultti. Tony, Sun-sertifioitu Java 1.1 -ohjelmoija ja Java 2 -kehittäjä, on työskennellyt Javan kanssa vuodesta 1997.Tämän tarinan "Tapahtumat ja kuuntelijat" julkaisi alun perin JavaWorld.