Mekanisme Penanganan Acara Java
Ada 3 peran untuk peserta dalam mekanisme acara di Java:
1. THE OBYEK: Objek keadaan peristiwa, digunakan dalam metode pendengar yang sesuai, sebagai parameter, umumnya ada dalam metode pendengar.
2.Event Source: Sumber acara spesifik. Misalnya, jika Anda mengklik tombol, tombol adalah sumber acara. Jika Anda ingin tombol untuk menanggapi acara tertentu, Anda perlu mendaftarkan pendengar tertentu.
3.Event Listener: Tentukan metode Java yang jelas sesuai untuk terjadinya setiap peristiwa yang jelas. Metode -metode ini didefinisikan secara terpusat dalam antarmuka pendengar (EventListener), yang harus mewarisi java.util.eventlistener. Kelas yang mengimplementasikan beberapa atau semua metode dalam antarmuka pendengar acara adalah pendengar acara.
Ketika peristiwa terjadi, keadaan yang sesuai biasanya dienkapsulasi dalam objek negara bagian, yang harus diwarisi dari java.util.eventObject. Objek status peristiwa dilewati sebagai parameter tunggal ke metode pendengar yang harus menanggapi acara tersebut. Identitas sumber acara yang mengeluarkan acara tertentu adalah: mendefinisikan metode pendaftaran untuk pendengar acara sesuai dengan format desain yang ditentukan dan menerima referensi ke instance antarmuka pendengar acara yang ditentukan.
Untuk kelas acara mendengarkan tertentu, ketika mendengarkan objek acara, ia memanggil metode yang sesuai dan memprosesnya.
Mari kita lihat paket acara yang disediakan oleh JDK:
Public Interface EventListener: Antarmuka tag yang semua antarmuka pendengar acara harus diperpanjang.
Kelas publik EventObject memperluas objek mengimplementasikan serializable
Semua objek negara bagian akan memperoleh kelas root dari mana mereka berada. Semua peristiwa merujuk "sumber" objek ketika dibangun, yang secara logis dianggap sebagai objek yang awalnya terjadi tentang peristiwa tersebut.
(1) Buat kelas DoorEvent melalui file DoorEvent.java, yang mewarisi EventObject.
/*** Untuk mendefinisikan objek acara, Anda harus mewarisi EventObject*/Public Class DoorEvent memperluas EventObject {private static final long serialversionuid = 6496098798146410884L; Private String DoorState = ""; // Menunjukkan status pintu, ada dua jenis DoorEvent publik (sumber objek, String Doorstate) {Super (Source); this.doorstate = Doorstate; } public void setDoorState (String DoorState) {this.doorstate = DoorState; } public String getDoorState () {return this.doorstate; }}(2) mendefinisikan antarmuka mendengarkan acara baru, yang diwarisi dari EventListener; Antarmuka ini berisi pawang untuk acara DoorEvent:
/*** Tentukan antarmuka mendengarkan, bertanggung jawab untuk mendengarkan peristiwa DoorEvent*/antarmuka publik DoorListener memperluas EventListener {public void doorEvent (Acara DoorEvent);}Melalui antarmuka di atas, kami mendefinisikan kelas mendengarkan acara, yang secara khusus mengimplementasikan fungsi mendengarkan dan fungsi penanganan acara.
/*** Kelas ini mengimplementasikan antarmuka mendengarkan pintu 1, dan melakukan tindakan pembukaan dan penutupan pintu tertentu*/Kelas publik DoorListener1 mengimplementasikan DoorListener {@Override public void doorEvent (Event DoorEvent) {// TODO Metode yang dihasilkan secara otomatis () .getDoorState ()! = Null && event.getoStateState () .get.getDoorState ()! = Null && event.getoStateState (). ")."). System.out.println ("Door1 Open"); } else {system.out.println ("door1 closed"); }}}/*** Kelas ini mengimplementasikan antarmuka mendengarkan pintu 2, yang melakukan pembukaan pintu tertentu, penutupan pintu, dan pembukaan cahaya dan tindakan penutupan cahaya*/Public Class DoorListener2 mengimplementasikan DoorListener {@Override public void doorEvent (event DoorEvent) {// TODO Auto-dihasilkan metode Stub Metode if (event.getSateState () {// TODO AUTO-METODE AUTO-METOD event.getdoorstate (). Equals ("open")) {System.out.println ("Door2 terbuka, menyalakan cahaya di koridor pada saat yang sama"); } else {System.out.println ("Door2 ditutup, menyalakan lampu di koridor pada saat yang sama"); }}}(3) Buat kelas sumber acara melalui doormanager.java, yang menggunakan objek pendengar koleksi untuk menyimpan semua objek pendengar acara. Metode penyimpanan adalah melalui AddDoorListener (..). NotifyListeners (..) adalah metode yang memicu peristiwa, yang digunakan untuk memberi tahu sistem: peristiwa telah terjadi, dan Anda dapat memanggil fungsi pemrosesan yang sesuai.
/*** Objek Sumber Acara, di sini Anda dapat membayangkannya sebagai remote control yang mengontrol pembukaan dan penutupan pintu,*(jika sedang dalam ayunan, mirip dengan tombol)*/Doormanager kelas publik {pendengar koleksi pribadi; / ** * Tambahkan acara * * @param listener * DoorListener */ public void addDoorListener (DoorListener Listener) {if (listeners == null) {listeners = new HashSet (); } listeners.add (pendengar); } / ** * Hapus acara * * @param listener * DoorListener * / public void RemovedoorListener (DoorListener Listener) {if (listeners == null) kembali; listeners.remove (pendengar); } / *** Memicu acara pembukaan pintu* / void fireworkspaceopened () {if (listeners == null) kembali; Acara DoorEvent = DoorEvent baru (ini, "terbuka"); NotifyListeners (acara); } / *** Memicu peristiwa penutup pintu* / void fireworkspaceclosed () {if (listeners == null) kembali; Acara DoorEvent = DoorEvent baru (ini, "tutup"); NotifyListeners (acara); } / ** * Beri tahu semua DoorListeners * / private void notifyListeners (Acara DoorEvent) {iterator iter = listeners.iterator (); while (iter.hasnext ()) {DoorListener listener = (DoorListener) iter.next (); listener.doorevent (acara); }}}(4) Oke, akhirnya tulis program tes untuk menguji acara khusus kami. Program ini seharusnya tidak sulit dimengerti :)
/*** Program utama dibayangkan sebagai siapa yang ingin membuka pintu*/kelas publik doormain {public static void main (string [] args) {doormanager manager = doormanager baru (); Manager.AdddoorListener (DoorListener baru ()); // Tambahkan pendengar ke Door 1 Manager.adddoorListener (DoorListener baru ()); // Tambahkan pendengar ke pintu 2 // buka Door Manager.Fireworkspaceopened (); System.out.println ("Aku sudah masuk"); // tutup manajer.fireworkspaceclosed (); }}Jalankan Doormain
Pintu 1 membuka pintu 2 terbuka, saat membuka lampu di koridor
Saya sudah masuk
Pintu 1 menutup pintu 2 tutup, sambil menutup lampu koridor
Terima kasih telah membaca, saya harap ini dapat membantu Anda. Terima kasih atas dukungan Anda untuk situs ini!