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

الدرس الثانى - نبذة سريعة عن ال Java ME

بدأه Mahmoud Kelany في 17 أغسطس 2010 · 16 رد · 2,986 مشاهدة · في JavaME
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

ازيكم عاملين ايه ؟

كل عام وانتم بخير

لنا عودة مره اخرى مع الـ J2ME

رابط الدرس السابق

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

النهارده هنعمل برنامج صغير خالص جمع وضرب رقمين

مكون من البرنامج عندى

3 textField

اثنان منهم لادخال الرقمين المراد جمعهم او ضربهم والثالث لعرض النتيجة

طبعا حقول الادخال هذه لابد وان تكون داخل شاشه

يقبى هنعرف From

وطبعا احنا قولنا هيجمع ويضرب رقمين

يقبى اكيد عندى حدث للجمع وحدث اخر للضرب

وطبعا اكيد يعنى هيكون فيه حدث للخروج

//Forms
    private Form mainForm;
    //TextFields
    TextField firstNumberTextField;
    TextField secondNumberTextField;
    TextField resultTextField;
    //Commands
    Command exitCmd;
    Command addCmd;
    Command mulCmd;

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

المراد تعلم منه ما هو الـ textField

ومراجعه على الـ Commands , Forms

طبعا عندى شاشه اسمها mainForm

هاعمل ليها getMainForm

بقوله داخل الداله لو الـ

mainForm == null

يعنى غير معرفه

عرفها وعرف الحاجات دى بداخلها

public Form getMainForm() {
        if (mainForm == null) {
            //Forms
            mainForm = new Form("Calc");
            //TextFields
            firstNumberTextField = new TextField("First Number", "0", 32, TextField.NUMERIC);
            secondNumberTextField = new TextField("Second Number", "0", 32, TextField.NUMERIC);
            resultTextField = new TextField("Result", "", 32, TextField.ANY);
            mainForm.append(firstNumberTextField);
            mainForm.append(secondNumberTextField);
            mainForm.append(resultTextField);
            //Commands
            addCmd = new Command("Add", Command.ITEM, 0);
            mulCmd = new Command("MUL", Command.ITEM, 0);
            exitCmd = new Command("Exit", Command.EXIT, 0);
            mainForm.addCommand(addCmd);
            mainForm.addCommand(mulCmd);
            mainForm.addCommand(exitCmd);
            mainForm.setCommandListener(this);
        }
        return mainForm;
    }

تعالوا نمسك الكود الغريب عننا ونفهمه ونعرف ايه هو وبيتعمل ازاى

اللى انا شايفه هنا فى الكود انه مش جديد علينا غير TextField

            firstNumberTextField = new TextField("First Number", "0", 32, TextField.NUMERIC);

يعنى مثلا دا

بعرف كائن من الـ textField Class

والبناء بتاعها بياخد القيم التاليه على الترتيب

1- الاسم الذى سوف يظهر بجانبه

2- القيمة الافتراضيه اللتى تكون بداخله

3- حجمه فى التمثيل داخل الشاشه

4- تحديد نوعه يعنى عاوز ادخل ارقام بس ولا ارقام وحروف ولا كلمه مرور ولا خليط من الاتنين

هنشوف الخليط من النوعين كشرح فقط ولكن ليس له مكان فى برنامجنا ولكن كى تعرف كيف يتم ذلك

يعنى مثلا

TextField txt = new TextField("Text", "", 32, TextField.NUMERIC | TextField.PASSWORD);

هنا حددت النوع على انه يكون ارقام وايضا تكون كلمه مرور يعنى غير مرئيه

وذلك باستخدام الـ OR operator

resultTextField = new TextField("Result", "", 32, TextField.ANY);

الـ resultTextField

بها نوع جديد اللى هو , TextField.ANY

يعنى بقوله هادخل اى حاجه من ارقام وحروف ورموز

وبعد كدا نضيفهم على الشاشه

وايضا نقوم بعمل الاحداث كما تعلمنا من قبل

واضافتها الى الشاشه

واضافه المستمع الى البرنامج عن طريق استخدام

CommandListener interface

