Programavimas

Renginiai ir klausytojai

Kaip sukurti pasirinktinį įvykį ir kaip jį suaktyvinti, kad komponentas galėtų gauti įvykį?

Prieš žiūrėdami į pasirinktinį įvykį, galime pažvelgti į jau esamą įvykį: „ActionEvent“.

Tokie komponentai kaip Mygtukas ir JMygtukas ugnis „ActionEvents“ nurodyti tam tikrą komponento apibrėžtą veiksmą. Pavyzdžiui, Mygtukas apšaudo „ActionEvent“ kai tik vartotojas jį paspaus. Visa įvykio esmė yra informuoti klausytoją, kad kažkas nutiko GUI komponentui. Į įvykį įtraukiama visa informacija, kurios klausytojui reikia norint sužinoti, kas nutiko ir kam įvyko (kas ir kas įvykio). Įvykis turi suteikti pakankamai informacijos, kad galėtų visiškai save apibūdinti. Tokiu būdu klausytojas gali suprasti, kas tiksliai įvyko, ir atsakyti prasmingai.

„ActionEvent“ apima veiksmo komandų eilutės, modifikatorių ir identifikavimo eilutės išmokimo metodus. „getActionCommand“ () metodas grąžina komandų eilutę, nurodančią numatomą įvykio veiksmą, pvz., spausdinti arba kopijuoti (ką). „getSource“ () metodas pateikia objektą, kuris generuoja įvykį (kas).

Norėdami gauti „ActionEvent“klausytojas turi įdiegti „ActionListener“ sąsają ir užregistruokite save komponente. Be to, komponentas turi sekti savo klausytojus, kad praneštų jiems apie įvykį.

Naudojant „ActionEvent“ Kaip pavyzdį, mes galime lengvai pamatyti komponentus, reikalingus komponentui generuoti įvykį, o klausytojui - klausytis įvykio. Aukštu lygiu yra trys dalys:

  1. Komponentas
  2. Renginio klasė
  3. Klausytojo sąsaja

Pažvelkime į kiekvieną atskirai.

Komponentas

Komponentai generuoja įvykius. Įvykis yra komponento būdas pranešti klausytojui, kad kažkas įvyko. Todėl komponentas turi suteikti įvykių klausytojų registravimo ir išregistravimo mechanizmą. Komponentas taip pat turi sekti savo klausytojus ir perduoti įvykius tiems klausytojams.

Registravimo / išregistravimo ir stebėjimo mechanika paliekama atskiram komponentui. Tačiau komponentas paprastai turi addXXXListener ir pašalinti „XXXListener “ kiekvienam įvykio tipui, kurį jis generuoja. Viduje komponentas gali laikyti klausytoją, kad ir kaip jis pasirinktų; paprastai komponentai klausytojus saugo a java.util.Vektorius arba javax.swing.event.EventListenerList. Norėdami paleisti įvykį savo klausytojams, komponentas tiesiog peržiūri savo klausytojų sąrašą ir perduoda įvykį kiekvienam klausytojui iškvietęs klausytojo įvykio išsiuntimo metodą.

Atėjo laikas pateikti pavyzdį:

... EventListenerList xxxListeners = new EventListnerList (); public void addXXXListener (XXXListener klausytojas) {xxxListeners.add (XXXListener.class, klausytojas); } public void removeXXXListener (XXXListener klausytojas) {xxxListeners.remove (XXXListener.class, klausytojas); } protected void fireXXX (XXXEvent xxxEvent) {Object [] klausytojai = xxxListeners.getListenerList (); // peržvelkite kiekvieną klausytoją ir, jei reikia, perduokite įvykį Int numListeners = klausytojai.length; už (int i = 0; i

Šis pavyzdys rodo, kaip registruoti, išregistruoti ir suaktyvinti įvykius XXXEvent. Klausytojai gali patys užsiregistruoti ir išregistruoti per addXXXListener () ir pašalintiXXXListener () metodai. Įvykus įvykiui, komponentas sukuria įvykio objektą ir perduoda jį „fireXXX“ () metodas, kur jis perduodamas klausytojams.

Pavyzdys apibūdina bendrą receptą, kurio gali laikytis visi komponentai. Tačiau, kad pavyzdys veiktų, turite apibrėžti XXXEvent ir an „XXXListener“ sąsaja.

Renginio klasė

Renginyje yra visa informacija, reikalinga klausytojui išsiaiškinti, kas nutiko. Pateikta informacija iš tikrųjų yra susijusi su įvykiu. Tiesiog gerai pagalvokite apie renginį ir suplanuokite renginio klasę, kad joje būtų visa reikalinga informacija, kad klausytojas galėtų visiškai apibūdinti įvykį. Įvykiai paprastai pratęsia java.awt.AWTEvent renginio klasė.

Klausytojo sąsaja

Įvykių klausytojo sąsaja apibrėžia metodus, kuriuos komponentas naudoja įvykiams siųsti. Kiekvienas įvykio tipas klausytojo sąsajoje turės bent vieną atitinkamą siuntimo metodą.

Klausytojo sąsaja pateikiama tokiu bendru formatu:

viešoji sąsaja „XXXListener“ pratęsia „EventListener“ {// įvykių išsiuntimo metodus kažkasHappened (XXXEvent e); kažkasElseHappened (XXXEvent e); ...} 

Norėdami klausytis įvykio, klausytojas turi įdiegti „XXXListener“ sąsają ir užregistruokite save komponente. Įvykus įvykiui, komponentas iškvies tinkamą išsiuntimo metodą. Metodai yra apibrėžti sąsajoje, kad bet kuris objektas galėtų priimti įvykį. Kol klausytojas įgyvendins sąsają, komponentas žinos, kaip išsiųsti įvykį klausytojui.

Apvyniojimas

Kaip matote, tarp kai kurių kūrinių yra priklausomybių. Klausytojo sąsaja tiesiogiai atitinka įvykį. Įvykis būtinai yra išsiuntimo metodo argumentas.

Komponentas tiesiogiai atitinka įvykį ir klausytoją. Ji turi žinoti apie kiekvieną, kad galėtų kurti renginius, išsiųsti įvykius ir registruoti klausytojus.

Skirtingai nuo kitų dviejų kūrinių, įvykio objektas yra nepriklausomas. Todėl daugelis komponentų gali laisvai paleisti įvykio tipą. Be to, kelios sąsajos gali apibrėžti įvykio išsiuntimo metodus.

Tony Sintesas yra pagrindinis „BroadVision“ konsultantas. Tony, „Sun“ sertifikuotas „Java 1.1“ programuotojas ir „Java 2“ kūrėjas, dirba su „Java“ nuo 1997 m.

Šią istoriją „Įvykiai ir klausytojai“ iš pradžių paskelbė „JavaWorld“.

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