กลไกการจัดการเหตุการณ์ Java
มี 3 บทบาทสำหรับผู้เข้าร่วมในกลไกเหตุการณ์ใน Java:
1. วัตถุ EVENT: วัตถุสถานะเหตุการณ์ที่ใช้ในวิธีการที่สอดคล้องกันของผู้ฟังเป็นพารามิเตอร์โดยทั่วไปมีอยู่ในวิธีการฟัง
2. แหล่งที่มา: แหล่งเหตุการณ์เฉพาะ ตัวอย่างเช่นหากคุณคลิกที่ปุ่มปุ่มเป็นแหล่งเหตุการณ์ หากคุณต้องการให้ปุ่มตอบสนองต่อเหตุการณ์บางอย่างคุณต้องลงทะเบียนผู้ฟังเฉพาะ
3. ผู้ฟัง: กำหนดวิธี Java ที่ชัดเจนตามที่เกิดขึ้นของแต่ละเหตุการณ์ที่ชัดเจน วิธีการเหล่านี้ถูกกำหนดไว้จากส่วนกลางในอินเทอร์เฟซ Event Listener (EventListener) ซึ่งจะต้องสืบทอด java.util.eventListener คลาสที่ใช้วิธีการบางส่วนหรือทั้งหมดในอินเทอร์เฟซผู้ฟังเหตุการณ์คือผู้ฟังเหตุการณ์
เมื่อเหตุการณ์เกิดขึ้นสถานะที่สอดคล้องกันมักจะถูกห่อหุ้มในวัตถุสถานะเหตุการณ์ซึ่งจะต้องสืบทอดมาจาก java.util.eventObject วัตถุสถานะเหตุการณ์ถูกส่งผ่านเป็นพารามิเตอร์เดียวไปยังวิธีการฟังที่ควรตอบสนองต่อเหตุการณ์ ตัวตนของแหล่งที่มาของเหตุการณ์ที่ออกเหตุการณ์เฉพาะคือ: กำหนดวิธีการลงทะเบียนสำหรับผู้ฟังเหตุการณ์ตามรูปแบบการออกแบบที่ระบุและยอมรับการอ้างอิงถึงอินสแตนซ์อินเตอร์เฟสฟังเหตุการณ์ที่ระบุ
สำหรับคลาสเหตุการณ์การฟังที่เฉพาะเจาะจงเมื่อฟังวัตถุเหตุการณ์จะเรียกวิธีการที่สอดคล้องกันและประมวลผล
มาดูแพ็คเกจกิจกรรมที่จัดทำโดย JDK:
อินเทอร์เฟซสาธารณะ EventListener: แท็กอินเตอร์เฟสที่ต้องขยายอินเทอร์เฟซ Event Listener ทั้งหมด
EventObject ระดับสาธารณะขยายวัตถุใช้งานแบบอนุกรม
วัตถุสถานะเหตุการณ์ทั้งหมดจะได้รับคลาสรูทที่พวกเขาเป็น เหตุการณ์ทั้งหมดอ้างอิงวัตถุ "แหล่งที่มา" เมื่อสร้างขึ้นซึ่งถือว่าเป็นวัตถุที่เป็นวัตถุที่เกิดขึ้นในขั้นต้นเกี่ยวกับเหตุการณ์
(1) สร้างคลาส Doorevent ผ่านไฟล์ doorevent.java ซึ่งสืบทอด EventObject
/*** ในการกำหนดวัตถุเหตุการณ์คุณต้องสืบทอด EventObject*/ชั้นเรียนสาธารณะ ExideBject {Private Static Final Final Long Long SerialVersionUid = 6496098798146410884L; สตริงส่วนตัวประตูบ้าน = ""; // หมายถึงสถานะของประตูมีสองประเภทของประตูสาธารณะ (แหล่งที่มาของวัตถุ, สตริงหน้าประตู) {super (แหล่งที่มา); this.doorState = ประตูบ้าน; } โมฆะสาธารณะ setDoorState (String ประตูบ้าน) {this.DoorState = ประตูบ้าน; } สตริงสาธารณะ getDoorState () {return this.doorState; -(2) กำหนดอินเทอร์เฟซการฟังเหตุการณ์ใหม่ซึ่งสืบทอดมาจาก EventListener; อินเทอร์เฟซนี้มีตัวจัดการสำหรับกิจกรรม DoorEvent:
/*** กำหนดอินเทอร์เฟซการฟังซึ่งรับผิดชอบในการฟังเหตุการณ์ DoorEvent*/อินเตอร์เฟสสาธารณะ DoorListener ขยาย EventListener {โมฆะสาธารณะ Doorevent (เหตุการณ์ DoorEvent);}ผ่านอินเทอร์เฟซข้างต้นเรากำหนดคลาสการฟังเหตุการณ์ซึ่งใช้ฟังก์ชั่นการฟังและฟังก์ชั่นการจัดการเหตุการณ์โดยเฉพาะ
/*** คลาสนี้ใช้อินเทอร์เฟซการฟังประตู 1 และดำเนินการเปิดประตูเฉพาะและปิดการดำเนินการ*/ชั้นเรียนสาธารณะ Doorlistener1 ใช้งาน doorlistener {@Override โมฆะสาธารณะเป็นโมฆะประตู (เหตุการณ์ประตู) {// toDo วิธีการที่สร้างขึ้นอัตโนมัติ System.out.println ("Door1 Open"); } else {system.out.println ("door1 ปิด"); }}}/*** คลาสนี้ใช้อินเทอร์เฟซการฟังประตู 2 ซึ่งทำการเปิดประตูเฉพาะการปิดประตูและการเปิดไฟและการดำเนินการปิดไฟ*/ชั้นเรียนสาธารณะ Doorlistener2 ใช้งาน Doorlistener Event.getDoorState (). เท่ากับ ("เปิด")) {System.out.println ("Door2 เปิดเปิดไฟในทางเดินในเวลาเดียวกัน"); } else {system.out.println ("ปิดประตู 2 เปิดไฟในทางเดินในเวลาเดียวกัน"); -(3) สร้างคลาสต้นทางเหตุการณ์ผ่าน doormanager.java ซึ่งใช้วัตถุคอลเลกชันผู้ฟังเพื่อจัดเก็บวัตถุฟังเหตุการณ์ทั้งหมด วิธีการจัดเก็บคือผ่าน AdddoorListener (.. ) NotifyListeners (.. ) เป็นวิธีการที่กระตุ้นเหตุการณ์ซึ่งใช้เพื่อแจ้งระบบ: เหตุการณ์ได้เกิดขึ้นและคุณสามารถเรียกฟังก์ชันการประมวลผลที่เกี่ยวข้อง
/*** วัตถุแหล่งที่มาของเหตุการณ์ที่นี่คุณสามารถจินตนาการได้ว่ามันเป็นรีโมทคอนโทรลที่ควบคุมการเปิดและปิดประตู*(ถ้าอยู่ในวงสวิงมันคล้ายกับปุ่ม)*/Doormanager ชั้นเรียนสาธารณะ {ผู้ฟังคอลเลกชันส่วนตัว; / ** * เพิ่มเหตุการณ์ * * @param Listener * Doorlistener */ Public Void AdddoorListener (ผู้ฟัง Doorlistener) {ถ้า (ผู้ฟัง == null) {ผู้ฟัง = new HashSet (); } listeners.add (ผู้ฟัง); } / ** * ลบเหตุการณ์ * * @param Listener * Doorlistener * / โมฆะสาธารณะ RemovedoorListener (ผู้ฟัง Doorlistener) {ถ้า (ฟัง == null) กลับ; Listeners.remove (ผู้ฟัง); } / *** ทริกเกอร์เหตุการณ์การเปิดประตู* / การป้องกันโมฆะ Fireworkspaceopened () {ถ้า (ฟัง == null) กลับ; Event Doorevent = new Doorevent (นี้ "เปิด"); NotifyListeners (เหตุการณ์); } / *** ทริกเกอร์เหตุการณ์การปิดประตู* / การป้องกันโมฆะเป็นโมฆะ FireworksPaceClosed () {ถ้า (ฟัง == null) กลับ; Event Doorevent = new Doorevent (นี่ "ปิด"); NotifyListeners (เหตุการณ์); } / ** * แจ้งให้ผู้จัดทำประตูทั้งหมด * / โมฆะส่วนตัว NotifyListeners (เหตุการณ์ DoorEvent) {Iterator Iterfer = Listeners.Iterator (); ในขณะที่ (iter.hasnext ()) {doorlistener listener = (doorlistener) iter.next (); Listener.dooreVent (เหตุการณ์); -(4) โอเคในที่สุดก็เขียนโปรแกรมทดสอบเพื่อทดสอบเหตุการณ์ที่เรากำหนดเอง โปรแกรมนี้ไม่ควรเข้าใจยาก :)
/*** โปรแกรมหลักได้รับการจินตนาการว่าผู้ที่ต้องการเปิดประตู*/Doormain ชั้นเรียนสาธารณะ {โมฆะสาธารณะคงที่หลัก (สตริง [] args) {doormanager manager = new Doormanager (); manager.adddoorListener (New Doorlistener1 ()); // เพิ่มผู้ฟังลงในประตู 1 Manager.adddoorListener (New Doorlistener2 ()); // เพิ่มผู้ฟังลงในประตู 2 // Open Door Manager.Fireworkspaceopened () System.out.println ("ฉันเข้ามาแล้ว"); // close manager.fireworkspaceclosed (); -เรียกใช้ Doormain
ประตู 1 เปิดประตู 2 เปิดในขณะที่เปิดไฟในทางเดิน
ฉันเข้ามา
ประตู 1 ปิดประตู 2 ปิดขณะปิดไฟทางเดิน
ขอบคุณสำหรับการอ่านฉันหวังว่ามันจะช่วยคุณได้ ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!