وبكدا تم ان شاء الشكل للبرنامج

لكنه لا يعمل لانه لم يتعمل عمل الـكود الذى يجمع او يضرب

حسب ما يحدده المستمع

لكى يكون الكود اكثر تنظيما

ننشاء داله تسمى addition

خاصه بعمليه الجمع

public void addition() {
        try {
            double numberOne = Double.parseDouble(firstNumberTextField.getString().trim());
            double numberTwo = Double.parseDouble(secondNumberTextField.getString().trim());
            resultTextField.setString((numberOne + numberTwo) + "");
        } catch (Exception e) {
        }
    }

ناتى الى داخل الكود

البرنامج يتعمل مع الارقام العشريه

فالان نريد ان نجلب الرقم الموجود داخل الـ TextField

يكون ذلك بالتالى

firstNumberTextField.getString().trim()

ولكن هذا يقوم بارجاع String

ولكنى اريد رقم

فاقوم بعمل تحويل له من String الى Double

هكذا فى خطوه واحده

double numberOne = Double.parseDouble(firstNumberTextField.getString().trim());

ممكن تقسيم الخطوه السابقة الى خطوتين

String numOneStr = firstNumberTextField.getString().trim();
            double numberOne = Double.parseDouble(numOneStr);

لكنى لا افضل ذلك

فانا لست بحاجه الى تخزينه فاقوم بتحويله مباشره دون تخزين

وبعد ذلك اقوم بجعل قيمه الجمع بينها تعرض داخل الـ

resultTextField

باستخدام الداله

 setString("  ");

لعلكم لاحظتم وجود try , catch

هذا من باب الحذر فقط

اذا وجد خطا يتم التعامل معه

ولكن ما الذى يجعلك واثق انه من باب الحذر فقط

لعلك نسيت ما جعلناه فى ان يكون الـTextField. NUMERIC

يعنى لا يقبل الا ارقام فقط فبالتالى تجاهلت انوع الخطاء التتى تنتج عن وجود حرف بالخطأ من قبل المستخدم

يتم عمل نفس الطريقه مع الداله الخاصه بالضرب

  public void multiplication() {
        try {
            double numberOne = Double.parseDouble(firstNumberTextField.getString().trim());
            double numberTwo = Double.parseDouble(secondNumberTextField.getString().trim());
            resultTextField.setString((numberOne * numberTwo) + "");
        } catch (Exception e) {
        }
    }

بعد ذلك بقى خطوه واحده

وهى ان نقوم بعمل الـ commandAction

public void commandAction(Command cmd, Displayable d) {
        if (cmd == addCmd) {
            addition();
        } else if (cmd == mulCmd) {
            multiplication();
        } else if (cmd == exitCmd) {
            notifyDestroyed();
        }
    }

نقوم بمنادة الداله

            addition();

اذا كان الحدث المسموع ياتى من الامر

addCmd

وايضا مع الـ

multiplication();

وبقى جزء صغير خالص هو انى اعرض وتم شرحها من قبل فى الدرس السابق

لتحميل الكود

CalcMobile.zip

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Calc;

import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

/**
 * @author Mahmoud Mahrous
 */
public class ClacMidlet extends MIDlet implements CommandListener {

    //Forms
    private Form mainForm;
    //TextFields
    TextField firstNumberTextField;
    TextField secondNumberTextField;
    TextField resultTextField;
    //Commands
    Command exitCmd;
    Command addCmd;
    Command mulCmd;

    public void startApp() {
        Display.getDisplay(this).setCurrent(getMainForm());
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }

    public void commandAction(Command cmd, Displayable d) {
        if (cmd == addCmd) {
            addition();
        } else if (cmd == mulCmd) {
            multiplication();
        } else if (cmd == exitCmd) {
            notifyDestroyed();
        }
    }

