معالجة الأحداث في الجافا

التعامل مع الحدث أو معالجة الأحداث في الجافا (Event Handling) هو من الأساسيات المهمة لبرامج مع واجهة المستخدم الرسومية. لتنفيذ واجهات المستخدم، يجب عليك السيطرة على الطريقة التي يعالج جافا فيها الأحداث. هنا سترى كيفية التقاط الأحداث من مكونات واجهة المستخدم وأجهزة الإدخال. علينا أيضا أن تظهر لك كيفية العمل مع الإجراءات، واتباع نهج أكثر تنظيما لمعالجة أحداث العمل.

أساسيات التعامل مع الحدث 

أي بيئة تشغيل تدعم "GUIs" تقوم باستمرار بمراقبة الأحداث مثل النقر على لوحة المفاتيح أو نقرات الفأرة الضوئية .تقومم تقارير بيئة التشغيل تسجيل أو إرسال الأحداث إلى البرامج التي قامت بتشغيلها. ثم يقرر كل برنامج ما، إذا كان أي شيء يفعله ردا على هذه الأحداث.

في حدود الأحداث التي يعرف عنها"AWT" ، يمكنك التحكم تماما كيف تنتقل الأحداث من مصادر الحدث "event sources" (مثل الأزرار أو التمرير) إلى المستمعين للحدث"event listeners". يمكنك تعيين أي كائن"object " ليكون حدثا المستمع.

مصادر الحدث event sources" لها الأساليب التي تسمح لك لتسجيل المستمعين الحدث "event listeners" معهم. عندما يحدث الحدث في المصدر، المصدر يرسل إشعار من هذا الحدث لكافة الكائنات المستمع "listener objects" التي تم تسجيلها لهذا الحدث.

كما هو متوقع في "object-oriented language" مثل جافا، يتم تغليف المعلومات حول الحدث في كائن الحدث"event object". في جافا، كافة كائنات الحدث هي "derive " من"class " هو (java.util.EventObject). بالطبع، هناك أقسام فرعية "subclasses " لكل نوع الحدث، مثل (ActionEvent) و(WindowEvent).

يمكن لمصادر الحدث "event sources" مختلفة تنتج أنواع مختلفة من الأحداث. على سبيل المثال، يمكن للزر إرسال ( ActionEvent object)، في حين نافذة يمكن إرسال ( WindowEvent object).

وخلاصة القول، وهنا لمحة عامة عن كيفية التعامل مع الحدث في ( AWT ) يعمل:
 كائن المستمع"listener object" هو "instance " ل"class "التي تنفذ واجهة خاصة تسمى (naturally enough) واجهة المستمع" listener interface".
 مصدر الحدث "event source"هو كائن"object" يمكن تسجيل كائن المستمع"listener objects" وإرسالها ككائن الحدث"event objects".
 يرسل مصدر الحدث "event source" كائنات الحدث "object event"لجميع المسجلين (listeners ) عند وقوع هذا الحدث.
 الكائنات المستمع "listener objects " ثم سوف تستخدم المعلومات لكائن الحداث "event object" لتحديد رد فعلهم لهذا الحدث.

هذه الصورة تبين العلاقة بين مصادر الحدث والمستمعين "Relationship between event sources and listeners":-

وفيما يلي مثال (specifying a listener) :
   ; .... = ActionListener listener 
 ;("JButton button = new JButton ("Ok
 ;(button.addActionListener(listener

الآن يتم إعلام الكائن المستمع "listener object" متى حدث عمل الحدث"action event" في زر.و لأزرار كما قد تتوقع عمل الحدث هو انقر فوق زر.

لتنفيذ واجهة (ActionListener)،(listener class) يجب أن يكون لديها (method ) تسمى (actionPerformed) الذي يتلقى كائن ( ActionEvent object ) ك(parameter).

متى قام المستخدم بالنقر فوق الزر، (JButton object ) بإنشاء ( ActionEvent object ) ويقوم باستدعاء listener.actionPerformed (الحدث)، ويمر هذا الكائن الحدث "event object". مصدر حدث " event source" مثل زر يمكن أن يكون لديه أكثر من " listeners". في هذه الحالة الزر يقوم باستدعاء (actionPerformed method) لجميع listener كلما قام المستخدم بالنقر فوق الزر.

هذه صوره تظهر التفاعل بين مصدر الحدث "event source"، الحدث المستمع"event listener"، وكائن الحدث"event object".

مصادر 

 كتاب Core Java™, Volume I–Fundamentals

الوظائف الفرعية
برمجة
جافا (لغة برمجة)