You are on page 1of 29

‫ملحظات قبل بدء الدروس‬

‫• هذا الكتاب يتم توزيعة مجاناً‪.‬‬


‫• الرجاء منكم التركيز جيداً بكل ماسوف يتم تقديمه من الدروس‬
‫• الرجاء تطبيق جميع المثله الموجودة واعطاء امثله من عندكم‬

‫وفي الخير انا انتظر منكم دعاكم واقول ال يوفقكم جمياً‪.‬‬

‫نبداء الدروس ‪..............................‬‬


‫‪-‬اول محاضرة‪-‬‬
‫يسعدني ان اقدم اليكم هذا الكتاب الذي يميل اكثر الى شرح العملي اكثر منه الى النظري في مادة البرمجه الكئنيه ‪OOP‬‬
‫سوف نبدا بتعرف الى بعض الشيا التي نحتاجها في البرامج التي سوف نقوم بتصميمها‬
‫‪:Package‬هي مجموعه من الكلسات‬
‫يندرج تحت الباكج كلمه ‪ import‬التي تكتب قبل كل الكلسات التي نحتاجها مثل‪:‬‬
‫‪;*.Imprt java.awt‬‬
‫‪:Class‬هي التي تحتوي على مجموعه من الدوال والمتغيرات‪.‬‬
‫مثل‪:‬‬
‫‪{Class Mohammed‬‬
‫‪)(Public Mohammed‬‬
‫{‬
‫}‬
‫‪)(void AnyName‬‬
‫{‬
‫}‬
‫‪)][Public static void main)String args‬‬
‫{‬
‫}‬
‫}‬
‫‪ :Constructor‬هي داله تاتي داخل الكلس بنفس اسم الكلس وتتنفذ عند انشا اوبجكت للكلس كما في المثال السابق فداله الكونستركت هي التي‬
‫تحمل اسم بنفس اسم الكلس ‪ Mohammed‬هي الداله ‪ )(Mohammed‬ويتم انشاء اوبجكت ممثل للكلس كما يلي‪:‬‬
‫‪;)(Mohammed mmm=new Mohammed‬‬
‫الداله ‪ main‬هي الداله تتنفذ اول ما يتم عمل كومبيلر للبرنامج والسبب يعود الى كلمة ‪ static‬حيث ان المترجم تبع الجافا يتعرف على الداله‬
‫وينفذها اولً لنها تحتوي على كلمة ‪.static‬‬
‫بعد هذا سوف نقوم بعمل نموذج متكامل يوضح هيكل البرامج في الجافا كما يلي‪:‬‬
‫‪:Java Structure Program‬‬
‫‪;Package Name‬‬
‫‪;Import Java Class‬‬ ‫اسم الكلس (اسم اختياري من انشائك)‬
‫‪Public classes NameClasss‬‬
‫{‬
‫‪declaver of variables//‬‬
‫هنا نقوم بتعرف المتغيرات التي نحتاجها في الكلس‬
‫‪;int I‬‬
‫‪;char c‬‬
‫‪;Jlabel l1‬‬
‫‪.‬‬ ‫دالة الــ ‪ constructer‬طبعاً هذة الداله المكتوبه هي الداله الفتراضيه ولكن يمكنك‬
‫‪.‬‬ ‫التعديل على البدي تبعها كمتا تريد‬
‫‪.‬‬
‫‪)(public void NameClass‬‬
‫{‬
‫‪;)""(System.out.println‬‬
‫}‬ ‫دالة عاديه يمكن اعطائها بارمتريات‬
‫‪)(Void show‬‬
‫{‬
‫‪;)System.out.println)"i="+i‬‬
‫}‬ ‫الدالة الـ ‪ Main‬للبرنامج‬
‫‪)public static void main)String][ args‬‬
‫{‬
‫انشاء اوبجكت ممثل للكلس اسمه ‪N‬‬
‫‪;)( NameClass N=new NameClass‬‬
‫‪;N.i=10‬‬
‫اعطاء المتغير‪ i‬الموجود داخل الكلس ‪ ClassName‬قيمة وقدرها‬
‫‪;)(N.shwo‬‬
‫‪10‬‬
‫}‬
‫}‬
‫استدعاء الداله ‪ )(show‬من الكلس‬
‫‪ ClassName‬حتى تتنفذ وتقوم بعملها‬
‫لهمية الدالة ‪ Constructor‬سوف اقوم باعطاء مثال يبين كيفية يتم تنفيذ دالة الـ ‪ Constructor‬كما عرفنا سابقاُ بان دالة الـ‬
‫‪ Constructor‬تمتلك نفس اسم الكلس‪.‬‬
‫المثال‪:‬‬
‫‪class{ A‬‬
‫‪int x=;10‬‬
‫‪int y=;10‬‬
‫‪)(public A‬‬
‫{‬

‫‪;))System.out.println)"x+y="+)x+y‬‬
‫}‬

