الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

4 - إظافة الازرار (commands) الى البرنامج في J2ME

مغلق
بدأه مصعب غيلان في 3 يوليو 2004 · 16 رد · 5,752 مشاهدة · في JavaME
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بعد ان تعرفنا على

كيفية بناء التطبيق الاول

وكيفية تحويل هذا الكودالى تطبيق يعمل على الجوال

سنقوم الان بشرح لكيفية اضافة الازار والتعامل معها

بعد هذا الشرح يفترض بك ان تكون قادر على بناء تطبيق صغير من تلقاء نفسك

يجب عليك اولا انشاء زر جديد

ثم إضافة هذا الزر الى الواجهة التي تريد عرضها

بعد ذلك ستضع الكود الذي تود تنفيذة عند الضغط على هذا الزر

1 - تعريف الازرار في البرنامج

اولا سنقوم بتعريف كائن جديد من نوع Command

Command command;

2 - ثم نقوم بانشاء هذا الكائن باستخدام الامر new ونقوم باعطاء الزر بعض الخصائص مثل الاسم الذي سيظهر للمستخدم وكذلك نوع هذا الزر واولوية الظهور

command = new Command(String label, int commandType, int priority)

ويمكن اختصار الطريقتين السابقتين على الشكل

Command command = new Command(String label, int commandType, int priority)

انشأنا كائن من نوع زر ثم اعطيناه بعض الخصائص

3 - ربط هذا الزر مع واجهة محددة

بعد ذلك نقوم بإضافة هذا الزر الى الواجهة UI الذي نريد عرض الزر معها باستخدام الطريقة

UI.addCommand(command);

مثلا لو كانت الواجهة TextBox box سنكتب الامر على الشكل

box.addCommand(command);

4 - اضافة الكود الذي سينفذ عند الضغط على الزر

من اجل اضافة كود لزر امر معين يجب علينا استخدام implements Interface

اي اننا سنضمن الواجهة CommandListener في الكلاس الذي سنستخدم فيه الازرار بهذا الشكل

