ادارة ال Commands في النوافذ:
في موضوع اليوم سوف نتعرف على كيفية الاستجابة للأحداث باستخدام ال commands. تتم اضافة ال commands الى اي Displayable Class عن طريق الأمر التالي:ويمكن حذفها باستخدام الأمر المضاد وهو:
public void addCommand(Command cmd)
تعريف ال Commands:
public void removeCommand(Command cmd)
Command c = new Command("OK", Command.OK, 0);
Command c = new Command(
"Run", // short label
"Run simulation", // long label
Command.SCREEN, // command type
0); // priority
يعتمد مكان ظهور ال Command في النافذة على ال نوع ال Command وعلى أولويتة وطبعا هي تختلف من من هاتف الى أخر. فعلى سبيل المثال في أجهزه ال Nokia جميع الأوامر السلبيه مثل Back, Exit, Cancel توضع على يمين الشاشة اما الأوامر الايجابيه Ok, Options تكون على يسار الشاشة والعكس تماما يحدث عند تشغيل البرنامج على هاتف Sony Ericsson. اذا كل ما علي فعله هو تحديد نوع ال Command وأهميته وسف يتولى الهاتف مهمه وضعه في المكان المناسب الذي اعتاده مستخدم الهاتف دون كتابه الكود بشكل مختلف لكل هاتف.
أنواع ال Commands:
Ok | لتأكيد الااختيار |
Cancel | الغاء عمليه معينه |
Back | الرجوع الى الشاشه السابقة |
Stop | ايقاف العمليه الحاليه |
Help | اظهار شاشة المساعدة |
Screen | أمر عام يستخدم لباقي الأومر |
الاستجابة للأوامر:
أولا يحب اضاف المتنصت على النافذة المراد معالجة الأوامر عليها باستخدام الأمر التالي:
بعدها يجب كتابة ال commandAction() method التابعة للمتنصت.
public void setListener(CommandListener l)
مثال:
في السطور من 4-14 قمنا بتعريف نافذة واحدة وهي مربع نصي، ثم عرفنا Command واحد نوعة EXIT ثم اضفناة ال ى هذه النافذة. بعدها جعلنا ال Commander Class هو المتنصت على الأحداث. ثم عرضنا النفذة على شاشة الهاتف.
public class Commander extends MIDlet
implements CommandListener {
public void startApp() {
Displayable d = new TextBox(
"TextBox",
"Commander",
20,
TextField.ANY);
Command c =
new Command("Exit", Command.EXIT, 0);
d.addCommand(c);
d.setCommandListener( this );
Display.getDisplay(this).setCurrent(d);
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
public void commandAction(Command c, Displayable d) {
destroyApp( true );
notifyDestroyed();
}
}
في السطور 24-25 استجبنا للأمر Exit الذي سوف يقوم باستدعاء commandAction عندما يقوم المستخدم بالضغط عليه وبالتالي الخروج من البرنامج عن طريق notifyDestroyed.
الان ماذا لو كان هناك أكثر من أمر فكيف لي أن أحدد الأمر الذي تم طلبه من المستخدم. ماذا لو تمت اضافه نفس الامر لأكثر من نافذة يشتركون في نفس المتنصت فكيف لي أن أعرف النافذة التي وقع فيها الحدث. يمكن حل الاشكالين السابقين باستخدام المتغيرات المرسلة لل commandAction() حيث أن الأول يمثل الأمر الذي طلبه المستخدم تحديدا والثاني يمثل النافذة التي وقع عليه الحدث فلة كان عندي نافذه بها مجموعه من الأوامر يمكنني حل المشكله كالتالي:
public void commandAction(Command c, Displayable d) {
if( c == cmdExit ) {
destroyApp(true);
notifyDestroyed();
} else if( c == cmd1 ) {
// do action1
} else if( c == cmd2 ) {
// do action2
} else if( c == cmd3 ) {
// do action3
}
}
ليست هناك تعليقات:
إرسال تعليق