آلية معالجة الأحداث Java
هناك 3 أدوار للمشاركين في آلية الأحداث في جافا:
1. كائن event: كائن حالة الحدث ، المستخدم في الطرق المقابلة للمستمع ، كمعلمات ، موجود بشكل عام في طريقة المستمع.
2. المصدر المصدر: مصدر الحدث المحدد. على سبيل المثال ، إذا قمت بالنقر فوق زر ، فإن الزر هو مصدر الحدث. إذا كنت تريد أن يستجيب الزر لأحداث معينة ، فأنت بحاجة إلى تسجيل مستمع معين.
3. مستمع: حدد طريقة Java واضحة وفقًا لذلك لحدوث كل حدث واضح. يتم تعريف هذه الطرق مركزيًا في واجهة مستمع الحدث (EventListener) ، والتي يجب أن ترث java.util.eventListener. الفصل الذي ينفذ بعض أو كل الطرق في واجهة مستمع الحدث هو مستمع الحدث.
عند حدوث الأحداث ، عادة ما يتم تغليف الحالة المقابلة في كائن حالة الحدث ، والتي يجب أن تكون ورثها من java.util.eventObject. يتم تمرير كائن حالة الحدث كمعلمة واحدة إلى طريقة المستمع التي يجب أن تستجيب للحدث. هوية مصدر الحدث الذي يصدر حدثًا معينًا هو: تحديد طريقة التسجيل لمستمع الحدث وفقًا لتنسيق التصميم المحدد ويقبل الإشارات إلى مثيل واجهة مستمع الأحداث المحدد.
بالنسبة إلى فئة حدث استماع محددة ، عندما يستمع إلى كائن الحدث ، فإنه يستدعي الطريقة المقابلة ويعالجها.
دعنا نلقي نظرة على حزمة الأحداث التي توفرها JDK:
الواجهة العامة eventlistener: واجهة العلامات التي يجب تمديد جميع واجهات مستمع الحدث.
EventObject من الطبقة العامة يمتد أدوات الكائنات القابلة للتسلسل
جميع كائنات حالة الحدث سوف تستمد فئة الجذر التي هم منها. تشير جميع الأحداث إلى "المصدر" للكائن عند بنائها ، والذي يعتبر منطقيًا هو الكائن الذي يحدث في البداية حول الحدث.
(1) إنشاء فئة doorevent من خلال ملف doorevent.java ، الذي يرث EventObject.
/*** لتحديد كائن الحدث ، يجب أن ترث EventObject*/Public Class Doorevent يمتد EventObject {Private Static Final Long SerialVersionuid = 6496098798146410884L ؛ SPIRESTER STRING Doorstate = "" ؛ // يشير إلى حالة الباب ، هناك نوعان من doorevent العامة (مصدر الكائن ، الأبواب السلسلة) {super (source) ؛ this.doorState = Doorstate ؛ } public void setDoorState (String Doorstate) {this.doorstate = doorstate ؛ } السلسلة العامة getDoorState () {return this.doorstate ؛ }}(2) تحديد واجهة استماع جديدة للاستماع إلى حدث ، ورثت من EventListener ؛ تحتوي هذه الواجهة على معالج لأحداث Doorevent:
/*** تحديد واجهة الاستماع ، المسؤولة عن الاستماع إلى أحداث Doorevent*/الواجهة العامة Doorlistener تمتد eventListener {public void doorevent (حدث doorevent) ؛}من خلال الواجهة أعلاه ، نحدد فئات الاستماع للحدث ، والتي تنفذ بشكل خاص وظيفة الاستماع ووظيفة معالجة الأحداث.
/*** تنفذ هذه الفئة واجهة الاستماع الباب 1 ، وتنفيذ إجراءات محددة وفتح الباب وإغلاقها*/public class doorlistener1 تنفذ doorlistener {Override public void doorevent (حدث doorevent) {// to tod يفتح")؛ } آخر {system.out.println ("door1 مغلق") ؛ }}}/*** تنفذ هذه الفئة واجهة الاستماع الباب 2 ، والتي تؤدي فتح الباب ، وإغلاق الباب ، وإجراءات فتح الضوء وإغلاق الضوء*//public class doorlistener2 تنفذ doorlistener { @override public void doorevent (event) {system.out.println ("DOOR2 يفتح ، مع تشغيل الضوء في الممر في نفس الوقت") ؛ } آخر {system.out.println ("يغلق Door2 ، مع تشغيل الضوء في الممر في نفس الوقت") ؛ }}}(3) قم بإنشاء فئة مصدر الحدث من خلال OlorManager.java ، والذي يستخدم كائن مستمعين لتخزين جميع كائنات مستمع الأحداث. طريقة التخزين هي من خلال AddDoorListener (..). AtforeListeners (..) هي طريقة تؤدي إلى حدوث حدث ، يتم استخدامه لإخطار النظام: لقد حدث الحدث ، ويمكنك استدعاء وظيفة المعالجة المقابلة.
/*** كائن مصدر الحدث ، هنا يمكنك أن تتخيله كعنصر تحكم عن بعد يتحكم في فتح وإغلاق الباب ،*(إذا كان في التأرجح ، فهو مشابه لزر)*/Class Public Class {Brivate Collection Beaders ؛ / ** * إضافة حدث * * param beasher * doorlistener */ public void addDoorListener (doorlistener beasher) {if (leaders == null) {beaders = new hassset () ؛ } المستمعين (مستمع) ؛ } / ** * قم بإزالة الحدث * * param beasher * doorlistener * / public void rediveOorListener (doorlistener beasher) {if (beaders == null) return ؛ المستمعين. remove (مستمع) ؛ } / *** توجيه حدث فتح الباب* / void void fireworkspaceopened () {if (المستمعين == null) ؛ حدث doorevent = جديد doorevent (هذا ، "Open") ؛ إخطار levellisteners (الحدث) ؛ } / *** توجيه حدث إغلاق الباب* / void void fireworkspaceClosed () {if (المستمعين == null) return ؛ حدث doorevent = جديد doorevent (هذا ، "Close") ؛ إخطار levellisteners (الحدث) ؛ } / ** * إخطار جميع doorlisteners * / private void notifyListeners (حدث doorevent) {iterator iter = leaders.iterator () ؛ بينما (iter.hasnext ()) {doorlistener leader = (doorlistener) iter.next () ؛ المستمع. }}}(4) حسنًا ، أكتب أخيرًا برنامج اختبار لاختبار الأحداث المخصصة لدينا. يجب ألا يكون من الصعب فهم هذا البرنامج :)
/*** يتم تخيل البرنامج الرئيسي من يريد فتح الباب*/الطبقة العامة البوابين {public static void main (string [] args) {doormanager manager = new doomanager () ؛ manager.adddoorListener (New DoorListener1 ()) ؛ // إضافة مستمع إلى Door 1 Manager.AddoorListener (New DoorListener2 ()) System.out.println ("لقد جئت") ؛ // Close Manager.fireworkspaceClosed () ؛ }}تشغيل البواب
يفتح الباب 1 يفتح الباب 2 ، أثناء فتح الأضواء في الممر
لقد جئت
الباب 1 يغلق الباب 2 يغلق ، أثناء إغلاق مصابيح الممر
شكرا لك على القراءة ، آمل أن تساعدك. شكرا لك على دعمك لهذا الموقع!