جلسه پنجم برنامه نویسی موبایل

در J2ME, Java, JAVA ME, MOBILE, موبایل

جلسه پنجم

سلام موبایلی ها

قبل از اینکه این جلسه رو شروع کنم یه توضیح بدم در مورد کد ها ، قبلاً من از کد هام عکس می گرفتم میزاشتم که تنبل نشید و خودتون بشینید کد بنویسید ولی از این لحظه به بعد دیگه بهتون اعتماد می کنم و کد ها رو به صورت متن می زارم ولی دیگه خودتون برنامه نویس باشید و کپی -پیست نکنید ، این کد ها همه هزار در صد فری هستند و از این لحاظ نمی گم کپی -پیست نکنید من به خاطر خودتون می گم :دی ، می خوام دستتون تنبل نشه :دی

ولی قبل از اینکه شروع کنم و یه چیز جدید معرفی کنم یه کد در رابطه با جلسه قبل می زنم (توجه کنید که عکس هم نیست :دی) که کد خیلی مهمی نیست ولی مونده بود تو دلم اینو جلسه قبل بگم ،اول کد رو ببینید بعد من توضیح می دم

  1. public void startApp() {
  2.  
  3. String text="abcdefghijklmnopq";
  4.  
  5. TextBox tb=new TextBox("My Text Box",text,
  6. 40,TextField.ANY);
  7.  
  8. Command cmd=new Command("rev",Command.OK,0);
  9. tb.addCommand(cmd);
  10.  
  11. tb.setCommandListener(new CommandListener() {
  12.  
  13. public void commandAction(Command c,Displayable d) {
  14. TextBox t=(TextBox)d;
  15. reverse(t);
  16. }
  17.  
  18. });
  19.  
  20.  
  21. setCurrent(tb);
  22.  
  23. }
  24.  

 

خب کد شبیه همون کد قبلی هاست، می بینید که اول یه TextBox ایجاد کردم بعد یه Commandبا اسم revبهش اضافه کردم

بعد هم یه CommandListener  بهش اضافه کردم

تو commandAction مهم هست که باید بهش توجه کنید

اول یه اشاره گره به اون TextBox ای که Commandمربوطه اش فشار داده شد به دست میاریم (این کار رو دیگه باید یاد گرفته باشید-یعنی کار با همون پارامتر d)  بعد هم اون رو به تابع ارسال می کنیم

تابع reverse  یه TextBox می گیره و متن اون رو بر عکس می کنه ، کد این تابع به شکل زیره

 

  1. void reverse(TextBox tb){
  2. char txt[]=new char[tb.size()];
  3. tb.getChars(txt);
  4. String s="";
  5. for(int i=0;i<txt.length;i++){
  6. s=txt[i]+s;
  7. }
  8. tb.setString(s);
  9. }

می بینید که توی این کد از متد size استفاده کردم تا تعداد کاراکتر های متن TextBox رو به دست بیارم

بعد یه آرایه از کاراکتر ها ایجاد کردم متناسب با طول متن به کار رفته در TextBox  اون رو به متد getChars ارسال کردم

بعدش هم که دیگه ساده است یه رشته ایجاد کردم با اسم s و کاراکتر های متن رو دونه به دونه به ابتدای رشته s اضافه کردم و این یعنی بر عکس کردن ترتیب کاراکتر ها

در آخر هم از متد setString  برای تغییر متن TextBox استفاده کردم

این خروجی برنامه قبل از فشار دادن rev

و این هم خروجی برنامه بعد از فشار دادن rev

 

حالا آماده شیم که یه چیز جدید معرفی کنم :)

Form

Form هم یکی از زیر کلاس های Screen هست و این قابلیت رو داره که میشه بهش چندین Item اضافه کرد ،Item ها رو هم جلوتر توضیح می دم

توجه کنید که کلاس Screen  این ویژگی ها رو میشه بهش اضافه کرد :

Title

Ticker

Command

CommandListener

پس هر کلاسی که زیر کلاس Screen باشه هم این ویژگی ها رو میشه براش تعیین و تغییر داد ، مثل چند تا زیر کلاسی که قبلاً دیدیم

پس Form  هم می تونه این قابلیت ها رو از ابر کلاسش به ارث ببره

اینکه چی جوری میشه به فرم یه سری آیتم اضافه کرد رو جلوتر می بینیم ولی قبلش با آیتم ها آشنا بشیم

Item