    /**
     * @return the mainForm
     */
    public Form getMainForm() {
        if (mainForm == null) {
            //Forms
            mainForm = new Form("Calc");
            //TextFields
            firstNumberTextField = new TextField("First Number", "0", 32, TextField.NUMERIC);
            secondNumberTextField = new TextField("Second Number", "0", 32, TextField.NUMERIC);
            resultTextField = new TextField("Result", "", 32, TextField.ANY);
            mainForm.append(firstNumberTextField);
            mainForm.append(secondNumberTextField);
            mainForm.append(resultTextField);
            //Commands
            addCmd = new Command("Add", Command.ITEM, 0);
            mulCmd = new Command("MUL", Command.ITEM, 0);
            exitCmd = new Command("Exit", Command.EXIT, 0);
            mainForm.addCommand(addCmd);
            mainForm.addCommand(mulCmd);
            mainForm.addCommand(exitCmd);
            mainForm.setCommandListener(this);
        }
        return mainForm;
    }

    /**
     * Addition
     */
    public void addition() {
        try {
            String numOneStr = firstNumberTextField.getString().trim();
            double numberOne = Double.parseDouble(numOneStr);
            double numberTwo = Double.parseDouble(secondNumberTextField.getString().trim());
            resultTextField.setString((numberOne + numberTwo) + "");
        } catch (Exception e) {
        }
    }

    /**
     * multiplication
     */
    public void multiplication() {
        try {
            double numberOne = Double.parseDouble(firstNumberTextField.getString().trim());
            double numberTwo = Double.parseDouble(secondNumberTextField.getString().trim());
            resultTextField.setString((numberOne * numberTwo) + "");
        } catch (Exception e) {
        }
    }
}

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 17 أغسطس 2010 في 03:51

2

Software Developer
Mahmoudkelany.com


 

#2

ما شاء الله

يعني عن قريب يا محمود نقدر نعتبرك خبير

بالتوفيق و للامام

شرح بسيط و جميل

لكن لي تعليق

انا افضل لكي لا اتعب مخي و انا اتذكر اسم الكائن الذي عملته

ابدأ بتسميته بصفته

مثلا

Command cmd_add;

بدلا

Command addCmd;

(هذا رأيي)

#3
محمد عرسان كتب:

ما شاء الله

يعني عن قريب يا محمود نقدر نعتبرك خبير

بالتوفيق و للامام

شرح بسيط و جميل

لكن لي تعليق

انا افضل لكي لا اتعب مخي و انا اتذكر اسم الكائن الذي عملته

ابدأ بتسميته بصفته

مثلا

Command cmd_add;

بدلا

Command addCmd;

(هذا رأيي)

الله يخليك اخى محمد مش للدرجه هذه

يارب ان شاء الله ربنا يوفقنا جميعا

اشكرك

اممم

فعلا هو كويس وليس فى الموبيل فقط

لكن فى باقى اللغه

لكن انا سمعت اللى انا ماشى عليه هو الـ java convention

يعنى ان انا انهى الكائن بنوعه

يعنى

secondNumberTextField

ان انا انهيته بـ TextField لذلك فهو من هذا النوع ووهكذا

متشكر على هذا الرأى وهاشوف تانى اصل انا من فتره وانا على هذا المبدا

صعب شويه اتعود على مبدا تانى

لكن لدى رأى على رأيك

لماذا تستخدم الـ ( _ )

هذا هو Microsoft convention

ممكن تستخدمها وتكون هكذا افضل طالما انك تفضل كتابه cmd فى الاول

تكون هكذا

Command cmdAdd;

:)

سلام عليكم

Software Developer
Mahmoudkelany.com


 

#4

ال java convention ليست اجبارية في الكتابة

لكن هي شيء معتمد لكي يكون التفاهم ما بين المبرمجين اسهل

و لكل شخص حرية الاختيار بما يناسبه

اما بالنسبة لاستخدامي ل " _ " في الاسماء

ذلك لكي اريح عيني عند قرأة الكود عند انسدال الخيرات بين الاسماء المتوفرة لديك

بصراحة في الشغل لا استخدمها انما استخدم ال camelCase هي البدء بصغير و الفصل بين الكلمات بحرف كبير

#5
اقتباس
ال java convention ليست اجبارية في الكتابة

لكن هي شيء معتمد لكي يكون التفاهم ما بين المبرمجين اسهل

و لكل شخص حرية الاختيار بما يناسبه

