بسم الله والحمد لله والصلاة والسلام علي رسول الله
اليوم إن شاء الله بنات هنتقل بعد ال 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 تبعي على سبيل البثال لما كان في عند
البطن هذا و أنا استعداد الشكل في محيه البطن لو اجى
ال user بال mouse وعمل click لما صار في عندي event
صار في action ال user أخدaction مع ال application
اللي عندي فعمل click بالماوس لأن الضغطة هذه عملت
ال 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 عادة ما
بيتسلح بالكيبورد والماوس في مواجهة أي تطبيق و لا
لأ بيتعامل مع أي تطبيق يا إما بيعمل click بالماوس
أو بيستخدم الكيبورد عشان يدخل نص أو يضغط له Enter
ولا لأ، في غير هيك ممكن يتكلم على الكاميرا والمايك
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 ل differentevent الان ال 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 event
مثل ال bottom بيعمل release ل action event object
و ال window بتعمل release لwindow event احنا
اتكلمنا عن ال windows سابقا كيف لأ ال j frame
window ال j frame window بتعمل هي اللي مش قلنا هي
ال top level container مصبوط اللي بنجو سن سميناها
ال window تبعتنا okay
وبالتالي
كيف المفروض الـ AWC بتعمل وطبعا ليش بتتكلم AWC
بتتكلم مش 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 dot 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 dot 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 لما انا بدي
الكيرسر بينتقل من عنصر لعنصر 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 يساوين U 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 يقدر يميز من البطن اللي انضغط لأنه لما
أنا انضغط على yellow على الأقل بدي لون أصفر بديش
أحمر ولا أخضر ولا لا فأنا بدي اللون اللي أنا ورا
البطن بدي ال action ورا البطن وهذا بيقتض مني أعرف
ال 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
هدول عليهم differentlistener عليهم 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 مش بس مع البطن موجود
مع العناصر التاليات هدول
هل ممكن أنا أسجل الـ 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 اللي بدي أسويه هان خليكي معايا نعمأنا الآن
كمان مرة البوتون ما ظهرتش ليش لأنهم مش مضيفين على
البنل بس هضيفهم على البنل mybunnel
.add red
mybunnel.add
و هي blue الآن
موجودين على ال panel مافيش مشكلة في الموضوع و بدي
اروح لل frame ال jframe dot انا مضيوف okay set
default close operation jframe dot
frame.exit on a clause عشان ايش؟ عشان يتسكر لما ..
هك تمام هاي ال 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 لمن؟ لـ get action before method
تمام الان
انا هنا ايش بدي اعمل action؟ بدي اغير لون ال panel
لون ال panel مثلا my panel dot set background
color color dot مثلا ال cyan
لو أنا شغلت وضغطت على المفتاح أيش بده يصير عندي؟
ولا حاجة، ليش؟ لأن أنا عملت listener لكن ماقلتهش
يتسنط أو يتابع مين، ماقلتهش يتابع مين، تمام معناته
أن الأن بدي أروح على الـ button ال button الأول
اسمه red.add action listener و ال listener التابع
اسمه my listenerمصبوط وبعدين أروح على ال button
التاني blue button dot add actual listener وبرضه
هاي my listener الآن صاروا التنين بيشتغلوا بنفس ال
code مصبوط لو أنا اضغط على الأسد على الحمر الأهم
مافيشش لإن التنين بيعملوا بنفس ال implementation
معمولة لهم نفس ال implementation تماموبالتالي هذا
الكلام ما بظبطش لما يكون في عندي general listener
معناه ان انا أريد أن يكون ال action تبعي مختلف
الآن ال action تبعي مختلف هروح أعرف object ال
S يساوي ال event اللي عند E dot get sourceهكسيرت
انا عارف ان ال source اللي عندي هذا مين هو هاني
ماسكه في variable و بقدر اعمل عليه مقارنات هروح
أقوله if ال source equal إذا كانت أس ال object هذه
بدها تساوي ال object button اللي عندي اللي هو مين
الرد على سبيل المثال هروح أقوله خلّي
ال panel لونها أحمرو نفس الكلام هنا ممكن قلص F او
F حسب حاجتك انت في ال code هروح اقول لو كان هذا
يساوي blue غير اللون لازرج الان
أحمر أزرق حسب الـ click يصبح الـ action اللي موجود
عندى لو ال action أنا ماكنتش في الصورة عفوا لو أنا
ماكنتش جايب ال source من البداية مش هقدر أفصل في
ال action تابعها بمعنى آخر الكلام اللي بنلخصه الآن
أنه لما أنا بدي أتعامل على global listener لازم
أفرج بين ال sources اللي موجودين عشان كل source
فيه action مختلف عن الآخر طيب لو أنا اشتغلت ب
anonymous
Listener يعني كل واحد له قائم بذاته وماليش علاقة
في التفصيل أو ماليش علاقة أن أسأل عن ال source
أساسا الحالة التانية اللي أنا ممكن أشتغل فيها
هيبدأ أعمل لهذه comment أنه
أيه جهان؟و أروح مباشرة على الـ red أقول له dot add
action listener زيها زي السابقة تماما لأنه لازم ال
method هذه أستخدمها عشان أعمل registration لل
listening method لل listening لل listener new
action
listener و بمجرد ضغط على new action listener راح
.. لحظي أنه أعرفلي ال action listener on a fly
فتحلي الجوس و قاللي هذه نهاية .. هذه الجوس هذه
نهاية إيش؟النهاية بتاعة الـ method اللي هي add
action listener تمام؟ الآن في داخلها هيه اللي انت
عمالاكي بتاخد object من نوع action listener وال
object هذا فيه abstract method لازم تعملها
implementation هيه انا بقدر همباشرة اروح اقوله my
panel dot set background color ال color dot red
Save خلصنا مع البوتون الأول بروح للبوتون التاني
اللي هو ال blue.add
action listener new action listener مباشرة
هيعمل override أو لازم أعمل override لـ method
اللي عندي my panel
.set background color colorobject.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 تبعي هاي ال
my color هاي
ال my color الان هروح اقوله implementالـ action ..
الـ action listener بمجرد أقول له implement الـ
action listener هيقول لي في عندك 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 not be initialized okay هك تمام الآن بدي
اجهان و طبعا نفس الكلام هروح أسوي مع مين مع ال
buttons مصبوط ولا لأ يعني هدول ال buttons كمان
لازم انا أروح أعرفهم فوق عشان
اجهان أشيل ال finalوأحطها سيمي كولون K
وهنا ال definition مافيش داعي إيه اللي صار لأ
عشان method الـ static بتعمل مع items
Okay ماضلش خطأ .. okay حلنا الخطأ هذا هان بدي أجي
على ال mic color هان هروح أقوله class
اللي موجود عندي my main 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 لان فاكرة حالة حابة
تستخدمها أو تراجع أي شغل ان شاء الله تعالى اللي
عطيكوا العافية