این یک کلاسه abstract  هست که ابر کلاس همه اون کامپوننت هایه که قراره به فرم اضافه بشن ، فعلاً در موردش توضیح زیادی نمی دم شاید در آینده این کار رو کردم ولی فعلاً بریم یه سری از زیر کلاس های این کلاس رو ببینیم

Gauge

Gauge آیتمیه که شبیه بار-گراف هست و می شه ازش به عنوان Slider  یا Progress bar استفاده کرد

این آیتم فقط یه سازنده به صورت زیر داره

 

  1. public Gauge(String label, boolean interactive,
  2. int maxValue, int initialValue)

اولین آرگومان عنوانی هست که برای Gauge به کار میره

دومین آرگومان مشخص می کنه که نوع Gauge چی جوری باشه

کلاً Gauge  می تونه یا به صورت interactive باشه یا به صورت non-interactive باشه که تفاوت این دو حالت رو جلوتر می گم فعلاً فقط بدونید که وقتی آرگومان دوم trueباشه اونوقت Guageبه صورت interactive و اگه این آرگومان false باشه اونوقت Gauge به صورت non-interactive خواهد بود

آرگومان سوم حد اکثر تعداد تیکه های Gauge هست ، همونطور که گفتم این آیتم شبیه بار-گراف هست پس می تونه یه تعداد حد اکثری بار داشته باشه، حالا اینو جلوتر مثال می زنم متوجه می شید

آخرین آرگومان هم مقدار اولیه این آیتم هست

یه نموره عجیب غریب شد حرفام ، بهتره که یه دو تا مثال بزنم تا مطلب جا بیفته :دی

مثال

Gauge  به صورت interactive

توجه کنید که تو همین مثال یاد می گیریم چی جوری میشه یه آیتم رو به فرم اضافه کرد و فرم رو نشون داد

 

.

  1. public void startApp() {
  2.  
  3. Form myForm=new Form("First Form");
  4. Gauge intGauge=new Gauge("YOHO!", true,8,3);
  5. myForm.append(intGauge);
  6. setCurrent(myForm);
  7.  
  8. }

اول یه فرم ایجاد کردم

بعد هم یه Gauge  به صورت interactive  که حداکثر ۸ تا بار داره و مقدار اولیه اش ۳ هست

برای اضافه کردن آیتم به فرم هم از متد append استفاده می کنیم

اینم خروجی برنامه

اینی که می گفتم interactive منظورم همین بود که تو تصویر می بیند

یعنی کاربر می تونه با Gaugeتعامل داشته باشه و مقدار اون رو عوض کنه

از این حالت وقتی استفاده می کنیم که مثلاً بخواهیم توی یه بازی یه ویژگی مثل سرعت رو کم یا زیاد کنیم یا تو یه برنامه خاص میزان صدا رو تنظیم یا کارای مشابه این، می بینید که مقدار اولیه ۳ یعنی چی؟ :دی

 

مثال

همون کد قبلیه است منتهی این بار Gauge  به صورت non-interactive

 

  1. public void startApp() {
  2.  
  3. Form myForm=new Form("First Form");
  4. Gauge non_intGauge=new Gauge("YOHO!", false,8,3);
  5. myForm.append(non_intGauge);
  6. setCurrent(myForm);
  7.  
  8. }

اینم خروجی برنامه

Gauge به صورت غیر تعاملی

اینجوری غیر تعاملی وقتی خوبه که بخواهیم یه مقداری رو به کاربر نشون بدیم فقط محض اطلاع ولی اون نتونه این مقدار رو نشون بده مثلاً میزان کیفیت یه چیزی رو نشون بدیم یا مقدار جون باقی مونده تو بازی ها یا مثلاً میزان حرفه ای شدن کاربر تو یه مهارت خاص یا ... کلاً مواردی که کاربر خودش نمی تونه تعیین کنه و این برنامه هست که باید این مقدار رو مشخص کنه

البته توجه کنید که این مقدار رو کاربر نمی تونه تغییر بده ولی از داخل خوده کد برنامه میشه این کار رو کرد

متد های Gauge رو هم بگم و بریم سراغ بقیه آیتم ها

 

  1. public int getMaxValue();

از اسم متد معلومه که چی هست دیگه ،حد اکثر اندازه Gauge رو به ما بر می گردونه

 

  1. public int getValue();

مقدار فعلی Gauge رو بر می گردونه

 

  1. public boolean isInteractive();

 

