بسم الله والحمد لله والصلاة والسلام على رسول الله
اليوم إن شاء الله بنات هنتقل بعد الـ design للـ form
اللي عندنا بالـ Java هنبدأ نتكلم على الـ action أو
الـ event handling عشان أقدر يصير في interaction
حقيقي ما بين الـ application تبعنا اللي هو
graphical user interface application و الـ end user
لازم يكون في عندي event handling لأن إحنا أضفنا
كومبو بوكس وأضفنا button لكن لو إجا الـ user وضل
يضغط على الـ button هذا من هنا لما ينكسر الماوس
معاه مش هيكون في action مش هيتبع على الضغط على الـ
button هنا أي شغلة كذلك لو اختار أي عنصر من
القائمة اللي موجودة عندها برضه مش هيكون في action
لأنه فعليًا أنا ما تكلمت على الـ event handling لحد
اللحظة اليوم إن شاء الله بدنا نبدأ نتكلم على event
handling مهم جدا من البداية أن أفهم أن أنا بتكلم
على event بتكلم على event إيش الـ event؟ هو عبارة
عن حدث تمام؟ أو الـ action ما بين الـ end user و الـ
application تبعي على سبيل المثال لما كان في عند
الـ button هذا و أنا أستعد الشكل في محيه الـ button لو اجا
الـ user بالـ mouse وعمل click لما صار في عندي event
صار في action الـ user أخذ action مع الـ application
اللي عندي فعمل click بالـ mouse لأن الضغطة هذه عملت
الـ release لشغل اسمها event object الـ
click تبعتي هذه عملت release لـ event object تماما
زي ما كنا نتكلم مع الـ exception handling جيت أنا و
قلت له integer x بدها تساوي عشرة على صفر
arithmetic exception نعمله release مين اللي عمله
release؟ الـ system راح عمله release بظبط؟ لما قدر
يعمل execution لك عندي خطأ فعمل release للـ
exception event للـ exception object الآن أنت مهيئة
الـ system من خلال الـ try و الـ catch أنه يعمل
execution إذا أنت حق الميثود هذه أو الكود هذا ضمن
الـ try يعني أنت قاعد بتراقب الـ event اللي بدو
يطلع، مصبوط؟ يعني الـ try هي المراقب ومسكة الـ event
و جالسة للـ catch تفضلي، هاي الـ catch فحاصيلنا الـ
exception هذا object بتقدر تتعاملي معاه ولا
ما تقدريش فالـ catch إذا كانت موجودة المعرفة تبقى للـ
exception object اللي هي بتعمل execution otherwise
الـ system برضه هيعمل fault و هيطلع هان نفس الكلام
بس بصورة تانية أنه أنا الآن لما الـ user بختار أو
بتفاعل مع الـ system أو مع الـ application تبعي الـ
interface اللي موجود في الـ application تبعي بيصير
في عندي release لـ object بيصير في عندي release لـ
object من نوع event و الـ event هذا أنا بدي أتعامل
معاه حسب الحاجة اللي بتقتضيها الأمور الآن وبالتالي
روح البرنامج تبعي في الـ Event Handling أنا عملته
له Design لكن ما فيش Interaction الآن بدي أتكلم على
الـ Interaction الحقيقي الـ End User عادة ما
بيتسلح بالكيبورد و الـ mouse في مواجهة أي تطبيق و لا
لأ بيتعامل مع أي تطبيق يا إما بيعمل click بالـ mouse
أو بيستخدم الكيبورد عشان يدخل نص أو يضغط له Enter
ولا لأ، في غير هيك ممكن يتكلم على الكاميرا و الـ mic
as input بس في الآخر .. في الآخر عشان أشغل
الكاميرا أو أشغط على مفتاح الـ Tesla لازم أستخدم
الـ Mouse وبالتالي فعليًا الـ Keyboard و الـ Mouse
هم أهم أداتين إدخال ممكن يستخدمهم الـ User عندهم
الـ AWT Abstract Windows Toolkit بتعمل لنا مجموعة
من الـ Events و بتمكننا من التتبع و التحكم عشان ما
يحدث بالتمام أو بالتحديد مع الـ System اللي موجود
عندهم الآن صار في عندي event مين الـ source تبعه أي
مفتاح أي graphical user interface component هي الـ
source و الآن أنا محتاج لشغل اسمها listener عشان
أحدده بشكل دقيق إيش الـ event اللي أطلق وإيش الـ
source تبعته وإيش الـ action اللي أنا بدأ أخدها
بناء على العناصر اللي موجودة هنا دولة تلت عناصر
مهمات جدا الـ event source الـ event object اللي
بدون أن يعمله release من الـ source بناء على الـ
interaction تبع الـ user و في عند الـ event listener
اللي عنده بيستنى يستقبل event object عشان يعمل
execution لميثود تمام؟ معينة أنت حط فيها الـ code
أو الـ business logic تبعت الـ code أو تبعت الـ
application تبعتك على سبيل المثال الصورة هذا ممكن
يكون button الـ event اللي هنعمله release لما ينضغط
اسمه action event و اللي لازم يكون عندي action
listener عشان يقدر يمسك الـ event هذا و هيعمل
execute لميثود اسمها action performed عشان من
خلالها أنا بدي أعمل event handling كل بساطة
في عندي أنا مجموعة من الـ method دائما موجودة بالـ
sources من أجل إضافة أو التعامل مع الـ event
handling و أهم شغلة الـ event listener تماما لو أنا
بدي أرجع معاكي كمان خطوة كمان مرة للمثال السابق
integer X بتساوي عشرة على زيرو و semi-colon الآن
هذه الـ method أو هذه السطر من الـ code مش موجودة من
try و catch إيش هيصير في الـ system؟ إحنا عملوا crash
مصروف ولا لأ؟ بمجرد أني أشغله لأن في عندي method
undefined قسم على صفر عملية غير معرفة فحروح حط فيه
الآن عشان أنا أتجاوز العملية هذه بتطلب مني أمرين
الأمر الأول أن أحط الجملة هذه ضمن try block مصبوط؟
و الـ try block هتمسك الـ object تبقى الـ exception
object لو صدر و تمرره لمين؟ للـ catch اللي هي الـ
part التاني و تمرره للـ catch في الـ catch لازم أنا
أكون محدد إيش الـ exception اللي أنا بدأ أتعامل
معاه يعني أنا ما أنفعش يكون بيطلع عندي arithmetic
exception و اروح بدأ أعمل handling لـ null pointer
exception هي هي برضه الـ system هيعمل الـ crash وهو
نفس الكلام أن أنا في عندي event source لازم أحط لها
مراقب عشان يقول لي فعليًا الـ tool هذه أو الـ
component هذه عملت release لـ event الآن لأ بنجو
سين بدي أحط مراقب على كل الأدوات على كل الـ tools
اللي ممكن الـ user يتفاعل معاها يعني الآن أنا في
عندي label و عندي text field
و في عندي button هاي three components و هدولة كلهم
موجودات على panel كام components صار موجودة عندي؟
أربعة، مصبوط؟ لو أنا سألتك الـ user ممكن يتفاعل مع
كام component؟ مع الـ text field عند الإدخال و مع
إضغط الـ button هل في Interaction بين الـ User و الـ
Label؟ أو في Interaction بين الـ Panel و الـ User؟
ما فيش، وبالتالي فعليًا صار في عندي مجموعة من الـ
Buttons أو مجموعة من الـ Graphical User Components
تمام، اللي أنا بتعامل معاها و اللي ممكن اللي End
User يصير بينه وبينها Interaction و عليها أنا بدي
أعمل Listening السؤال اللي بيطرح نفسه الآن، okay
هذا بدي أعمل Click طب هانبدي أدخل الـ keyboard
يعني ممكن أنا أتبع كل حرفي بكتبه ممكن أتبع السنة
لما يضغط enter عشان يقول لي خلصت و أخذ action على
الـ method اللي موجود عندها وبالتالي أنا بقدر أحدد
الـ sources دائما اللي بدي أعمل عليها listening
للعناصر اللي موجود عندها وبالتالي الـ listener اللي
أنا بدي أربطه بالـ source بمجرد أنه يصير الـ event و
يعمله release بروح الـ listener هذا بمسكه و بدي لـ
proper method عشان نعمل execution طبعًا هنا في عندي
different sources لأن في عندي different component
عند button، عند check box، عند radio button عند
list، عند combo box، عند spinner، في عند slider
مظبوط ولا لأ كلها different component و ممكن يصير
بينها وبين الـ user interaction كل واحد فيهم بيقدر
يعمل release لـ different event الآن الـ button فحش
جداني شغلة واحدة فقط اللي هي الـ click اللي هي الـ
action زي ما هنشوف كمان شوية لكن الـ check box لأن
لما أنا اضغط إذا أنا بدي أتعمل على click باتكلم
على action listener بمشي الحالة وإذا أنا بدي أتكلم
item changed أو change item listener معناه أن الـ
state بتاعتها تحولت أو اتبدلت من أنا checked
لتشكت و العكس صحيح لو أنا عملك أعملها كمان مرة برضه
في عندي two event بيطلعوا action event اللي هي الـ
click و الـ state اتبدلت وبالتالي هاللي صار في عندي
different الـ radio button نفس اللي بيجي على الـ
check box بيجي عليها ممكن الآن الـ combo books لما
أنا بدي أعمل click أو اضغط enter لأنها ممكن تكون
text field فحسب اللي بدنا نوصله أن الـ different
resources بتعمل different .. بتعمل release ل
different event بتعمل release ل different events
مثل الـ bottom بيعمل release ل action event object
و الـ window بتعمل release ل window event احنا
اتكلمنا عن الـ windows سابقا كيف لأ الـ j frame
window الـ j frame window بتعمل هي اللي مش قلنا هي
الـ top level container مصبوط اللي بنجي نسميها
الـ window تبعتنا okay
وبالتالي
كيف المفروض الـ AWT بتعمل وطبعا ليش بتتكلم AWT
بتتكلم مش swing لأن هي أساسا الـ swing مبنية عليها
طيب بدي أعرف listener object و هذا الـ listener object
عامل دايما implementation للـ interface اللي موجود
عندي هان بدي أحدد الـ event source تمام؟ و أربطه مع
الـ listener اللي أنا عرفته و بعد هيك الـ listener
هذا بيصير هو اللي بيعمل catch و يحدد إيش الـ
interaction اللي بيصير ما بين الـ user و الـ system
اللي موجود معايا okay الكلام النظري بكل بساطة بدي
أنشط الـ listener object الـ listener object هذابدي
أربطه بـ source أو بين جثين بدي أسجل الـ source الـ
button أو الـ check box على الـ listener اللي أنا
عرفته عشان يعمل listening ويستنى حدوث الـ events
اللي موجودات عندي وفي الآخر الـ listener object
اللي أنا عرفته هذا هو بيحتوي على معلومات من خلال
الـ event اللي صار من خلال الـ event اللي صار و
بيحدد أيش الـ action اللي بيشوفه تعالوا نروح باتجاه
عملي بسيط نشوف أيش ممكن بالكود الخطوات التلاتة
السابقة اللي حكيتها أنا سابقا هي في الـ
registration الـ object source event source object
اللي هي ممكن تكون الـ button أو الـ check box أو الـ
radio button .add event listener وهذا بيقول إنه
أنا لازم أنتباه و أتعرف على الـ eventوعلى الـ items
إيش الـ event اللي ممكن تعملها release و اروح حط
هنا الـ event listener object اللي بيطلع عنديها
بالمثال أنا بيدرح عرف action listener الـ action
listener الـ new action listener اللي بدي اشوفه
بالتفصيل الآن عرفنا الـ button اللي هو بمثل الـ
source روحنا على الـ button.add action listener
ودينا له الـ object اللي أنا عرفته سابقا الـ object
listener اللي أنا عرفته سابقا إذا
أنا بدي أعمل implementation للـ action listener أو
لأي listener موجود هتعمل معاه as interface و الـ
interface بيقتضي إنه في abstract method لازم
أعملهم override ولا لأ فبمجرد أني أروح أقوله my
listener implement نوع معين من الـ listener هيروح
لازمني أعمل implementation للـ method اللي موجودة
عندها وبالتالي تعالوا نتكلم بتفصيل أكثر على أكثر
action listener مستخدم اللي هو أو أكثر listener
مستخدم اللي هو الـ action listener الآن الـ action
listener بيرتبط بـ button بيرتبط بـ check box بـ
radio button بـ combo box كذلك وبالتالي الأهم بتكلم
على الـ most frequent used listener action ليش
action؟ لأن الـ click هي بمثابة الـ action تبع الـ
user طيب، هذا الـ action listener بدي يعمل
implementation لمين؟ لـ action performed method
تمام؟ و الـ object اللي عندي اللي هو الـ source لما
أنا ضغطت على المفتاح عمل release لشغل اسمها action
event الـ action event هذه بتحتوي معلومات عن الـ
object اللي هو عمل release للـ event اللي موجود هنا
وبالتالي هتكون في عند الـ event هذا بيحتوي على
معلومات عن الـ source اللي تم أو أصدر الـ action
اللي موجود عرفنا
الـ button فرحنا قلنا له هنا exit button اسمه exit
button طبعا لحظة هان عملنا my own implementation
طريقة تانية هان عمالي بستغبى اعتمد على anonymous
action listener إيش anonymous يعني object مالوش
اسم عرفنا إنو fly ولا لا يعني أنا اتجهت مباشرة
exit button .add action listener الأصل اعتمد
على on listener object إذا كان الـ listener object
تم تعريفه مسبقا مثل هان فرحنا نقول له
MyListenerObject لو ما تمش تعريفه و بدي أعرف
ActionListenerOnFly مباشرة هروح .. طبعا أنا بسميه
هنا AnonymousObject بحيث أنه مالوش اسم New
ActionListener بمجرد أقوله New ActionListener
هيلزمني نعمل override لمين؟ للـ action performed
لاحظتوا الكتابة في داخلها أنا؟ exit أو system.exit 0
لأنه فعليا أنا عملت مفتاح عشان يعمل إيش؟ عشان يعمل
exit من الـ system فلو أنا جيت شغلت البرنامج و جيت
على المفتاح و عملت click هاي الـ exit عملت
click هو هسكر البرنامج أكيد، إيش اللي صار؟ يعني
عمل release لـ action event
يعني البوتون عمل Release لـ Action Event الـ
Action Event هذا مين بده يعمله Catch الـ Action
Listener اللي أنا عرفته هان لو ماكانش عليه Action
Listener لو بتضغط من هان لبكرة على الفاضي بعد
هيك بقدر .. إذا أنا بدي تفاصيل من خلال الـ Action
Listener الـ Action Event اللي طلع عندي هان بقدر
أحصل عليها أنا مش محتاج لأنه معروف Click هو ضغط
Click هان معناته أنا بدي أعمل Exit ممكن أنا أسأل و
أظهر له Dialogue جي option بين هل أنت متأكد إنك تريد
الخروج من الـ system؟ نعم و أنا أقدر أخد الاختيار
بس إحنا بدنا نأجل أنا الـ option بين هاي قدامي شوية
وبالتالي أنا أقدر أخد الـ event تبعي بشكل مباشر
تعالوا نشوف على مجموعة الـ event object اللي موجودة
عندي هنا هتلاقي
إن الـ event object هدول معرفين مع الـ AWT اللي هو
معلقة في كل حاجة graphical user interface action
الـ key الـ keyboard الـ event الـ adjustment لأن
لو أنا بدي أغير حجم الشغل أغير حجم الـ window mouse
event لما الماوس بتتحرك صار roll over الـ .. الـ ..
إيش بسميها هنا؟ mouse over، mouse leave أو out أو
ما شابه مجموعة العنصر focus event لما أنا بدي
الـ cursor بينتقل من عنصر لعنصر mouse wheel اللي هي
العجل اللي في الـ mouse فوق item event لما أنا بكون
في عندي selection و بختار one item window event
اللي له علاقة بالـ frame و حجمه change event لما
تصير في عندي status بتتغير هدول الـ event الناس
بيكونوا إنهم listener مناسبة تتعاملوا معاهم و هذه
مجموعة الـ listeners طبعا تلاحظ إن أنا هنميز ثلاثة
action event item event و change event و مقابلهم
عندي action listener item listener و change
listener لأن هم هدول هم اللي هيتعامل مع الـ
component اللي إحنا عرفناهم عندنا الآن بدون الـ
listener هذا ما سجلوا مع الـ graphical user
component اللي أنا ممكن أشتغل عليها أنا في مشكلة
مش هيشتغل الـ code اللي عندي الأكثر استخداما زي ما
قلنا الـ ActionListener وهذا بيعمل Listening لمين؟
لـ ActionEvent و الميثود اللي هنعملها Execution
ActionPerformed الـ ItemListener بيعمل Listening
على ItemEvent و ItemStatedChange الميثود اللي
احتمال منها الـ Execution الـ ChangeListener بيعمل
على ChangeEvent و StatedChanged method هي اللي
هنعملها Execution طبعا احنا هنمر الآن على الـ
component كل واحد فيهم اللي شوفناهم عشان أحدد أي event
ومن ثم هحدد أي listener بأتعامل مع العنصر اللي
موجود عندها بدي أبدأ مع أسهل element اللي كان الـ
button ما بتطلبش مني كثير J button X يساوي New J
button و بدي الـ label تمام خلصنا هاي الـ button
أصبح موجود الآن بدي أعرف listener عشان أضيفه على
الـ button اللي موجود عندي هنا نوعه action
listener نوعه action listener الآن في التعامل مع
الـ action
listener أو مع الـ event listener بشكل عام واحد من
ثلاث طرق إما بعمل implementation للـ listener اللي
عندي يعني ببني my own class وبصيب أعمل implement
للـ listener و الـ implement هتلزمني أعمل override
لمين؟ للـ action performed أو هروح أعرف global
listener أروح أقوله action listener x يساوي New
action listener و في داخله هعمل implementation للـ
action performed أو هروح مع كل button أضيف له
anonymous action listener وهي يصير في عندي تلت
حالات أنا أشتغل فيهم تعال نشوف الحلة الأولى بكل
بساطة الحالة الأولى هنا أنا بدي أعتمد على ال
implementation بدي أعتمد على مين؟ على ال
implementation killer action سميت لـ class طبيعي و
عامل implement لـ action listener implement لـ
action listener معناته فهي لازم لي أعمل
implementation لـ الـ abstract method اللي موجودة
abstract method اللي موجودة اسمها action performed
هاي التحنيجيها عرفت killer background killer و
killer action constructor
وممررتلها object من نوع color في الـ implementation
هنا بكتب الـ code اللي بديها على سبيل المثال جي
option بين dot show dialog message أو dot show
message اديني اسم الـ color اللي موجود عندها عشان
أعرضه الـ color اللي اخترته في الـ implementation
أنا أخدت color action اللي هي نوعها من نوع عيش
listener
مصبوط؟ ActionListener بالتحديد مش هي عاملة
implementation لـ ActionListener؟ طيب، هذه
listener هي واحد، هي اثنين، هي ثلاثة الـ new
action listener أو الـ new color action أصفر،
أزرق، أحمر الألوان أو الـ initial color اللي أنا
مررته للـ constructor الـ constructor هو هذا و سويت
الـ background بالبرامير تبع الـ constructor إيه صار
في عندي أنا الآن؟صار في عندي أنا three objects كل
واحد فيهم بيمثل action listener different action
listener وكل واحد فيه character مختلفة اللي هي
قيمة اللون ولا لأ و أتيت على المفاتيح أنا في عندي
ثلاثة مفاتيح معرفات الـ yellow button الـ blue button
و الـ red button ثلاثة مفاتيح و مع كل واحد اعتمدت على
الـ method اللي اسمها add action listener و أديت له
listener مستقل أديت كل واحدة منهم listener مستقل بس
predefined أنا عرفته مسبقًا هيك لما أنا بأجي بأضغط
على المفتاح الأصفر على فرض هاي الثلاث مفاتيح
yellow blue
red
لما أنا بقعد يبقى بغطها بينعمل release لـ event
listener عفواً لـ event object action event مين اللي
بيمسكه؟ اللي هو الـ Yield Action ليش؟ لأن هذا الـ
Yield Action عامله بيستمع لكل الـ event اللي بتصدر
منهم عن المفتاح الأصفر هيوا بينجو سين أنا حطيت لكل
مفتاح مراقب مستقل مصبوط؟ و المراقب هذا معروف له
اسمه وله الـ properties تبعته تمام؟ وبالتالي لما
بنعمل execution هيروح ياخد قيمة الـ loan ويظهر
لها مثلاً في الـ show message طيب الطريقة الثانية
أن أنا أعرف global listener global listener إيش
يعني global listener؟ يعني قادر أقول له هنا action
listener اسمه listener new action listener و بمجرد
أقول new action listener هيروح يعمل execution و
يعمل override للـ action performed و يقول أعمل
implementation لما أنا بتكلم على global listener
global listener يعني الـ listener نفسه بدي أستخدمه
مع الثلاث مفاتيح أو الأربع مفاتيح السابقات بينفع؟
أه بينفع بس بدي أزوده بالـ Code شوية عشان أعرف من
الـ Button اللي عمل الـ Release للـ Event لأنه
الآن إذا أنا بقول هدولة الثلاث الـ Yellow و الـ
Blue و الـ Red هدولة الثلاث بدوا يتبعهم نفس
المراقب G
-Listener على أنه Global Listener مش المفروض أقدر
أُجَمِّز لما الـ listener هذا بده ياخد action أو بده
ينفذ code يقدر يميز من الـ button اللي انضغط لأنه لما
أنا انضغط على yellow على الأقل بدي لون أصفر بديش
أحمر ولا أخضر ولا لا فأنا بدي اللون اللي أنا وراه
الـ button بدي الـ action وراه الـ button وهذا بيقتضي مني أعرف
الـ source مين بعرف الـ source الـ object أو الـ
action event اللي احنا نقوله من البداية الـ source
لما بيعمل release للـ event object هذا الـ event
object بيحتوي على معلومات عن الـ source و وقت يصير
الـ event هذا إلى آخرين وبالتالي أنا ممكن أروح أخد
action في الـ code تبعي أروح أقول له الـ object
source event.get source if source equal red button
معناته الـ color تبعي بيصير أحمر if .. if ..الـ
Source بتساوي Blue Button طيب،
هدول الـ Assignment من وين أنا جبتهم؟ هدول أسماء
الـ Button اللي أنا عرفتهم ومش بس عرفتهم كمان ربطت
.. وهذا بس جاي مستعد يلحق للمفتاح ربطت الـ Buttons
بنفس الـ Listener الـ Red و الـ Blue و الـ Yellow
حطيتهم كلهم اللي هو نفس المراقب اللي موجود عندي هنا
وبالتالي أنا صرت بأتكلم إنه okay هاي الـ code
بيشتغل مع الـ general items اللي موجودين عندي
الطريقة الثالثة طب احنا هحاول نرجع معاكم كود عملي
الآن عشان الفكرة ترسخ إن شاء الله الطريقة الثالثة
احنا قولنا الأولى أعمل implementation أبني my own
listener بالـ implementation للـ listener اللي
موجود طريقة ثانية أعرف global listener وهذا بيقتضي
مني أعرف و أعرف منه الـ source الشغلة الثالثة أني
أعتمد على الـ anonymous listener اللي احنا ذكرناها
قبل شوية object listener بدون اسم كيف هذا الكلام
بيصير؟ بيصير بكل بساطة بعد ما أنا بنشق المفاتيح
اللي عندي بروح على الـ method اللي بدون اسمها add
actual listener للمفتاح الأول RedButton
.AddActionListener وبدل مزودها predefined object
بنشي الـ object on a fly a new action listener
مباشرة هيروح يقول لي هاي الـ method هذي عمله ايش
execution وهي الـ color هان بك تكتب الـ code اللي
بنعمله execution كمان مرة الآن لاحظ الـ two buttons
هدول عليهم different listener عليهم different
listeners different listeners في الحالة هذه الـ two
buttons هدول عليهم نفس الـ listener و الحالة الأولى
هذه كل واحد عليه listener مختلف الأولى
و الثانية و الثالثة الفرق بينهم بس أن الـ object
اللي من الأولى أنا معرفه ومعرفي الـ characteristics
تبعته بالكامل لأن أنا معرف object بينما الثاني أنا
عرفته on a fly وبالتالي ما تحكمتش بالعناصر تبعته
يعني لاحظي كمان مرة في الأول في الأولى هي الـ
constructor أو عفواً هي الـ object هذا عبارة عن
action listener
object كيف هذا الكلام اللي أنا بقوله؟ لأنه أنا
عامل implement here للـ
action listener فبالتالي الـ object تبعي هو عبارة
عن action listener object دي بس إلها اسم هذا
و هذا و هذا اللي هم نفس الـ implementation اللي هم
نفس الـ implementation بس إيش الفرق معايا الـ value
تبع اللي موجود عندي hand بينما في الـ anonymous
hand different action different listener object و
different implementation different implementation
anyway الـ action listener مش بس مع الـ button موجود
مع العناصر التالية هدول
هل ممكن أنا أسجل الـ ActionListener لما بتقول لما
بكون في عندي list و بروح بعمل على الـ element
double click في عندنا list اه في عندنا الـ Jlist و
في عندنا الـ combo box هي عبارة عن list لما يكون في
عندي menu item اللي هنشوفه خلال المحاضرات الجاية
كيف تتعامل مع الـ menus و عملت عليه select لو أنا
بتعامل .. جاعد user في الـ text field و راح ضغط
مفتاح enter برضه عبارة عن action listener لأنه
بيعمل release لـ action event لو كان في عندي timer
component و الـ cycle تبعتها خلصت برضه بتعمل
release لـ action event وبالتالي أنا ممكن أسجل الـ
action listener عندهم بتمنى الكلام اللي قلته سابقًا
يكون سهل تعال نشوف implementation بشكل بسيط للـ
code اللي موجود عندنا هنا برنامج هذا ما فيش فيه شغلة
جديدة احنا شفناها سابقًا بدي
أعمل execute بس
frame ما فيش عليه ولا حاجة فيه في داخله panel حتى
مش عامل جيل ناسي عامل جيل except okay ليكن الآن الـ
code اللي بدي أسويه هنا خليكي معايا نعم أنا الآن
كمان مرة البوتون ما ظهرتش ليش لأنهم مش مضافين على
الـ panel بس هضيفهم على الـ panel mybunnel
.add red
mypanel.add
و هي blue الآن
موجودين على ال panel مافيش مشكلة في الموضوع و بدي
اروح لل frame ال jframe. انا مضيوف okay set
default close operation jframe.
frame.exit on close عشان ايش؟ عشان يتسكر لما ..
هيك تمام هاي ال application شوفناها احنا سابقا
بالشكل هذا هيه red و blue okay
ليش ضعفهم فوق؟ ال frame ال frame اللي عليه إيش
اسمه؟ ال frame إيش ال layout اللي عليه؟ border تمام
يعني لما هضيف هضيف في ال center انا ضفت ال buttons
على ال panel ال default layout تبعت ال panel flow
flow فرح حط ال panel كلها وين في ال center حط ال
panel في ال center فصارت ال panel حدد من ال frame
بالكامل مصبوط و ال two buttons أخدوا في أول سطر و
default alignment center عشان هيك أجوا هنا okay
الآن
بدأ أعرف Global
ActionListener
بدي أسميه MyListener new
ActionListener
لاحظي بمجرد قلت له New ActionListener
راح يعمل override لمن؟ لـ actionPerformed method
تمام الآن
انا هنا ايش بدي اعمل action؟ بدي اغير لون ال panel
لون ال panel مثلا mypanel.set background
color color. مثلا cyan
لو أنا شغلت وضغطت على المفتاح أيش بده يصير عندي؟
ولا حاجة، ليش؟ لأن أنا عملت listener لكن ما قلت له
يتسنط أو يتابع مين، ما قلت له يتابع مين، تمام معناته
أن الآن بدي أروح على ال button ال button الأول
اسمه red.addActionListener و ال listener التابع
اسمه mylistener مصبوط وبعدين أروح على ال button
التاني blue button.addActionListener وبرضه
هاي mylistener الآن صاروا التنين بيشتغلوا بنفس ال
code مصبوط لو أنا اضغط على الأسد على الحمر الأهم
مافيش لإن التنين بيعملوا بنفس ال implementation
معمولة لهم نفس ال implementation تمام وبالتالي هذا
الكلام ما بظبطش لما يكون في عندي general listener
معناه ان انا أريد أن يكون ال action تبعي مختلف
الآن ال action تبعي مختلف هروح أعرف object ال
s يساوي ال event اللي عندي e.getSource هيك سأرت
انا عارف ان ال source اللي عندي هذا مين هو هاني
ماسكه في variable و بقدر اعمل عليه مقارنات هروح
أقوله if s equal إذا كانت أس ال object هذه
بدها تساوي ال object button اللي عندي اللي هو مين
الرد على سبيل المثال هروح أقوله خلّي
ال panel لونها أحمر ونفس الكلام هنا ممكن قلص f أو
f حسب حاجتك أنت في ال code هروح اقول لو كان هذا
يساوي blue غير اللون لازرج الآن
أحمر أزرق حسب ال click يصبح ال action اللي موجود
عندي لو ال action أنا ما كنتش في الصورة عفوا لو أنا
ما كنتش جايب ال source من البداية مش هقدر أفصل في
ال action تابعها بمعنى آخر الكلام اللي بنلخصه الآن
أنه لما أنا بدي أتعامل على global listener لازم
أفرج بين ال sources اللي موجودين عشان كل source
فيه action مختلف عن الآخر طيب لو أنا اشتغلت ب
anonymous
listener يعني كل واحد له قائم بذاته وماليش علاقة
في التفصيل أو ماليش علاقة أن أسأل عن ال source
أساسا الحالة التانية اللي أنا ممكن أشتغل فيها
هيبدأ أعمل لهذه comment أنه
أيه جهان؟ و أروح مباشرة على ال red أقول له .add
actionListener زيها زي السابقة تماما لأنه لازم ال
method هذه أستخدمها عشان أعمل registration لل
listening method لل listening لل listener new
ActionListener
و بمجرد ضغط على new ActionListener راح
... لحظي أنه أعرفلي ال actionListener on a fly
فتحلي الجوس و قاللي هذه نهاية ... هذه الجوس هذه
نهاية ايش؟ النهاية بتاعة ال method اللي هي add
ActionListener تمام؟ الآن في داخلها هيه اللي انت
عمالاكي بتاخد object من نوع ActionListener وال
object هذا فيه abstract method لازم تعملها
implementation هيه أنا بقدر همباشرة اروح اقوله my
panel.setBackground(Color.red);
Save خلصنا مع البوتون الأول بروح للبوتون التاني
اللي هو ال blue.add
ActionListener new ActionListener مباشرة
هيعمل override أو لازم أعمل override لـ method
اللي عندي mypanel
.setBackground(Color.blue); Save,
اخرج، blue ليش مافيش داعي أسأل من ال source هنا
لأنه already هو listener واحد ل button واحد
وبالتالي أنا طب مين أفضل في الشغل أشتغل مع global
listener ولا أشتغل مع anonymous listener anonymous
يعني لو كان عندك مثلا خمسين مفتاح أيوة لما تكتر
المفاتيح كتيرة لأ أنا بفضل انك تشتغل على one
listener و في داخل ال listener تتفرج ال code بتصير
تستخدم switch statement لإن في الآخر انت بتتدور
على ال يساوي زي ما شوفنا سابقا في ال code اللي
عندنا هنا يعني هنا انا كنت بقوله ال object يساوي
كذا وبالتالي بتقدر تدخليها على switch statement
وفي ال switch تعمل calling ل different methods و
بيصير فيه اندك implementation متشعب و رائع جدا طيب
هذا الكلام لو انا بده اروح اشتغل على طريقة الأولى
ان انا بدي اعمل implementation ل class تبعي هاي ال
mycolor هاي
ال mycolor الآن هروح اقوله implement ال action ..
ال actionListener بمجرد أقول له implement ال
ActionListener هيقول لي في عندك method
unimplemented method اروح واضيفليها، فأضاف لمين؟
هاي، لاحظي هذا الكلام أو هذا ال code الآن بدوني ..
بدوني أزوده بإيش؟ كل التفاصيل بده constructor لأنه
هيكون new class و بده object و بده اللون اللي أنا
ها؟ بدي أتعامل معاه هان الآن
لو أنا جيت و قلت له هاي ال color background
و هاي ال constructor اللي هو myColor و
قلتله color c و دي اتهان قلتله ال background يساوي
c طبعا هاي ممكن private مش مشكلة في الموضوع الآن
ايش بدك تكتب code هنا؟ الآن اريد التفاصيل اكتر اذا
كان ال action تبع هذا يترتب على ال interface وانا
بشتغل على different class معناته انا بدي اتحكم
الآن بعناصر ما بين different classes واصير اغير في
ال attributes اللي موجودة تبع كل عنصر فيهم الآن لو
انا بدي ارجع لمثال ال code ايش نوع ال method تبعتي
او ال scope تبعتها؟ default default يعني protected
protected يعني ال class التاني مش هيقدر يشوفها ولا
لأ وبالتالي بدي أروح أعرفها هذه تصير public public
وبالتالي هان هدخل في تفاصيل ايش المشكلة هان
invalid modifier ليش؟
اه في داخل ال main أنا معرفة في داخل ال main
خلينا بس ننجلها لبرا Ctrl X Ctrl .. عفوا Ctrl Z
لأن أنا بدي هذا الاسم كمان فعليا
هتدخل الآن على ايش؟ على definition اللي لها يعني
على بعض ال code اللي له لازمة أو مالوش لازمة حسب
الحالة اللي موجودة عندها
final variable must be initialized okay هيك تمام الآن بدي
اجهان وطبعا نفس الكلام هروح أسوي مع مين مع ال
buttons مصبوط ولا لأ يعني هدول ال buttons كمان
لازم انا أروح أعرفهم فوق عشان
اجهان أشيل ال final واحطها سيمي كولون ;
وهنا ال definition مافيش داعي ايه اللي صار لأ
عشان method ال static بتعمل مع items
Okay ما ضلش خطأ .. okay حلنا الخطأ هذا هان بدي أجي
على ال mycolor هان هروح اقوله class
اللي موجود عندي mymain main
GUI
dot okay
.set background color الـ C أو الـ background أنا
فاهم إنّي حطيتها للـ button عشان اختصر الآن في
داخل الـ code هذا بدي أروح آخذ object من مين؟ من الـ
class اللي أنشأته اللي هو my color
mcnewmycolorcolor.red وأنا بدي أضيف له listener على
الـ button الآن هأقول له red.add action listener ونوعه
اللي هو الـ MC أو الـ object اللي عنده الـ MC هأروح
أعمل run له
تمام، فالشغل بتقصير شوية بدها شوية إيش؟ شوية
تفاصيل عن الـ code اللي موجود عندنا، وبهيك اليوم
احنا هنجفّ هنجفّ في الـ exception handling احنا كنا
وصلنا لحد الـ event، والمحاضرة الجاية هنبدأ مع باقي
العناصر عشان نتعرف على الـ other methods أو الـ
event listener اللي موجودة، في أي سؤال يا بنات؟ طبعًا
أنا حملت الـ slide على الـ modem لأنّي فاكرة حالة حابة
تستخدموها أو تراجعوا أي شغل إن شاء الله تعالى اللي
عطيكوا العافية