‫‪{ )public static void main)String ][args‬‬


‫‪;)(new A‬‬

‫}‬
‫}‬
‫المثال السابق سوف يقوم بطباعة‪:‬‬
‫=‪x+y‬‬ ‫‪20‬‬
‫طبعاً المثال السابق ليحتاج الى شرح وذالك لسهولته‬
:‫امثله‬

:‫المثال الول‬
class mohammed{
int x;
int y;
String h;
public mohammed()
{
System.out.println("class
name:mohammed");
}
void mo(int i)
{
System.out.println("x="+x);
System.out.println("y="+y);
System.out.println("s="+h);
System.out.println("i="+i);
}
public static void main(String[] args) { Output
mohammed m=new mohammed();
m.x=20; class name:mohammed
m.y=30; x=20
m.h="mohammed dawod"; y=30
m.mo(10); s=mohammed dawod
} i=10
}
‫المثال الثاني‬ :‫تابع المثله‬
class mohammed{
public mohammed()
{
System.out.println("class
name:mohammed");
}
void mo(int i,int m)
{
System.out.println("i+m="+(i+m));

}}
class dawod{

public dawod(){
System.out.println("class name:dawod");
}
public void sum(int i,int j){
System.out.println("i+j="+(i+j));
}
public static void main(String[] args) {
mohammed m=new mohammed();
m.mo(10,20);
dawod d=new dawod(); Output
d.sum(50,100);
class name:mohammed
} i+m=30
} class name:dawod
i+j=150
:‫تابع المثله‬

‫المثال الثالث‬
class dawod{

public dawod(int x,String


s){
System.out.println(x+"
"+s);
}
public static void
main(String[] args) {
new
dawod(10,"mohammed");
Output
}
10mohammed
}

‫الى هنا ننتهي من امثلة الموضوع السابق وننتقل الى موضوع جديد‬
‫‪Inheritance‬‬
‫التوريث موضوع من اهم المواضيع الموجودة في الـ ‪. OOP‬‬

‫بعض الملحظات حول التوريث (‪)inheritance‬‬


‫الكلس ‪ class‬من الممكن ان ترث صفات وسلوك ‪ class‬اخرى‪.‬‬ ‫•‬
‫الـ ‪ class‬التي ترث نسميها ‪ SubClass‬والـ ‪ class‬التي تورث نسميها ‪.SuperClass‬‬ ‫•‬
‫الكلمه التي تَستخدم لتوريث هي ‪ extends‬وهي كامه محجوزة ‪.‬‬ ‫•‬
‫ليمكن الوراثه من كلس محمي بكلمة ‪. final‬‬ ‫•‬
‫الـ ‪ class‬البن ‪ subclass‬يمكن ان يعدل على قيم المتغيرات داخل الـ ‪ Class‬الب ‪ superClass‬مالم تكن هذة المتغيرات محميه‬ ‫•‬
‫بكلمة ‪ private‬اي ان هذة المتغيرات غير قابله لتوريث‪،‬او يكون ‪ final‬في هذة الحاله ليمكن تغيير قيمة المتغير‪.‬‬
‫الـ ‪ Class‬الب ‪ superClass‬يمكن ان يكون حجم الكود فيه اصغر من البن او اكبر من كود البن لكنه ليمكن ان يكون اكبر من البن‬ ‫•‬
‫من حيث حجم الكود‪.‬‬
‫من فؤاد الـ ‪ inheritance‬مايلي‪:‬‬ ‫•‬
‫تجنب كتابة الكود المكتوب سابقاً‬ ‫•‬
‫الوقت اللزم لتصحسح الكلسات راح يكون اسرع واسهل‬ ‫•‬
‫هذة كانت بعض فؤاد التوريث لكنه طبعاً يحتوي على كثير من الفؤاد‪.‬‬
‫الن سوف نقوم بعرض مثال على التوريث ‪: inheritance‬‬

‫في الصفحة التاليه‬


‫المثال‪:‬‬
‫{‪class A‬‬
‫;‪int x,y‬‬
‫)(‪public void num‬‬
‫{‬
‫;))‪System.out.println("x+y="+(x+y‬‬
‫}‬
‫{‪} class B extends A‬‬
‫}‬

‫{‪class run‬‬
‫)‪public static void main(String[] args‬‬
‫{‬
‫;)(‪A aa=new A‬‬
‫;)(‪B bb=new B‬‬
‫;‪bb.x=10‬‬
‫;‪bb.y=20‬‬
‫;)(‪bb.num‬‬
‫}}‬
‫كما نلحظ من المثال السابق فان الكلس‪ B‬ورث من الكلسِ‪ A‬كل خصائصه اي ان كل المتغيرات والدوال التي بداخل الكلس الب امتلكها‬ ‫•‬
‫البن والدليل على ذالك اننا اعطينا المتغيرات قيم باستخدام الوبجكت الخاص بالكلس بي وهذا يعني بان المتغيرات هي بداخل الكلس بي كذالك قمنا‬
‫باستدعاء داله ‪.....‬الخ سوف اقوم بشرع عمل البرنامج خطوه خطوه في الصفحة التاليه‪:‬‬
‫عند تنفيذ البرنامج(عمل كومبيلر للبرنامج)سوف يتم تنفيذ البرنامج كما يلي‪:‬‬

‫سوف يتم تنفيذ الداله الرئيسيه اولً التي تحتوي ‪( static‬تنفيذ الـ ‪ body‬تبع‬
‫{‪class A‬‬
‫;‪int x,y‬‬ ‫الداله على سطر سطر على التوالي) كما يلي‬
‫)(‪public void num‬‬
‫{‬
‫;))‪System.out.println("x+y="+(x+y‬‬
‫}‬
‫{‪} class B extends A‬‬ ‫انشاء ‪ object‬ممثل للكلس ‪A‬‬
‫}‬ ‫قمنا هنا باعطاء قيم للمتغيرين ‪ x‬و ‪ y‬التي توجد داخل الكلس ‪. B‬‬
‫انشاء ‪ object‬ممثل للكلس ‪B‬‬
‫{‪class run‬‬ ‫هنا قد يقول بعضكم كيف نقوم باعطاء قيم لهذة المتغيرات داخل الكلس ‪ B‬اذا‬
‫)‪public static void main(String[] args‬‬ ‫ل غير مكتوبه فيه؟ في هذة الحاله انت لم تفهم التوريث كما يجب لذالك‬
‫كانت اص ً‬
‫{‬ ‫سوف اقوم بالتوضيح اكثر في هذا المثال‪.‬‬
‫;)(‪A aa=new A‬‬
‫;)(‪B bb=new B‬‬ ‫اخي لقد قمنا با عطاء جميع محتويات الكلس ‪ A‬الى الكلس ‪ B‬عن طريق‬
‫;‪bb.x=10‬‬ ‫الوراثه‬
‫;‪bb.y=20‬‬
‫;)(‪bb.num‬‬
‫}}‬
‫تخيل بان محتوى الكلس ‪ B‬اصبح كما يلي‪:‬‬
‫‪class } B‬‬
‫‪int; x,y‬‬
‫‪()public void num‬‬
‫}‬
‫تنفيذ محتوى الداله ‪)(num‬‬ ‫‪System.out.println("x+y=";(+x+y‬‬
‫{‬

‫=‪x+y‬‬ ‫الناتج راح يكون كمايلي‪30:‬‬


:‫امثله‬

‫المثال الول‬
class mohammed{
int x=10;
int y=20;
void show()
{
System.out.println("x="+x+"\n"+"y="+y);
}
}

class dawod extends mohammed{


public dawod(){
++x;
--y;
}

public static void main(String[] args) { Output

dawod d=new dawod(); x=11


d.show(); y=19
}
}
‫‪Polymorphism‬‬
‫الن سوف اقوم بشرح ثلثه مواضيع هامه جداً وهي‬
‫‪Overloading‬‬ ‫‪.1‬‬
‫‪Overriding‬‬ ‫‪.2‬‬
‫‪Abstract‬‬ ‫‪.3‬‬
‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫اولً‪Overloading: .‬‬
‫هو عبارة عن دالتين او اكثر تحمل نفس السم ال انها تختلف في عدد البارمتريات(المتغيرات)او في نوعها‪.‬‬
‫مثال نظري‪:‬‬
‫لوكان لدينا ثلث دوال في نفس الكلس بنفس السم مثلً باسم ‪ sum‬وكانت الداله الولى تحمل بارمتر (متغير) من نوع صحيح مثلً ‪)sum)int x‬‬
‫والداله الثانيه تحمل بارمتر من نوع كاركتر مثلً ‪ )sum)char x‬والداله الثالثه تحمل بارمترين اثنين(متغيران) من اي نوع مثلً‬
‫‪ )sum)int i, duoble x‬في حالة هذة الدوال الثلث اذا قمنا بالتالي‪:‬‬
‫‪-‬ارسال قيمه من نوع صحيح ‪,‬طبعاً قميه واحدة فقط فاي من الدوال الثلث راح تستقبل البيانات و تتنفذ ؟ الجابه هي الدالة التي تحمل المتغير‬
‫الصحيح فقط هي التي سوف تتنفذ وهي الداله ‪. )sum)int x‬‬
‫‪-‬وفي حالة اذا قمنا بارسال قيمه واحدة من نوع كاركتر فقط فاي من الدوال في رايكم راح تستقبل البيانات و تتنفذ؟ طبعاً الداله التي تحمل هذا‬
‫النوع وايضاَ التي تحمل متغير واحد فقط من نوع كاركتر هي التي سوف تتنفذ وهي ‪)sum)char x‬‬
‫‪-‬وفي حالة اذا قمنا بارسال قيمة من نوع صحيح وقميه من نوع دبل فاي من الدوال في رايكم راح تستقبل و تتنفذ؟ طبعاً الداله التي سوف تستقبل‬
‫البيانات وتتنفذ هي ‪ )sum)int x,duoble x‬مع ملحظه اهمية الترتيب في ارسال القيم‬
‫ان لم تفهمو من خلل الكلم فطبعاً لن اترككم هكذا راح اقوم باعطااكم مثال وراح تفهمون من خلله اكيد‪:‬‬

