بسم الله الحمد لله والصلاة والسلام علي رسول الله
اليوم إن شاء الله تعالى هننتقل لـ part و part مهم
جدا في التعامل مع graphical user interface وهو
القوائم أو الـ menus طبعا كلنا عارفين الـ menu أو
القوائم و بنعرف أهميتها اللي دائما بتختصر أو بتجمع
كل الـ actions أو كل الـ major methods أو الـ
performance actions اللي أنا بدي إياها
بحطهم على قائمة لأن الـ user أحيانا الـ window مافيش
فيها وسعة أحط عليها مفاتيح مثال على سبيل المثال في
الـ word لما أنا بستخدم الـ word editor الشاشة أنا
محتاجها كلها عشان أكتب النص اللي أنا بدي إياه و أشوفه
بالكامل لما بدي أعمل save تخيل اللي يوم تكون عندك
مفتاح موجود عشان save مفتاح تاني عشان الـ copy و
مفتاح تالت عشان cut و تالت و رادع و كده معناته فيه
جزء كبير من الشاشة أو من الـ frame تبعي هيروح
للمفاتيح بينما هذه ممكن أنا أستغني عنها كلها ياتا
و طبعا هذا الكلام برجع لطبيعة البرنامج و تصميمه
بحط كل الـ command اللي أنا بدي إياها في داخل الـ
menu أو داخل القائمة و عادة لما احنا بنتكلم على
menu احنا بنعرف و لاحظ ظهورها مباشرة تحت شريط
العنوان تبع الـ frame و عندي أنا غالبا menu واحدة
على الـ application يعني أنا مش بحاجة لأكثر من menu
أنا بنشغل menu واحدة بحط عليها الـ most frequent أو
الـ most important task اللي بدي إياها و بخليها تظهر
على الـ application و غالبا بتظل طول ما الـ
application شغال طول ما الـ main frame أو الـ main
window تبعتي موجودة الـ menu تبعتي هذه بيبقى موجودة
المينيو هذه مكونة من أكثر من شغلة أول شغلة من الـ
menu bar شريط
القائمة اللي هو هذا الشريط اللي موجود مباشرة تحت
شريط العنوانة و بتتكلم .. مكونة من الـ menu و لما
بتكلم على menu بتكلم على قائمة يعني list و في عندي
menu item
طبعا بأتكلم على menus ممكن يكون شريط العنوان
الشريط القائم القوائم أو الشريط القائم اللي عندي
ممكن أضيف عليه أكثر من menu مثل الـ file menu و الـ
edit menu و الـ view menu و الـ format و الـ help لو
أتيت على سبيل المثال و قلت لك أنا هي الـ notepad
كلنا بنعرفه هي
شريط القوائم تماما الـ menu bar تحت شرق العنوان
file edit format view help هذه عبارة عن مجموعة من
الـ menus القائمة يعني أنا فعليا لو ضغطت على الـ
file أو الـ save مش هيكون في عندي أيش action لكن الـ
action هيظهر لي القائمة اللي موجودة أمامي وبالتالي
هي الـ menu الـ menu items هي عبارة عن العنصر اللي
موجود في الـ menu و اللي وراه action مثل لما أنا
باجي بقول له save لو أنا ضغطت على save الآن هذه وراها
action بدو يتنفذ أو وراها code بدو يتنفذ هذه
بنسميها menu item هذه بنسميها menu item وبالتالي
الـ form أنا عندي بتحتوي على العديد من الـ menus و
الـ menu items بالإضافة لشغل مهمة شايفة الخط هذا؟
هذا الخط ما له فايدة هو موجود فقط لأجل
organization unit أو separation unit حتى اسمه add
separator لما هنشوفه الفكرة فيه إن أنا بستخدمه
عشان أقسم الـ menu تبعتي لفئات هأقول هي العناصر هدول
اللي لهم علاقة ببعض وغالبا لما هي على سبيل
المثال في الـ notepad لما في الـ file لحظة
new open save save as خط big setup print خط و exit
لو طلعت في الـ task اللي فوق new و open و save و
save as كلهم بيتكلموا على الـ document التنتين اللي
تحت big setup و print بيتكلموا على طباعة الـ
document و الـ command الأخير عشان يعمل exit لو
روحت على الـ edit هلاقي undo خط copy أو cut copy
paste و delete و خط عشان يعمل separation ما بين
العناصر اللي موجودة عندي هنا وهكذا يحدث الـ
organization اللي موجودة الـ organization اللي
موجودة أو الـ separator هذا بس عشان يقول لي هدول
المفاتيح related مع بعض أو هدول الـ menus related
مع بعضهم مش بيقدروا نفس الشغل لأ هم related لنفس الـ
task اللي ممكن أنت تحتاجها طيب وبالتالي بتكلم على
menu separator أو separator تعالَ
نشوف مع بعض كيف أنا بدي أنشئ الـ menu إنشاءنا للمنه
بسيط و بسيط جدا كله بيعتمد على مجموعة الـ classes
اللي بتوفر لي إياها الـ java أو الـ swing jmenubar بأخذ
منها object عشان أنشئ menu والـ menu هذه بدأ ترتبط
بالـ frame لا يمكن أن ترتبط مع الـ panel لا يمكن
أن ترتبط مع الـ panel لازم تكون مع الـ frame و بضيف
عليها .. في عندي method اسمه set jmenubar و بدي إياه
الـ menu bar اللي أنشأته أو الـ jmenubar اللي أنشأته
لما أنا بدي أنشئ menu هاي في عندي jmenu و بدي إياه
الاسم أو الـ title أو الـ label كبرت إياه و بروح بضيف
الـ title هذا أو الـ object هذا عفوا على الـ menu bar
وبالتالي أنا بضيف الـ menu bar مرة واحدة و بصير
بضيف الـ menus على الـ bar و الـ menu item إما بدو
تنضيف على الـ bar بشكل مباشر أو بدو تنضيف على الـ
sub menu أو الـ menu اللي موجود عندها يعني لو أنا
أتيت بالمثال اللي موجود عندي هنا الـ command based
بناء على المثال هي edit menu edit أيش نوعها؟ menu
cut و copy و based عبارة عن menu items كلهم
بتعرفوا بنفس الـ definition أنا وصلت لوين؟ بدي أعرف
الـ menu أو بجهز عرض اللي كان الـ menu item اللي هو
الـ best اللسق menu item جه menu item best edit
menu اللي اشتريناها في الـ slide السابق اللي هي هذه
.add الـ menu item اللي عندي اللي هو الـ based item
حسب اسم الـ object تمام بعد ما خلصنا في الترتيب مش
في عندي edit في عندي separator مباشرة بقول له menu
أو edit menu أو اسم الـ menu اللي عندي edit menu
.add separator خلاص برسم لي تحتهم خط مباشرة تماما
ظهور الـ elements هنا على القائمة زي ما كنا بنظهرهم
على الـ combo box طبعا في insert at و في المجموعة الـ
method الثانية موجودة لكن احنا الـ menu بدنا نشتغل
معاها بشكلها البسيط اللي موجود عندها طيب روح تعملت
الـ separator لو أنا مثلا في الـ options هنا الـ
options هي عبارة عن sub menu مصبوط بروح بعرفها
عليها أيش J menu أو menu و بروح بضيفها على الـ
menu اللي موجودة وبالتالي صار في عندي edit اللي
بتحتوي على sub menu اللي هي عنوانها الـ options
اللي هي الـ options وهكذا حسب الـ structure بالمثال
اللي موجود مع الـ notepad عندي file و Edit و Format
و View و Help معناته على الأقل في عندي خمسة menus
بتكون موجودات و هدول كلهم وين موجودات؟ على الـ menu
bar على الـ menu bar و بعد هيك العناصر بتنضيف على
الـ menus اللي موجودة عندها عندما عملنا options menu
أو الـ sub-menu لما بضيف العناصر بحط لها dot add
عادي بضيفها .. اه خلاص هذه الآن الـ options menu الـ
option menu على سبيل المثال بدي بحط لها forward
بروح بنشئ الـ item اللي اسمه forward as a menu item
بروح بقول له option menu حسب اسمه dot add forward
ما فيش مشكلة إن هي في آخر menu حتى وإن كانت موجودة
الفكرة وين؟ إن الـ J menu ممكن
تكون في مكانين الأول على الـ J bar الـ J menu bar
و الثاني في J menu مصبوط؟
وبالتالي ما فيش مشكلة لأن عشان هيك سميتها أنا sub
menu لكن ما زلت بأعمل معاها as a menu a complete
menu
هيك بكون أنا أنشأت المينيو شكلا لو ضغط click على أي
عنصر في المينيو ما في action طب عشان أعمل action أو
أُنفذ code أو بنفذ task معينة لما أعمل click على
المينيو أيش بدو يصير؟ بدو يعمل release لـ event الـ
event اللي بدو يعمله release من نوع action event
و إذا بتذكروا لما المرة الماضية تكلمنا عن الـ action
event قلنا إن الـ action event بيعمله release لو
أنا عملت click على menu item بيعمله release لو أنا
عملت click على menu item وبالتالي أنا ممكن أشتغل
أو أطبق الـ action listener اللي أنا عرفته سابقا
تعاملت معاه سابقا مع الـ buttons و الـ checkbox و
الـ radio button و أضيفه لمين؟ للـ menu item بعرف الـ
action listener و بعرف الـ task اللي أنا بدي إياها
نأخذ مثال بسيط تبع الـ exit من الـ file في الآخر في
عندي exit صح؟ بروح بنشئ jmenuitem exit يساوي الـ
new JMenuItem و ال label تبعتها exit تمام الآن
بروحي على ال menu file menu.add(exit) اضاف ليها اخر
element لأن ماضفتش شيء بعدها بدي اضيف عليها action
listener مباشرة ممكن اشغل بواحدة من الطرق الثلاث
اللي اشتغلناها زمان مع ال action listener أو
المحاضرة الماضية ممكن اروح اعرف action listener
actionListener يعني أنا بدعم ال implementation
لل action performed و ال code تبعي بيدكتبه في
داخل مين؟ في داخل ال action performed method طيب
كمان مرة بنرجع بنقول أنه الآن بتعامل مع ال menu
بتعامل مع ال menu مثل ما كنت بتعامل مع ال button و
ال check box و ال combo box بعرف action listener و
بضيف ال action listener بنفس الطريقة على ال menu
item اللى موجود عندي عشان انفذ ال code اللى في
داخل ال action performed هذه الطريقة اللى بنعرفها
إذا بتتذكر لما تكلمنا عن ال buttons قلنا واحد من
ال constructor تبعت ال buttons بياخد شغلة اسمها ال
action كان
بياخد object من نوع action ال constructor تبع ال
JButton لو رجعت لل slide قلتلك هنتكلم عليها
لاحقًا أن ال action هي عبارة عن object
بدي أتعامل معاه لكن بعيدًا عن listener أنا بعرف
object واحد بدون ما يكون فيه عندي listener وهنا
بضطر أنه مع ال method اللي موجودة عندي من خلال أو
مع ال menu item اللي عندي بستخدم ال method اسمها
set action ال action هو عبارة عن abstract object
أو abstract action ومباشرة هذا هيعمل implementation
لمين؟ لل action performed هي نفس ال method اللي
موجودة مع مين؟ مع ال action listener interface،
مظبوط؟ وبالتالي، أنا قاعد بقول ل menu item أو لل
button إنه مافيش داعي تعمل release لل event لبرا،
تمام؟ already ال execution تبع ال event تبعنا
هيوهان، يعني بينجو سين أنا مافيش داعي اعرف
listener طالما أني بتكلم على action مافيش داعي أعرف
listener ممكن مباشرة أضيف ال element أو ال action
object ويغنيني عن ال action listener اللي موجود
هتلاحظي وكأني قاعد بقوله action listener اسمه new
action listener و راح تداني ايه سوا؟ عمل action
perform لكن ال listener أنا هذا بده فعليًا هيعمل
listen لكل ال events ويعملها filtering بينما هانح
ال action هيروح ينفذ ال code أو ينفذ ال action
event بشكل مستقل وبشكل وحيد الآن إضافة ال action
على ال menu item من خلال ال method اسمها set
action set action و بديه اسم ال action و ممكن بنفس
الطريقة اشتغل بحيث إن أنا اضيف ال action as أو
أضيف anonymous action زي ما كنت اتعامل مع
anonymous listener عرفت ال menu item مباشرة menu
item.set action و اعرف ال action في داخل ال ghost
تبع ال set action وبالتالي أنا اختصرت أو أنجزت
في موضوع ال menu و ال code اللي وراها ال menu و ال
code اللي وراها و كل ال code هيشتغل بنفس الكيفية
مع كل element مع كل menu item المفروض أنا أعرف
action أو أعرف لها action listener مظبوط ولا لأ؟
طيب الآن ال exit و ال formatting ماشي حالهم بس في
عندي ثلاث مفاتيح خاطرات جدًا اللي هم ال copy و ال
cut و ال paste هدول إيش بيساوي بينسخوا ال data
بينسخ ال data و بيحذفها من ال source و بضيف ال
data اللي موجودة في المخزنة سابقًا بضيفها لوين؟ على
ال text field أو ال text area اللي موجودة السؤال
اللي بيطرح نفسه بدك تشتغل ال copy و ال cut و ال
paste بس للتطبيق تبعك ولا بدك تتعاملي مع ال
windows أو مع ال operating system اللي البرنامج
بيشتغل عليه بين جثتين يعني بدك تعملي copy من برا
البرنامج و تعملي paste للبرنامج و العكس صحيح ولا
فقط ال copy و ال paste بتتم جوا البرنامج إذا أنت
بتخططي ال copy و ال paste تبعتك تظل جوا البرنامج
معناته أمر بسيط جدًا بأجي ال text field
.getText أظبط بيرجع لي بالنص بخليه في ال variable
اللي من نوع ال string سمي x بدي أعمل based لما
بضغط على ال based بروح بقوله ال text field text
field2.setText وقيمة ال x أظبط هذا ال based ال V
بعد ما بقوله جت ال text بروح بقوله text field.
setText(none)
فاضي تنحل مش مشكلة ولا في أسهل منها و ال code هذا
بده يصير في داخل ال action performed بكل بساطة لكن
لو كنت اتعامل مع ال operating system اللي أنا
بشتغل عليه بحيث إنه اعمل copy من ال application
تبعي و اعمل paste على أي application آخر أو اعمل
copy من ال operating system و اعمل paste في داخل
التطبيق تبعي هذا بيطلب مني اعرف شغلات جديدة
اللي لها علاقة بال operating system مثل clipboard
على سبيل المثال وهذا code
بسيط من أجل التعامل مع ال copy و ال paste مع ال
operating system تعال نبدأ من فوق إيش و هذي وين
موجود؟ action performed يعني لأن أنا في عندي
listener أو في عندي action تمام و ربطت ال copy و
ال cut و ال paste مع ال action listener هذا على
سبيل المثال و عمل implementation لل action
performed اللي موجود عندي هاني بداية هاني
clipboard ال clipboard هي عبارة عن ال buffer بتخزن
فيه ال data اللي بنعمله copy و copy الثاني get
toolkit.getSystemClipboard() لأنه ما بديش اعتمد على
clipboard من عندي لو أنا بدي اعتمد على clipboard
من عندي أنا بدي variables و بخلص بس أنا بدي اعتمد
على ال system clipboard بدي احدد ال command تبعي
ال command عبارة عن ال event هي .getActionCommand()
command إيش ال command اللي انقلب؟ إيش ال menu
item اللي انعمل عليه click؟ ودخلتها على switch
statement أو if statement حسب الكود اللي أنت
بتشوفه مناسب بكل بساطة في حالة ال copy هيتنفذ
الكود اللي احنا شفناه سابقًا بس وين بدو يتخزن؟ في
ال clipboard اللي موجودة عندي لاحظي هي ال text
field و تجاه ال text نفسها بس أنا خزنتها في
variable لما كنت بتولّف داخل جهازي الآن هروح أقوله
String selection = new StringSelection(
selection لل text field اللي موجود أو للنص اللي
موجود عندي هان و ال text field content ال data
اللي موجودة عندها أضفتلها ال data اللي موجودة else
لو كانت العملية clear معناته امسحه لو كانت cut هي
موجودة تحت أخدت ال text بنفس الطريقة اللي فوق و
أضفته وبعدين عملت إيش null في حالتي ال based شوية
ال based اللي فيها transformation اللي بدو يصير لو
كان ال command تبعي based معناته أنا بضرحه
Transferable clipData = clipboard.getContents(
null); وفي الآخر عرفت ال String وال String هذا
بدي أسويه بال data اللي موجودة ولاحظي عمالي بحاول
أعمل وكأني بعمل casting لل data type اللي أنا بدي
أسترجعها بال variable اللي موجود عندهان وبهيك لأن
عملية ال get data أو ال get TransferData ممكن
تعمل exception فلازم اعملها implementation ضمن
catch أو try and catch بالمناسبة هذا ال code كم
مرة أنت بتكتبه؟ مرة واحدة مش أكثر من كده طبعًا مجرد
إن أنا جايباه هنا عشان لو بدي اتكمل education معين
اتشغلي هل هذه الطريقة الوحيدة؟ حتمًا في غيرها تمام
حتمًا في طرق ثانية غيرها في موضوع ال implementation
لكن مستحيل تبدع ال clipboard و ال functions اللي
موجودة في داخل ال clipboard اللي موجود عندي هنا
وبالتالي عادة البروجرامر لو بده يعمل application
كامل و تشتغل على menu هياخد ال code هذا في action
listener واحدة موجودة و بيربطها بال buttons أو
عفوًا بال items ال menu items الثلاثة أو الأربعة
اللي موجودات طبعًا أنا بتكلم هنا على أربعة لأن في
عندي إيش في عندي clear زي ما كانت مع ال text field
في الآخر ال code اللي عندي مع ال menu فكرتنا واحدة
هتظل إنه أنا هعتمد على هتظل أعتمد على ال
ActionListener و ال ActionEvent اللي احنا شفناهم
سابقًا طيب لما أنا بأجي باتكلم على ال
file أو ال menu في عندي شغلة بنسميها ال Mnemonic
Keys لما أنا بضغط ال Alt لاحظي ال F في ال file
صارت تحتها underscore ال E ال O في ال format يعني
لو ضغطت O الآن راح يفتح لي القائمة مباشرة الـ W و
الـ F في الـ E لو رحت قلت له مثلا F خليته يتحدد
وصلت للـ command اللي موجود وهاي احنا بنسميها الـ
Nominate Keys الـ Nominate Keys هي عبارة عن الـ key
اللي أنا بدي اعتمد عليه اللي بده يكون underlying
letter على الشاشة أو على الـ menu name اللي موجود
عندي يعني لو أنا اجيت في الـ cut بدي أوصل لها من خلال
الـ Alt معناته لازم أروح أحدد في الـ constructor
إيش العنصر الـ constructor الآن احنا سابقا مع الـ
menu item كنا بنتكلم على الـ label فقط الآن بدي
أضيف الـ label و الـ nominic تبعتها أو الـ nominic
character أو الـ nominic key اللي أنا بدي أضغطه الـ
nominic كمان مرة مرتبطة بالـ Alt تمام؟ لو أنا ما
أضفتهوش ممكن أضيفه من خلال الـ method اسمها set
nominic و بحدد الحرف بينفع أحط حرف من خارج الكلمة؟
من خارج الكلمة؟ يعني مثلا الآن الكلمة اللي عندي أو
الـ label اللي عندي هون لبينفع أحط حرف الألف؟ لأ
لأن الـ nominic هو عبارة عن character من الـ
character تبع الـ label بدو يظهر تحتي إيش الـ
underscore هي كمان مرة هاي يوم هاي الآن مافيش عندي
خطوط هنا file مافيش شيء ومجرد اضغط على مفتاح الـ
Alt تم تحديد الحرف مع كل .. الآن لو ضغطت كمان مرة
على سبيل المثال على الـ H راح يفتح لي القائمة تبعت الـ
H الآن أنا ما بتكلمش قاعد على الـ accelerator قاعد
بتكلم وبالتالي هذا لازم يكون الحرف جزء من الكلمة
جزء من الكلمة الآن لو أنا بدي أتكلم على الـ
accelerator أو التسريع معناته أنا بدي أضغط على
المفاتيح إما الـ control أو الـ shift أو الـ alt زائد
الـ character الحرف اللي أنا بدي إياه مثل احنا لما
بنعمل copy إيش بنسوي Ctrl C Ctrl V Ctrl V من
الكلمة لأ لما بنعمل cut Ctrl X مش من الكلمة
وبالتالي يعني على سبيل المثال هاي هون في الـ editor
لو أنا اجيت كتبت هيك وظللت النص وهي Alt وهي X ايه
سوى؟ ولا حاجة سواش شيء لأن المفروض الـ Nominic هي
واحد من الحروف من الكلمات اللي على الـ menu عشان
يُسهل عملية الوصول للـ menu الآن بقدر أقول له E بيطلع
مثلا أنا بدي أعمل cut لجيته حاطة Nominic تحت مين
تحت الـ T هي الـ T راح يقص النص تمام؟ يعني الـ Nominic
character لازم يكون جزء من الكلمة بينما لو أنا
اضغط Ctrl X
accelerator حدث للنص اللي موجود عندي وأنا بدي أفرّج
ما بين الشغلتين الآن الـ accelerator هذا بيحتاج
دائماً لـ mask الـ mask هو إما الـ control أو الـ shift
أو الـ alt وبالتالي
أنا بدي أروح أحدد الـ menu item اللي عندي طبعاً لاحظي
جابي شوية اتكلمت على الـ nominic مع الـ menu و الـ
menu item مش مشكلة الـ accelerator مع الـ menu item
لأنه فيه command أنا بدي أنفذ الـ command اللي وراه
set accelerator set accelerator و الـ accelerator
هذا معتمد على الـ keyboard طيب الآن keystroke
المفاتيح اللي انضغطت
.getkeystroke رجع لي بالمفاتيح اللي انضغطت يعني إيش
المفاتيح اللي ممكن تنضغط keyevent.vk_ الـ
O وهذا هو الـ letter اللي أنا بدي إياه لو أخذت
keyevent. هديك list بكل الـ characters اللي موجودة
الصفر للتسعة و الـ character الـ الف بتأخذها كما input
event عملية الإدخال بدي أعمل لها masking من خلال
.control mask إما هتلاقي فيه إنك الـ alt mask أو الـ
shift mask وبهيك أنا صرت بتحكم بالـ accelerator
يعني ممكن أنا أروح أستخدم الـ alt mask بحيث إن أضغط
Alt X تشتغل عشان ينفذ الـ cut لو أنا بحتاجها
وبالتالي هذه هي الـ task أو هذه الـ accelerator
الموجودة وضروري تظهر الفرق ما بين الـ Nominic و الـ
Accelerator يعني
في الـ key event dot هدى بتحدد الحرف اللي بدي
أعمله بالضبط الـ key event dot بحدد الـ character
وهنا بحدد الـ mask تبعتها الـ mask نعم بس الـ stroke
هي شفتها هون كثير أنا بدي أضغط على الـ keyboard،
مظبوط؟ احنا في عيننا الـ key pressed شفناها سابقاً
أنا بتكلم عليه مفتاح واحد، مظبوط ولا لأ؟ لكن لما
أنا بدي أدخل لأكثر من مفتاح اللي هو mask، تمام؟
معناته، لاحظ، تبهى معي، بينفعش أضغط أنا out أرفع
إصبعي، وبعدين أروح أضغط الـ character زي ما في
حالة الـ .. الـ .. الـ .. زي ما في حالة الـ nominic في
الـ nominic أنا هاي كمان مرة شوف الفرق؟ وين راح الـ
notepad؟ هاي Alt ورفعت إيدي، ضاعت الـ nominate
characters معاملة هاي H بيشتغل الحال مع الـ
accelerator لأ المفتاحين مع بعض وهم ينضغطوا
وبالتالي صرت بتكلم على stroke تمام؟ إيش المفاتيح
اللي بدها؟ تنضغط عندها، فأنا راح قلت له هتل
المفاتيح اللي انضغطت هو أرجع لي بنصيغة المفتاح اللي
بده ينضغط لو كان حرف الـ O مع الـ control معناته أنا
بتكلم قاعد على مين؟ بتبقى أعمل execution للـ code
أو للـ event أو كأني بعمل بريس لا الـ open item أو الـ
menu item اللي موجود عندها
والله مش عارف الاختصار من أين جايبينه بس هو في
الآخر هذه عبارة عن الـ definition أو الـ character
constant character اللي بتتعامل مع الحروف الـ event
يعني مافيش عليها details حتى في الـ hand exit
dot
.set keystroke احنا عندنا الـ menu
item صح؟ اه .set accelerator في داخلها accelerator
يقولنا في داخل الـ accelerator عند key
keystroke keystroke .get keystroke و الـ key أنا
فيه عندي hand key event key
event
dot مجموعة الـ characters اللي عندنا هيهم شايفة؟
يعني حتى هو هنا مافيش description حتى مع الـ IDE
عشان يقول لي إيش بس هي عبارة عن integer value و الـ
integer هذا مرتبطة بكل character من الـ characters
اللي موجودة احنا الآن exit معناته على سبيل المثال
بدي أحطه مع الـ .. قلنا vk
vk_x كما
وقلنا بدنا الآن input mask input mask input
event .control
control mask وبالتالي هذه العناصر اللي موجودة
فعلياً اختصار الـ VK هل هي اختصار لإيش key event
ما حطوهاش بنفس الترتيب عشان نقول key event أنا
ماعندي علم صحيح فيها وبالتالي ما أقدرش أفتي لك
اختصار لإيش عن جد بس في الآخر هي عبارة عن رقم الـ
character أو الـ integer اللي بيعمل represent للـ
character في حالة الـ key event اللي موجودة عندنا
طيب الـ menu item في بعض الأحيان بنشوف على الـ menu
icons بنشوف مع الـ menu icons يعني عند الـ save بيروح
بيحط لي شكل الـ disk صغير عند الـ exit بيروح بيعمل لي
شكل الباب بيروح عند الـ cut على سبيل المثال بيروح
بيقول لي هي في مجص ولا لا هذه الـ icons باعتمد على
وجودها في الـ menu item من خلال الـ constructor من
خلال الـ Constructor Constructor أول مرة شفناها
بالـ label صح؟ لحاله، بالمرة الثانية شفناها الـ
label و الـ nominic character و الـ label هو الـ
image وبالتالي أنا بقدر أحدد الـ image تبعتي اللي
بدي إياها تكون في داخل الـ character أو داخل الـ
menu اللي موجودة عندي هنا إذا تكلمنا على الـ menu أو
الـ icon مع الـ menu معناته أنا ضروري أحدد الـ
orientation الآن مين جاب لمين؟ النص جاب للصورة ولا
الصورة جاب للنص؟ حسب الاتجاه المفروض تتحكم فيه ولا
لأ فبالتالي بقدر أقول له أنا cut item .set
horizontal text position horizontal text position
لحظة بتكلم على مين؟ position تبعت مين؟ تبعت الـ
text موجود على الـ left يعني على يسار الـ icon اللي
موجود عندك اللي هي الصورة الـ icon أحيانا
بضيف على الـ menu أو بشوف في بعض الـ menus الصورة
مرة واحدة بتستدعيها المفروض كـ file موجود عندك على
الجهاز الآن في داخل الـ project أو في أي مسار خالد
في أي folder خارج الـ project بس ممكن تزوديه
بالمسار كامل أما بتكون في داخل الـ source جوار الـ
java file في نفس الـ folder وبهيك تستدعيها بدون
المسار أو بدك تحفظيها في مسار كامل تحدد الـ C على
أي folder وتعملي لها calling أحيانا
بنظهر على الـ menu أحيانا بنظهر على الـ menu radio
button و check box هل هذا الكلام ممكن يصير؟ أه
ممكن يصير و ال Java مفرّغة Java check box menu item
و Java radio button menu item بإيش
بيفرق هذا عن السابق؟ إن هذا مخصص للـ menu قايمة
العمل نفس الكيفية السابقة ولا اختلاف ولا شيء في
الاختلاف وبالتالي إذا أردت ال data اللي موجودة منه
بروح من خلال اسمه readonlyitem.isselected true
بأخذ عليها ال action اللي أنا بديها مع ال radio
buttons ما لهم؟ أنا فيه عندي مفتاحين أو ثلاثة بدي
radio group بدي radio group عشان أضمن أنه تشغل
وبالتالي ما ينطبق على ال check box اللي شفناها
سابقا و ال radio button و ال radio button عفواً
هينطبق على ال check box menu item و على ال radio
button menu item خلص
okay تبقى لدينا أربع أو خمس slides سأتكلم فيهم كلام
بسيط وسنعود للمرة القادمة بالتطبيق إن شاء الله
تعالَ الآن ال menu اللي اشتغلنا عليها menu ثابت
يعني على الـ menu bar موجودة بدون تغيير ولا لا
بتتغير مكانها؟ لا الآن في عندي قوائم بتظهر لما بضغط
بمفتاح الماوس اليمين مصبوط هذه بنسميها pop-up يعني
الـ menu مش موجودة .. مش موجودة .. أو عفواً مش
موجودة حالياً لكن أنا لما بدي إياها بتظهر الآن ال
pop-up menu هذه بيلزمني فيها شغلتين عشان أظهرها
بعد .. غير إن أنا بدي أنشئ الـ menu بيلزمني ال
position اللي بدها تظهر فيه وبيلزمني الـ element
اللي أنا بدي أظهر معه ال pop-up
الـ GUI Element اللي بدي أظهر معه البوباب تعالَ
أقول لك ليش لو أنا سألتك الآن هذه frame فاضي زي ما
في الحالة اللي عندي تماماً هاي وعملت بوباب عليها
copy و cut to paste إيش بعمل لك؟ عمل copy لإيش؟ الأسر
كل ما أعملهم disable أو freeze مصبوط الكلام
وبالتالي أنا لازم أربط الـ element أو الـ pop-up
menu مع element اللي هو فايدة يعني هكذا، لو أنا
أجيت فوق المفتاح وضغطت بمفتاح الـ mouse اليمين،
إيش ممكن أساوي؟ فوق الـ button؟ إيش بدي أساوي؟
أكتيري أغير الـ properties تبعتي أغير الخط مثلاً أو
أغير اللون بس هذا الكلام مش هذا الكلام اللي بده
يصير ال pop-up menu لها مهمة إن أتسهل على ال user
الوصول لشغلات بعيدة عنه وبالتالي دائماً لازم
أربطها بشكل صحيح والربط هذا بيستدعي إن ال position
تبعه هيكون قريب من الـ element اللي أنا بديها بداية
إنشاء ال pop-up menu في عندي pop-up menu اللي
مثّلت عندي من البداية إيش؟ الـ Bar، خلّيني أسميها
الـ Bar، الـ Menu Bar بعد هيك بضيف عليها إما Menu
Item أو بضيف عليها Menu حسب حاجتي ومش الشغل السابق
تماماً ولا شيء وبالتالي إنشائي الـ Pop-up Menu
مثله مثل الـ Menu الرئيسية باستثناء إن مش هعتمد
على Menu Bar مثله مثل المينيو الرئيسية باستثناء
إنّي مش هعتمد على menu bar يعني ping و saying هيك
يعني ال pop-up menu وكأنها تكافئ المينيو بار عنده
عنصر موجود في الـ menu اللي أنشأتها سابقاً بينفع أنا
أضيفه في ال pop-up menu أه بينفع لأن هو already
object تم تعريفه بيكون على menu وبتقدر تكون على
menu menu item وبتقدر تضيفيه على ال pop-up menu
اللي موجود عندها
لا ما جبتش ولا الورق لأن أنا أساساً وصلت متأخر
الجامعة يعني ما وصلتش مكتبي فاليوم ما فيش حضور في حد
غايب المرة اتنين اللي فاتت وماجي أو اليوم بسيط
يعني أصلاً ما فيش مشكلة إن شاء الله بس بتهيأ أبو حمزة
أنتَ بحاجة إنك سجّلت ختام المحاضرة يعني زي ما قلنا
هنا وبالتالي أنا لازم أنتَ بتهللـ pop-up menu
إنشائها أو الفرق الوحيد أو الاختلاف في إنشاء الـ
pop-up بين ال menu وبين ال pop-up menu ال menu
مرتبطة بالـ menu bar والـ pop-up متنقلة أو زي
الفقاعة بتظهر في أي مكان أنا بديها وبالتالي بقدر
أقول أن ال pop-up menu أو ال J pop-up menu تكافئ
بالنسبة ليه؟ الـ JMenuBar إلا غير إن الـ Pop-up
menu هذه لاحقاً عشان أنا أظهرها لازم أحدد أو
أستدعيها من خلال method اسمها إذا أنا بدي أظهرها
بشكل عام في عندي method popup.show
مع أي بنى اللي بدأ تظهر أيوه و X و Y الـ position
تبعتها طبعاً لما X و Y نتكلم على الـ X والـ Y
دايوجونال لكن برضه هذا ممكن أربطه بـ specific
element لما بضغط مباشرة على الـ element تظهر بدون
مضطر إن أروح أقول له إيش الـ show بدون ما أقول له الـ
show المحاضرة اللي جاية إن شاء الله تمام هنتكلم
بتفاصيل أكثر ونحاول نشغل بعض الشغل العملي اللي له
علاقة