اما بالنسبة لاستخدامي ل " _ " في الاسماء

ذلك لكي اريح عيني عند قرأة الكود عند انسدال الخيرات بين الاسماء المتوفرة لديك

هدي أعصابك ياعم..

طبعا ليست إجباريه... أنا عن نفسي أفضل C convention :P

#6
هويدي كتب:

هدي أعصابك ياعم..

طبعا ليست إجباريه... أنا عن نفسي أفضل C convention :P

يا عم انا هادي الاعصاب :cool:

تم تعديل هذه المشاركة بواسطة محمد عرسان في 18 أغسطس 2010 في 03:19

#7
هويدي كتب:

هدي أعصابك ياعم..

طبعا ليست إجباريه... أنا عن نفسي أفضل C convention :P

ما انا مهدى اعصابى اهووو

ماشى ما انا عارف انها ليست اجباريه بس انا بحب المنتدى المصنع محليا

مش التقليد :P :P :P :P

قال C convention قال :lol: :lol: :lol:

يا عم

محمد عرسان كتب:

يا عم انا هادي الاعصاب :cool:

ايوه خليك انت هادى

بس ازاى محمد و هادى مش عارف بصراحه :lol:

سيبك من بتاع الـ C convention دا

قال C convention قال :P :wub:

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 18 أغسطس 2010 في 08:21

Software Developer
Mahmoudkelany.com


 

#8
اقتباس
سيبك من بتاع الـ C convention دا

قال C convention قال

mad.gif ماشي يامحمود, بتتريق على عمك :P
#9
هويدي كتب:

mad.gif ماشي يامحمود, بتتريق على عمك :P

معلش يا عمووو

ان شاء الله انزل درس تانى نتعلم منه حاجه تانيه

وهى الـThread, TimerTask فى تطبيقات الموبيل

Software Developer
Mahmoudkelany.com


 

#11
مهدي حجازي كتب:

تسلم يا محمود في انتظار جديدك..

ان شاء الله قريبا احتمال اكيد باذن الله اليوم

احتفالا بمشرفنا الجديد محمد عرسان

Software Developer
Mahmoudkelany.com


 

#12

برضو غاوي تخرب مواضيع خلق الله يا هويدي tongue.giftongue.gif

بفكر آخذ لفة سريعة على المواضيع الي بتخشها علشان أخفي ردودك tongue.giftongue.giftongue.gif

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#13
علاء الصالحي كتب:

برضو غاوي تخرب مواضيع خلق الله يا هويدي tongue.giftongue.gif

بفكر آخذ لفة سريعة على المواضيع الي بتخشها علشان أخفي ردودك tongue.giftongue.giftongue.gif

تحياتي

معلش بقا يا عموو علاء

سماح المره دى

علشان خاطرى :P :P :P

دا هويدى حبيبى :)

Software Developer
Mahmoudkelany.com


 

#14

شكرا كثير الك اخي

عندي استفسار بسيط ، و هو اني عملت ويب سيرفس تقوم بجمع عددين يدخلهما المستخدم

يعني عندما يدخل المستخدم هذين الرقمين من خلال برنامج على الجوال ، سيتصل هذا البرنامج بالويب سيرفيس حتى يقوم باظهار نتيجة جمع هذين العددين

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

و بكون شاكره كتير الك و ممنونه

من فضلك... اذكر الله

لا اله الا الله وحده لا شريك له

له الملك و له الحمد و هو على كل شيء قدير

:thumb_up: :clapping:

(f)

#15

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

من فضلك... اذكر الله

لا اله الا الله وحده لا شريك له

له الملك و له الحمد و هو على كل شيء قدير

:thumb_up: :clapping:

(f)

#16

اعتقد انك تريدين هذا

/index.php?showtopic=183742

ممكن تستغنى عن طريقه قاعده البيانات

وتستخدمى الطريقه فى اعاده البيانات الى الموبيل مره اخرى عن طريق الخادم

معذره على التأخر لدخولى المتقطع

Software Developer
Mahmoudkelany.com


 

#17

تكرم وفي إنتظار المزيد :)

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