‫المثال العملي في الصفحه التاليه‬


Overloading ‫مثال على الـ‬

class{ overload
{)void sum)int x
;)System.out.println)"x:"+x
}
)void sum)char x
{
;)System.out.println)"x:"+x
}
)void sum)int i,double x
{
;)System.out.println)"i:"+i+"&"+"x:"+x ‫طبع‬
} ‫حي‬ ‫نوع‬
‫مننوع‬
‫قيمهمن‬
‫بارسالقيمه‬
‫قمنابارسال‬
‫هناقمنا‬
‫هنا‬
‫را‬
{ )public static void main)String ][args ‫كاركتر‬
‫انتجر‬
;)(overload oo=new overload ‫طبع‬ ‫هنا قمنا بارسال قيمة انتجر وقيمة دبل‬
‫حي‬
;)oo.sum)10 ‫را‬
;)oo.sum)''m ‫طبع‬
;)oo.sum)10,10.5 ‫حي‬
‫را‬
}}

x:10
x:m
i:10&x:10.5
‫ثانياً‪:Overriding .‬‬
‫‪-‬هي عبارة عن دالتين او اكثر تحمل نفس السم ونفس البارمتريات (المتغيرات)‬
‫‪-‬عملية تخطي دالة لدالة اخرى‪.‬‬
‫ان لم تفهمو معنى الـ ‪ Overriding‬من خلل التعريف سوف تفهمونها من خلل الشرح التالي‪:‬‬
‫مثال نظري‪:‬‬
‫افرض مثلً ان لديك كلسين الكلس الول اسمه ‪ A‬والكلس الثاني اسمه ‪ B‬فاذا كان في الكلس الول داله اسمها ‪ )sum)int x,int y‬والكلس‬
‫الثاني الذي اسمه ‪ B‬فيه داله بنفس السم وتحمل نفس المتغيرات اي ‪. )sum)int x,int y‬وكان الكلس ‪ B‬يرث من الكلس ‪ A‬اي ان‬
‫الكلس ‪ B‬حتوي على محتويات الكلس ‪ A‬اي ‪. class B extends A‬هذا كان هيكل البرنامج ‪.‬‬
‫نعرف من السابق بان الكلس ‪ B‬يحتوي على دالتين بنفس السم الداله الولى التي ورثها من الكلس ‪ A‬والداله الثانيه هي التي تمت كتابتها فيه اي‬
‫الصليه تبعه‪.‬‬
‫فماذا يحدث اذا تم استدعا وارسال قيم الى الداله ‪ )sum)int x,int y‬التي توجد داخل الكلس ‪ B‬فكيف سوق يقوم البرنامج بتنفيذ الداله اذا كان اصلً‬
‫يوجد في الكلس دالتين بنفس السم ونفس عدد البارميتر (المتغيرات) هنا سوف يتم تخطي للداله التي ورثها الكلس ‪ B‬من الكلس ‪ A‬ويتم‬
‫تنفيذ الداله المكتوبه في الكلس ‪ , B‬هذة العمليه تسمى بالـ ‪. overriding‬‬
‫بعد عملية الـ ‪ overriding‬جرب احذف الداله التي توجد في الكلس ‪ B‬ونفذ البرنامج مالذي سوف تلحظه؟ راح اقول الك شو الي راح يحصل الي‬
‫راح يحصل هو ان التنفيذ سوف يحصل للداله التي تمت وراثتها من الكلس ‪ A‬وهذة العمليه لتسمى ‪ overriding‬وانما عمليه عاديه ‪.‬الن‬
‫انا متاكد بانك فهمت ايش اقصد بـالـ ‪. overriding‬‬
‫الن سوف اقوم باعطاكم مثال عملي لكي تقومو بتطبيقه وفهم عملية الـ ‪ overriding‬اكثر‪:‬‬

