Cs602 java programming خريف 2016 7

Page 1

‫‪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‬‬


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.