Ohjelmointi

Tapahtumat ja kuuntelijat

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:

  1. Komponentti
  2. Tapahtuman luokka
  3. 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.

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