‫المثال في الصفحه التاليه‬


:‫المثال العملي‬

class{ A
{)void sum)int x,int y
;))System.out.println)"in class A :x+y="+)x+y : ‫المخرجات للبرنامج سوف تكون‬
}
} in class B :x+y=30
class Bextends{ A
{)void sum)int x,int y
;))System.out.println)"in class B :x+y="+)x+y
}
{ )public static void main)String ][args
;)(B oo=new B
;)oo.sum)10,20
}
}
:‫قم بالتجربه التاليه‬
‫ ونفذ البرنامج مالذي سوف تلحظه من‬B ‫احذف الداله التي توجد داخل الكلس‬
)overriding ‫مخرجات(طبع ًا العمليه هذة ليست‬

:‫ السؤال هو‬overriding ‫الن سوف اعطيكم سؤال لكي تحلونه سؤال عن الـ‬
Write java program that use overriding method in two classes one of them is A and the other is B
inhrites A ? )use two methods(
‫ــ الفصل الثاني ــ‬

‫‪Design interface‬‬
‫‪))GUI‬‬

‫في هذا الفصل سوف اقوم بالتالي‪:‬‬


‫• سوف اقوم باعطاء مقدمه قصيرة عن تصميم الواجهات في الجافا‪.‬‬
‫•تصميم بعض الواجهات‬
‫•شرح ماقمنا بتصميمه من الواجهات خطوة خطوة‪.‬‬
‫التعرف على بعض العناصر التي سوف نقوم بتصميمها‬