مشخص می کنه که Gauge مورد نظر تعاملی هست یا نه؟

 

  1. public void setMaxValue( int maxValue);

 

حد اکثر اندازه Gauge رو تغییر میده

  1. public void setValue( int value);

مقدار فعلی Gauge رو تغییر میده

 

  1. public void setLabel( String label);

 

عنوان Gauge رو تغییر میده

توجه کنید که من همه متد ها رو اینجوری توضیح نمی دم ، بعضی ها رو اینجوری می گم ، بعضی ها رو تو کدهایی که دوره هم می نویسیم می گم ،بعضی هاش رو هم خودتون باید برید یاد بگیرید :)

مثال

مثال زیر یه Gauge ایجاد می کنیم به صورت غیر تعاملی ولی دو تا Command بهش اضافه می کنیم که کاربر بتونه با این Command ها مقدارش رو تغییر بده این مثال نشون میده چه جوری میشه به Gauge یه ItemCommandListener اضافه کرد

 

 

  1. public void startApp() {
  2.  
  3. Form myForm=new Form("First Form");
  4. Gauge intGauge=new Gauge("Weak",false,9,2);
  5.  
  6. myForm.append(intGauge);
  7. Command incC=new Command("inc", Command.ITEM,0);
  8. Command decC=new Command("dec", Command.ITEM,1);
  9.  
  10. intGauge.addCommand(incC);
  11. intGauge.addCommand(decC);
  12.  
  13.  
  14.  
  15. intGauge.setItemCommandListener(new ItemCommandListener() {
  16.  
  17. public void commandAction(Command c, Item item) {
  18. Gauge g=(Gauge)item;
  19.  
  20. if(c.getLabel().equals("inc")){
  21. if(g.getValue()<g.getMaxValue())
  22. g.setValue(g.getValue()+1);
  23. }else if(c.getLabel().equals("dec")){
  24. if(g.getValue()>0)
  25. g.setValue(g.getValue()-1);
  26. }
  27.  
  28. if(g.getValue()<4)
  29. g.setLabel("Weak");
  30. else if(g.getValue()<7){
  31. g.setLabel("Strong");
  32. }else{
  33. g.setLabel("Very Strong!");
  34. }
  35. }
  36.  
  37. });
  38.  
  39. setCurrent(myForm);
  40.  
  41. }
  42.  
  43.  

ببینید اول اومد تو خط چهار یه Gauge ایجاد کردم اونم غیر تعاملی

بعد تو خط ۷و ۸ دو تا کامند ایجاد کرم یکی inc  و دیگری dec

البته اینایی که گفتم عنوان دو تا کامند ها بود نه اسمشون اسموش یه Cاضافه داره

تو خط ۱۰ و ۱۱ این دو تا کامند رو به Gaugeاضافه کردم

تو خط ۱۵ به Gauge مورد نظر ItemCommandListener اضافه کردم

حالا چه اتفاقی می افته؟ معلومه دیگه هر وقت کی از این دو تا کامند هایی که اضافه کردیم رو بزنید commandAction فراخوانی می شه

حالا ببینیم وقتی commandAction فراخوانی میشه می خواهیم چی کار کنیم

خط ۱۸ که توضیح نمی خواد چند بار تا حالا اینو توضیح دادم دیگه :دی

خط ۲۰ تا ۲۶ واسه اینه که بفهمیم کدوم یکی از کامند ها زده شدن

اگه inc  زده شد یه دونه به مقدار Gauge اضافه شه و اگه dec زده شده یه مقدار ازش کم شه

خطوط ۲۸ تا ۳۴ هم واسه اینه که متناسب با مقدار فعلی Gauge عنوانش رو تغییر بدیم

این خروجی ابتداییه برنامه

راستی بهتر بود اسم Gauge رو intGauge میزاشتم یا non_intGauge؟ من که intGauge گذاشتم فقط از رو تنبلی بوده نه دلیل دیگه ای ، شما هر اسم دیگه ای که دوست دارید بزارید :دی

 

می بینید که یه Menu اضافه شده

این منو رو که بزنید به صورت زیر خواهد بود

 

خب این منو که میاد یه چند بار inc رو بزنید یه چند بار dec رو بزنید تا متوجه رفتار برنامه بشید

اینم دو تا خروجی متفاوت

فکر کنم برای این جلسه کافی باشه دیگه ، نه؟  :دی