CS602: Java Programming
Fall2016
Dr. Mabroka A.M.
.41لغة الجافا و الواجهات الرسومية )java language and graphical user interfaces(GUI تعتبر واجهات االستخدام الرسومية احد انواع واجهات االستخدام التي تسمح للمستخدم بالتفاعل ً مع االجهزة االلكترونية باستخدام الصور و العناوين و االدوات بدال من االوامر النصية text ,commandمن امثلة GUIبيئة التطوير املتكاملة للبرمجة بلغة الجافا NetBeansالتي تتكون من عدة واجهات استخدام لتسهيل االستخدامية و تجنب االدخال الخطأ .و تحتوي هذه البيئة على ما يلي: Title bar .1الذي يحتوي على عنوان النافذة ,window title Menu bar .2الذي يحتوي على القوائم (املهام) مثل file, edit…. :و هكذا. A set of buttons .3و تعني مجموعة من االزرار التي يستخدمها املستخدم عن طريق الضغط عليها لتنفيذ مهمة معينة مثل حفظ ملف أو تنفيذ ملف ,و هكذا. ُ Combo box .4يستخدم لكتابة بيانات. ُ Scroll bar .5يستخدم لتحريك الشاشة من اعلى الى اسفل و العكس او من اليمين الى اليسار و العكس. باإلضافة الى العديد من GUI Componentsالتي تمتاز بها بيئة التطوير املتكاملة كما في الشكل التالي: menu bar
buttons
Scroll bar
14
combo box
CS602: Java Programming
Dr. Mabroka A.M.
Fall2016
مزايا :GUI .1سهولة تعامل املستخدم مع النظام. .2تقليل نسبة االخطاء. .3سرعة التعلم و االبداع. مكونات الواجهات الرسومية GUI Components ُ تشيد GUIمن .GUI Componentsو هذه املكونات هي مجموعة من الكائنات objectsالتي من خاللها يتفاعل املستخدم مع اجهزة االدخال و االخراج مثل الفأرة و لوحة املفاتيح أو أي جهاز آخر .و تحتوي لغة جافا على حزم خاصة إلنشاء و تكوين واجهات مستخدم رسومية اهمها ما يلي: .4الحزمة )AWT (Abstract Window Toolkit
ُ ُ تعتبر هذه الحزمة هي االقدم ,حيث كانت java GUIsتبنى و تشيد من AWTاملتمثلة في الحزمة
java.awtو هي تعتمد على نوع نظام التشغيل .و يتم تضمين الحزمة بالشكل التالي: ;
*import java.awt.
تعني امكانية باستخدام اي classموجودة داخل هذه الحزمة .2الحزمة swing
ً و هي حزمة تم اصدارها و استخدامها حديثا في تصميم الواجهات الرسومية .و تعتبر جزء من JFCو هي اختصار ل .Java Foundation Calssesو تحتوي على مكونات رسومية GUI Componentsموجودة ضمن الحزمة javax.swingالتي يتم استخدامها إلنشاء واجهات رسومية بلغة جافا.
تتميز ال swingبالكفاءة و املرونة في تصميم الواجهات الرسومية ,كما تتميز باالستقاللية حيث أنها ال تعتمد على نوع نظام التشغيل. و تحتوي swingعلى العديد من ال classesالتي تسمح للمستخدم بالتفاعل مع البرنامج بإضافة النوافذ و القوائم و االزرار للتطبيق .application و اهم هذه ال classesما يلي:
14
CS602: Java Programming
Dr. Mabroka A.M.
Fall2016
Input/output JOptionPane class يوجد التصنيف JOptionPane classضمن الحزمة javax.swingالتي تزود املستخدم بصناديق حوار )command windows( dialog boxesلإلدخال و االخراج .هذه الصناديق يتم عرضها عن طريق استدعاء الدوال املوجودة في التصنيف .JOptionPane classو من اهم هذه الدوال ما يلي: .1الدالة showInputDialogو هي دالة من نوع .staticو يمكن استدعائها باستخدام اسم ُ classاملوجودة فيها دون الحاجة الى كائن .و تستخدم لعرض صندوق حوار لألدخال و ترجع القيمة املدخلة بشرط ان تكون من نوع .stringو الشكل العام لها هو: ; )"Type (String) variable-name = JOptionPane.showInputDialog("text message ً **مالحظة :الدخال رقم ( ،)int or doubleالبد أوال من ادخال القيمة على انها ،stringثم تحويرها (تحويلها) الى النوع املناسب باستخدام دوال التحوير مثل: ;)int variable-name=Integer.parseInt(string value ;)or double variable-name=Integer.parseDouble(string value ُ .2الدالة showMessageDialogو هي دالة من نوع .staticتستخدم لعرض رسالة ضمن صندوق حوار و كذلك قيم متغيرات ,و الشكل العام لها هو: الرسالة املراد ظهورها على الشاشة
موضع ظهور الصندوق على الشاشة
JOptionPane.showMessageDialog(null ," text message"+variable-name+"text message"+…. , ; )"window title" , message-type
نوع الرسالة
اسم متغيرة املراد طباعة محتواها
عنوان الصندوق
هناك أنواع عديدة من classesالتي تحتوي على دوال جاهزة للحصول على GUIمثل: JLable .1لوضع عنوان أو ملصق JRadioButton .2الختيار قيمة واحدة من عدة خيارات ImageIcon .3لوضع ازرار JLable .4لوضع ملصق JMenu .5لتكوين قائمة JTextField .6للحصول على صندوق لكتابة نص
14
CS602: Java Programming
Fall2016
Dr. Mabroka A.M.
ُ :LayoutManager يتمثل في مجموعة من ال classesالتي تحتوي على دوال تستخدم لترتيب مكونات ال GUIفي محتوى متنوع مثل: :Flow layout class يسمح بترتيب ال GUI Componentsبشكل متتالي من اليمين الى اليسار بالترتيب املعطى. :Border layout class يرتب ال GUI Componentsفي خمس مناطق :شمال ,جنوب ,شرق, غرب ,وسط. :Grid layout class يرتب ال GUI Componentsفي شكل صفوف و اعمدة. مالحظات: يمكن برمجة الواجهات GUIsإما بكتابة ال codeمباشرة في التطبيق ,أو باستخدام مزايا بيئة التطوير NetBeansالتي توفر امكانية تصميم الواجهات باستخدام املصمم designالذي يسمح بتصميم واجهات البرنامج عن طريق اختيار GUIs Componentsاملناسبة من لوحة الخيارات و بالتالي تهيئة ال codeاملناسب لكل مكون ليتمكن املبرمج من اضافة اجزاء أخرى لل codeحسب الحاجة (انظر بيئة تطوير .)NetBeans ً ُ هناك GUI Componentsالتي ال تستطيع أن تولد حدثا ( ,)can not generate eventمثل JOptionPane classالتي تسمح فقط بالعرض و االدخال لنص .textفعند الضغط على الزر ok في صناديق الحوار لدوال ,JOptionPaneال يتولد حدث ,و انما فقط يتم تمرير القيمة املدخلة الى البرنامج ,او يتم إزالة صندوق الحوار من الشاشة. ً ُ هناك GUI Componentsالتي تستطيع ان تولد حدثا ( )can generate eventمثل JButton, JTextFields, JLabelو غيرها .في هذه الحالة ,البد من اتباع الخطوات التالية: 1. Create class that represents the event handler. 2. Implement an appropriate interface, known as an event –listener interface, in the class from Step 1. 3. Indicate that an object of the class from Step1 and 2 should be notified when the event occurs. This is known as registering the event handler. ُ تستخدم التصنيفات املتداخلة inner classesفي معالجة الحدث ,event handlingحيث تسمح لغة جافا للمبرمج بالتصريح ب classesداخل ,classesو تتميز هذه ال classesاملتداخلة بكونها قادرة على الوصول لجميع محتويات ال classالسابقة لها .و يمكن ان تكون هذه الinner classes 11
Fall2016
CS602: Java Programming
Dr. Mabroka A.M.
ً ُ من نوع staticأو .non staticو تسمى هذه ال inner classesأيضا ب ,nested classesو عادة ما تكون inner classesاملستخدمة في event handlingمن نوع .non-ststaic **سؤال املحاضرة :ترغب أحد الشركات في بناء برجين على قطعة ارض .فإذا كانت قاعدة البرج االول مربعة (طول الضلع 44م) ,و البرج االخر مثلثة ,أكتب برنامج بلغة الجافا يقوم بالتالي: .1عرض بيانات البرجين و املساحة االرضية لهما باستخدام .GUIعلما بان مساحة البرج ذو القاعدة املثلثة تساوي نصف مساحة البرج املربعة. .2عرض مساحة البرجين بعد بناءهما على ارتفاع قدره 54طابقا علما بان مساحة قاعدة البرج تزداد بمقدار 4.41لكل 5طوابق اضافية إذا زاد ارتفاع البرج عن 14طوابق .41الواجهات (الوصالت) interfaces تشبه الى حد كبير classو لكنها تختلف عنها في كونها تدعم الوراثة املتعددة على عكس ,superclass ً فمثال لكل subclassيوجد superclassواحدة فقط ,بينما يمكن أن يكون ل classاكثر من interface واحدة .و الشكل العام لها هو:
اسم التصنيف
كلمة محجوزة معدل الوصول (اختياري )optional
Access modifier interface interface-name { اسماء الثوابت من نوع )final type variables (constants الدوال من نوع abstract methods ال يمكن استخدام هذه الدوال إال بعد إعادة تعريفها مرة أخرى في التصنيف املراد استخدام هذه الدوال فيه } **مالحظات: .1يتم تعريف الدالة في ال interfaceعن طريق كتابتها بالشكل التالي: ; )…………(Return-type method-name 14
CS602: Java Programming
Dr. Mabroka A.M.
Fall2016
.2تدعم interfaceعملية تعدد االشكال ,حيث يمكن تكوين مصفوفة من نوع interfaceتحتوي على أنواع مختلفة من الكائنات. .3الستخدام interfaceفي البرنامج ,نتبع الشكل التالي: اسم الوصلة ن
اسم الوصلة2
اسم الوصلة1
كلمة محجوزة
interface-name1 ,interface name2 ,…,interface-namen
اسم التصنيف معدل الوصول
implements
class class-name
Public
كلمة محجوزة { ………. …………… ………. }
.4يمكن الي classتنجز او تنفذ interfaceان تستخدم الدوال املوجودة داخل الinterfaces عن طريق إعادة تصرحها و كتابة تفاصيلها مرة اخرى داخل هذه ال.class .5ال interfaceتعتبر بمثابة تعريف للطرق التي تحدد التفاعل فما بين االشياء ,مثل املستخدم و النظام .بمعنى آخر interface ,هي التي تحدد العمليات املسموح بتنفيذها دون الحاجة الة معرفة كفية عمل هذه العمليات. سؤال املحاضرة :باستخدام ,GUIsاكتب برنامج يقرأ بيانات كتاب في معرض للكتاب ,ثم يحسب و يعرض عدد النسخ املباعة و مقدار ما تبقى.
14
CS602: Java Programming
Dr. Mabroka A.M.
Fall2016
.41التدفق و امللفات stream & files ُيسمى تدفق فيض من البيانات و املعلومات من مصدر معين sourceالى جهة وصول محددةُ ,يسمى .stream و من اشهر ال classesالخاصة ب streamهي System.in :و هو input streamالذي مصدره لوحة املفاتيح. أما System.outفهو تعتبر output streamو جهة الوصول هي الشاشة. للتعامل مع امللفات في لغة جافا ,البد من تضمين الحزمة: ;*import java.io. حيت تحتوي هذه الحزمة على classesللتعامل مع امللفات .و تحتوي هذه ال classesبدورها على دوال للقراءة من او الكتابة في امللفات النصية. من أمثلة هذه الدوال ما يلي: )(exists )(canRead )(canWrite )(isFile و يتم اوال تكوين كائن من نوع ملف باستخدام الشكل التالي: اسم امللف
اسم التصنيف كلمة محجوزة
اسم الكائن
اسم التصنيف
; )File object-name = new File ( file-name
14