title bar
menu bar

menu

menuItem

button

TextField

Label
‫في هذا الفصل سوف نقوم بتصميم بعض الواجهات في الجافا‬
‫ل لو اردنا ‪ button‬فسوف نقوم بكتابة السطر التالي‪:‬‬ ‫طبعاً كل ماسوف نحتاجه موجود داخل ‪ swing‬و‪ awt‬فمث ً‬
‫;‪Imoprt javax.swing.JButton‬‬
‫ولو اردنا ‪ label‬او ‪ textfiled‬از ‪.... menubar‬الخ ما علينا ال ان نقوم بنفس الخطوة‪.‬‬
‫قد يقول البعض منكم لو اردنا ان نقوم بتصميم واجهه تحتوي على كثير من العناصر هل من المعقول ان اقوم بكتابة السطر السابق لكل‬
‫كائن اريدة هذة لتعتبر برمجه محترفين انما برمجه مبتدئن ‪ ،‬انا اقول الك ل طبعًا لن تقوم بكتابة السطر السابق اكثر من مرة ما‬
‫عليك ال ان تكتب التالي‪:‬‬
‫;*‪Import javax.swing.‬‬
‫سوف نقوم باعطاء مثال بسيط جدًا وهو نافذة تحتوي على ‪ Button‬و‪ label‬و‪ textfiled‬سوف نقوم بتصميم الشكل التالي‪:‬‬
‫الخطوة الولى تحديد مالذي سوف نحتاجه لتصميم الشكل هذا‪:‬‬
‫نحتاج الى‪:‬‬
‫•‪Jpanal‬‬
‫•‪JLabel‬‬
‫•‪JTextFiled‬‬
‫•‪JButton‬‬
:‫الخطوة الثانيه كتابة البرنامج‬
import ;*. javax.swing
class mohammedextends{ JPanel
;JLabel j1,j2
;JTextField t1,t2
;JButton b1
public{)( mohammed
setLayout)nul;)l
;)j1=new JLabel)""Name
;)j1.setBounds)10,20,40,25
;)add)j1
t1=new;)( JTextField
;)t1.setBounds)60,20,200,25
;)add)t1
;)j2=new JLabel)""ID
;)j2.setBounds)20,50,40,25
;)add)j2
t2=new;)( JTextField
;)t2.setBounds)60,50,25,25
;)add)t2
;)b1=new JButton)""ok
;)b1.setBounds)110,100,80,30
;)add)b1
}
public static void) main)String][ avgs
{
mohammed m=new;)( mohammed
;)JFrame f=new JFrame)""fffffff
;)f.setVisible)true
;)f.setSize)300,250
;)f.setContentPane)m
;)f.setDefaultCloseOperation)f.EXIT_ON_CLOSE

}
} ‫الن سوف اقوم بشرح الكود السابق على خطوة خطوة‬
import ;*. javax.swing ‫المكتبه التي توجد بداخلها كلً من‬
class mohammedextends{ JPanel
;JLabel j1,j2
JPanel ‫وراثه الكلس للـ‬
;JTextField t1,t2
‫الذي سوف يتم وضع جميع‬
;JButton b1
‫العناصر فيه‬
public mohammed)(} ‫دالة البناء‬
)0,0(
setLayout)null(; ‫ايقاف الترتيب التلقائي للعناصر‬
j1=new JLabel)"Name"(;
j1.setBounds)10,20,40,25(; name ‫ وكتابه فيه‬label ‫خلق‬ )10,20(
add)j1(;
t1=new JTextField)(; panel ‫ وموقعه على الـ‬label‫تحديد حجم الـ‬ ID

t1.setBounds)60,20,200,25(;
add)t1(;
j2=new JLabel)"ID"(; ok
panel ‫ الذي انشئناة الى الـ‬label‫يقوم باضافة الـ‬
j2.setBounds)20,50,40,25(;
add)j2(;
t2=new JTextField)(;
t2.setBounds)60,50,25,25(;
add)t2(; Name 25

b1=new JButton)"ok"(; 40

b1.setBounds)110,100,80,30(;
add)b1(;
{
j1.setBounds)10,20,40,25(;
‫لحد الن من الكود السابق حصلنا على الشكل التالي‪:‬‬
‫الن سوف اقوم بتكلمة شرح باقي الكود‪:‬‬
‫هنا لم يتبقاء لنا ال الداله الرئيسيه التاليه‪:‬‬ ‫‪name‬‬

‫‪ID‬‬
‫انشاء اوبجكت ممثل للكلس ‪ mohammed‬الكلس الذي قمنا بانشاء‬
‫جميع العناصر فيه‬

‫‪ok‬‬

‫‪public static void) main)String][ avgs‬‬


‫{‬
‫‪mohammed m=new;)( mohammed‬‬
‫‪;)JFrame f=new JFrame)""fffffff‬‬
‫‪;)f.setVisible)true‬‬
‫‪;)f.setSize)300,250‬‬ ‫دالة اضهار الفريم‬
‫‪;)f.setContentPane)m‬‬
‫‪;)f.setDefaultCloseOperation)f.EXIT_ON_CLOSE‬‬