public class HelloMidlet extends MIDlet implements CommandListener  {

يوجد في الواجهة CommandListener الطريقة المجردة

(commandAction(Command c, Displayable s

لهذا يجب تضمين هذة الطريقة في تطبيقنا لاننا استخدمنا implements CommandListener

تعيد لنا هذة الواجهة كائنان

الاول Command c وهو الزر الذي قمنا بضغطه

الثاني Displayable s وهي الواجهة UI الذي تحوي هذا الزر

تعمل هذة الواجهة على تشغيل المتنصت Listener لكي يتصنت على كبسة الزر

يجب اولا توجيه هذا المتنصت الى UI محددة من خلال الامر setCommandListener

اي اننا سنخبر المتنصت ان ينفذ الكود عند حدوث كبسة زر ما من تلك الواجهة UI

والان سنضع هذا المثال المطور عن مثالنا السابق ونعود بعد ذلك لمناقشة الاشياء الجديدة فيه

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;


public class HelloMidlet extends MIDlet implements CommandListener 
{

private Display display;
Command command = new Command("Exit", Command.EXIT, 0);

TextBox box;

public void HelloMidlet(){}

public void startApp(){


display =Display.getDisplay(this);

box =new TextBox("Simple Example ","Hello ",20,0);
box.addCommand(command);
box.setCommandListener(this);
display.setCurrent(box);
}

public void pauseApp(){ }

public void destroyApp(boolean unconditional){}

/************* implements CommandListener ****************/

public void commandAction(Command c, Displayable s)
  {
     if ( c == command && s == box )
       {
         destroyApp(false);
         notifyDestroyed();
       }
  }

}
#2
public class HelloMidlet extends MIDlet implements CommandListener

implements : يعني ان هذ ا الكلاس سيستخدم واجهة او اكثر من واجهة تفصل بينهما فاصلة صغيرة

Interface1,Interface2

CommandListener : عبارة عن واجهة تستخدم لاضافة رد فعل معين تجاه كبسة زر معين

Command command = new Command("Exit", Command.EXIT, 0);

قمنا بانشاء الكائن command والذي سيظهر للمستخدم بالاسم Exit

box =new TextBox("Simple Example ","Hello ",20,0);

انشاء كائن من نوع صندوق نص TextBox عنوان هذا الصندوق Simple Example

وعدد الحروف التي يسمح بها 20 حزف

اما القيمة 0 فتمثل TextField.ANY وهذا يعني ان صندوق النص سيتقبل اي حرف او رقم

box.addCommand(command);

قمنا باضافة الزر الذي انشأناه سابقا الى box

باستخدام الطريقة addCommand الموجودة في جميع الواجهات UI

box.setCommandListener(this);

اخبرنا المتنصت بان يقوم بالتنصت على الواجهة box

باستخدام الامر setCommandListener الموجود في جميع الواجهات UI

اما الكلمة this فتعني الكلاس الحالي الذي نحن فيه

وهذا يعني اننا سوف نقوم بمعالجة كبسة الزر في هذا الكلاس

public void commandAction(Command c, Displayable s)

هذة هي الطريقة التي تعمل مع الواجهة CommandListener

وتعيد بارامتران الاول هو الزر الذي تم كبسه والثاني الواجهة UI التي تحوي هذا الزر

if ( c == command && s == box )

التحقق من ان الزر الذي تم كبسه والتأكد من الواجهة التي تحوي هذا الزر

         destroyApp(false);
         notifyDestroyed();

هذان الامران يقومان باغلاق التطبيق

الاول يقوم بتشغيل عملية الاغلاق باستدعاء الدالة destroyApp

والثاني يقوم بالتحسس لعملية الاغلاق

#3

موضوع رائع جدا

ahabdeen.jpg

<marquee>

مش موجود بصفة دايمة للامتحانات

</marquee>

#4

رائع جدا... كم اتمنى ان اتحدث معك على المسنجر لكي انسق بيني و بينك حول الدروس انا كنت كاتب كم درس متفرق و ما اعرف و ين صارو الآن

نوحد جهودنا و نوزع المهام احسن ما كل واحد يعمل لحاله.... صح

مبروك اخ احمد مشاركاتك و صلت 500 و انا و صلت 1000 هه هه هه

Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why. Programmers combine theory and practice: Nothing works and they don't know why

#5

مشكور اخ مصعب وان شاء يوم الاثنين ببدا اساعدكم بالدروس مشغول شوي

لست متواجد بشكل يومي

#6
اقتباس
مبروك اخ احمد مشاركاتك و صلت 500 و انا و صلت 1000 هه هه هه

كنت اتوقع ان اسمه اهاب الدين وليس احمد لكن تشرفنا بمعرفة اسمك

اقتباس
نوحد جهودنا و نوزع المهام احسن ما كل واحد يعمل لحاله.... صح

صح تماما

ولهذا السبب سنتوقف قليلا لنقوم باعداد درس كبير ومهم وهو

Using High APIs

التعامل مع جميع الواجهات ذات النمط الحرفي مثل

الفورم form والقائمة List ونافذة الرسائل ALert وغيرها

والدرس الذي بعده سيكون Low Level APIs

والاخر RecordStore

اختر اي درس اخي رامي وساختار درسا اخر

#7

والان للاخوة الذين قد اكملوا تحميل اللغة هذا السؤال ولن اسامح احد!!

اريد برنامج يقوم بعمل الاتي

1 - انشاء صندوق نص textbox موجود فيه الجملة Arab Team

2 - اضافة 3 ازرار لصندوق النص three commands

يقوم الزر الاول بمسح محتويات صندوق النص

اما الزر الثاني يقوم بكتابة اي جملة ولتكن اسمك مثلا

اما الزر الثالث بالطبع سيكون زر الخروج

واذ امكن كتابة Label للزر وهو اسم الزر الذي سيظهر للمستخدم باللغة العربية

مثلا بلا عن كلمة Exit اكتب خرووج

اتلقى اجاباتكم على البريد الشخصي ولا تضعوها في هذا الموضوع حتى لايحدث غش

تذكروا اني لن اسامح احد من الذين قد حملو اللغة وهي الان تعمل لديهم

#8

ahabdeen=ahmed abdeen

و صحيح المشاركات وصلت 500

انا مش واخد باللى خالص :D

بالنسبة للسؤال ان شاء الله احاول اعمله و ابعتهولك

ahabdeen.jpg

<marquee>

مش موجود بصفة دايمة للامتحانات

</marquee>

#9

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

الأخ المحترم مصعب غيلان خبير J2ME

أنا عضو جديد في هذا المنتدى عثرت على هذا الطرح منك مؤخراً وكنت أبحث عن شرح ولو مبسط حول برمجة الجوالات والآن وجدتها والحمدلله

أشكرك على تفضلك ولا أزال بالخطوات الأولى من قراءة شرحك

آمل أن تكون لا تزال في صدد الموضوع

عندي Java-Studio1.0

هل تكفي للبرمجة للموبايل أم أبحث عن J2ME و J2SE

أكرر شكري وتمنياتي لكم بالتوفيق

#10

اهلا وسهلا فيك اخي sih

اقتباس
عندي Java-Studio1.0

لم اسمع بها من قبل فانا لم استخدم الجافا من قبل

ولكني تعلمت ال J2ME مباشرة

على العموم يمكنك الاعتماد على JBuilder مع إظافة JBuilder Mobileset

اوبتحميل J2ME و J2SE

#11
اقتباس
واذ امكن كتابة Label للزر وهو اسم الزر الذي سيظهر للمستخدم باللغة العربية

مثلا بلا عن كلمة Exit اكتب خرووج

بالنسبة للزر الأول تظهر الكتابة بالعربية بالشكل المطلوب

لكن لأن الزرين الأخرين لا يظهران الا عن طريق الـMenu تظهر الكتابة بأحرف مفككة؟

#12
اقتباس
لكن لأن الزرين الأخرين لا يظهران الا عن طريق الـMenu تظهر الكتابة بأحرف مفككة؟

نعم محاكي الموبايل الذي يأتي مع JBuilder او مع ToolKit يعمل بهذا الشكل

يقوم بعكس الكلام وفكفكة الحروف

وان شاء الله بعد التقدم قليلا في اللغة سأريكم كيف تقوموا بتنزيل محاكي النوكيا

وسترون برامجكم على جهاز نوكيا مثل 7210 وهي تعمل بشكل صحيح

#13
Command command = new Command("مسح",xxxxxxxxxx, 0);

اخوي مصعب أنا ما أعرف شلون أكتب الأمر الخاص بالمسح

يعني عطنا مثال آخر عن كيفية فعل أمر ما بعد الضغظ على زر الأمر

وشكرا .......

#14

اخي العزيز alanabi20

بالنسبة xxxxxxxx اعتقد انك تقصد Command.TYPE

حيث ان TYPE سيكون اما EXIT , SCREEN , BACK

وهناك العديد من الانواع ستجدها في Help الذي يأتي ملحقا مع اللغة في الدليل Docs

اما بالنسبة لمسح صندوق النص فقم باستخدام الدالة setString

واذا كنت قد عملت على البيسك من قبل فقم بعمل طريقة مشابهة للاتي

Text1.Text=""

اما من اين ستقوم باستدعاء هذة الدالة

طبعا من الدالة CommandAction التي تقوم بمعالجة الاحداث على الازرار

لاحظ اننا عندما قمنا باغلاق التطبيق باستخدام الزر Exit

if ( c == command && s == box )
      {
        destroyApp(false);
        notifyDestroyed();
      }

تأكدنا من ضغط الزر ثم عالجنا الحدث المترتب على ضغط الزر

وبنفس الطريقة سنقوم بمسح الصندوق

سنتأكد من ضغط زر Clear ثم نقوم بوضع معالجة له

اعتقد اني قمت بحل السؤال لكن معليش اهم شيء تفهم

#15

أخوي مصعب

أنا حليت السؤال حق هذا الدرس

ومش حاط الكود كامل

إلا لما يحله كم عضو من الأعضاء

يلا يا أعضاء نبي نشوف حلولكم نبي تفاعل

وشكرا ........

#16

أنا سويت الدرس هادا الدرس ولكن لمن أسوي بلد يطلع خطأ

C:\Documents and Settings\Alla\j2mewtk\2.5.2\apps\Hello\src\HelloMIDlet.java:4: class HelloMidlet is public, should be declared in a file named HelloMidlet.java

public class HelloMidlet extends MIDlet implements CommandListener

^

1 error

com.sun.kvem.ktools.ExecutionException

Build failed

ممكن أعرف ليش وإيش الحل؟؟؟

#17

أختي في الجافا يجب أن يكون اسم ال class الرئيسي نفس اسم الملف مع مراعاه حاله الأحرف ويبدو أنكي لم تنتبهي أن اسم الملف هو HelloMIDlet.java و اسم ال class هو HelloMidlet .

هذا الموضوع مغلق.

مواضيع مشابهة