‫}‬
‫}‬

‫عند اغلق البرنامج يتم اغلقه نهئياً‬ ‫تحيد حجم الفريم‬


‫‪;)f.setSize)width,height‬‬
‫الن سوف نقوم بتصميم قوائم كما في الشكل التالي‪:‬‬

‫اولً نقوم بتحديد مالذي سوف نحتاجه من العناصر‪:‬‬


‫نحتاج الى‪:‬‬
‫‪JMenuBar‬‬
‫‪JMenu‬‬
‫‪JMenuItem‬‬

‫قد يتسائل البعض منكم لماذا القائمه ‪copy to‬التي توجد داخل ‪ edit‬من نوع ‪ jmenu‬بينما القوائم التي‬
‫توجد داخل ‪ file‬من نوع ‪JMenuItem‬‬
‫الجابه على تسائلكم هو انه اي قائمة تحتوي على قوائم فرعيه تعتبر ‪ JMenu‬وليست ‪JMenuItem‬‬
;*.import javax.swing
class TestMenuextends{ JPanel
:‫ثانياً نقوم بكتابة البرنامج‬
;JMenuBar mbr
;JMenu file,edit,Copy
;JMenuItem New,Open,Exit,c,d,e
{)(public TestMenu
;)setLayout)null
;)(mbr=new JMenuBar
;)"file=new JMenu)"file
;)"edit=new JMenu)"Edit
;)"Copy=new JMenu)"Copy TO
;)"New=new JMenuItem)"new
;)"Open=new JMenuItem)"Open
;)"Exit=new JMenuItem)"Exit
;)"/:c=new JMenuItem)"C
;)"/:d=new JMenuItem)"D
;)"/:e=new JMenuItem)"E
;)file.add)New
;)file.add)Open
;)file.add)Exit
;)Copy.add)c
;)Copy.add)d
;)Copy.add)e
;)edit.add)Copy
;)mbr.add)file
;)mbr.add)edit
;)add)mbr
;)mbr.setBounds)0,0,200,30
}
)][public static void main)String args
{
;)"JFrame fr=new JFrame)"mohammed
;)(TestMenu td=new TestMenu
;)fr.setContentPane)td
;)fr.setVisible)true ‫طبعاً البرنامج سهل الى ابعد الحدود ولذالك لن يحتاج الى شرح‬
;)fr.setSize)200,200
;)fr.setDefaultCloseOperation)3
}
}
‫الن ندخل على التبويب‪:‬‬
‫ونريد تصميم فريم يحتوي على تبويبان كل تبويب يحتوي على اي شي كما في الشكل التالي‪:‬‬

‫ملحظه هامه‪:‬كل تبويب يحتاج الى ‪ Panel‬خاص به‪ ،‬سوف تفهم هذة الملحظه اكثر من خلل الشرح‬
‫القادم‬

‫اولً نقوم بتحديد الحتياجات التي سوف نحتاجها لبنا التصميم السابق‪:‬‬
‫نحتاج الى‪:‬‬
‫‪JTabbedPane‬‬
‫‪2JPanel‬‬
‫‪2JLabel‬‬
:‫ثانياً نقوم بكتابة البرنامج‬
import java.awt.;Container
;*.import javax.swing
class Tabextends{ JFrame
;JLabel Lname,Lme
;JPanel jp1,jp2
;JTabbedPane tab
{)(Tab
;)"super)"Tap
;)(Container co=getContentPane
;)"Lname=new JLabel)"mohammed
;)"Lme=new JLabel)"yemen
;)(jp1=new JPanel
;)(jp2=new JPanel
;)(tab=new JTabbedPane
;)jp1.add)Lname
;)jp2.add)Lme
;)tab.add)"Tab1",jp1
;)tab.add)"Tab2",jp2
;)co.add)tab
;)setSize)300,150
;)setVisible)true
}
{ )public static void main)String ][args
;)(Tab t=new Tab
;)t.setDefaultCloseOperation)JFrame.EXIT_ON_CLOSE
}
}
:‫شرح الكود السابق خطوة خطوة‬

;*.import javax.swing
class Tabextends{ JFrame
;JLabel Lname,Lme
;JPanel jp1,jp2 )‫تعريف المكونات(الحتياجات السابق ذكرها‬

;JTabbedPane tab

{)(Tab
;)"super)"Tap
;)(Container co=getContentPane ‫اعتبرها مثل الحاويه تقوم باحظار جميع المكونات التي سوف‬
JFrame ‫نكونها الى داخل الـ‬
;)"Lname=new JLabel)"mohammed
;)"Lme=new JLabel)"yemen
;)(jp1=new JPanel
;)(jp2=new JPanel
;)(tab=new JTabbedPane
;)jp1.add)Lname
;)jp2.add)Lme
;)tab.add)"Tab1",jp1
;)tab.add)"Tab2",jp2
;)co.add)tab
;)setSize)300,150
;)setVisible)true
}
‫}( ‪public static void main)String ][args‬‬
‫;()‪Tab t=new Tab‬‬
‫);‬ ‫‪t.setDefaultCloseOperation)JFrame.EXIT_ON_CLOSE‬‬
‫}‬
‫}‬

‫لم اقم بشرح بعض النقاط لني قمت شرحها من قبل ومش من المعقول ان اشرحها في كل‬
‫كود‬

‫هنا ننتهي من الـ ‪ )Design interface )GUI‬ارجو بانكم فهمتوها طبعاً لم اقم بتطرق الى جميع عناصر ال ‪ GUI‬مثل الـ‬
‫‪ JCheckBox‬و ‪... JComboBox‬الخ وذالك لتشابه كتابتها مع البرامج التي قمت بكتابتها لكم واعتقد بانكم قادرون بعد هذا‬
‫الشرح على تصميم اي واجهه تريدونها ‪...‬في نهاية هذا الفصل ارجو لكم البداع في هذا الموضوع‪.‬‬
‫نهاية الجزء الول من كتاب الـ‪OOP‬‬
‫في الجزء الثاني من كتاب الـ‪OOP‬سوف اقوم بشرح‪:‬‬
‫• ‪EVENT HANDLING‬‬
‫• ‪STREEM‬‬
‫• اتصال جافا بقواعد البيانات‬

‫قام بالشرح ‪:‬‬


‫الطالب‪:‬محمد راشد صالح داود‬
‫جامعة صنعاء –كلية الحاسوب وتكنولوجيا المعلومات‬
‫اقدم شكري الخاص الى الدكتور فؤاد الهجامي ‪.......‬الشرح مستنبط من شرح الدكتور فؤاد الهجامي‬
‫ان كان لديكم اي اسئله الرجاء التواصل عبر اليميل التالي‪:‬‬
‫‪MOHAMMED2008_DAWOD@HOTMIAL.COM‬‬

You might also like