السلام عليكم ورحمه الله وبركاتة
ازيكم عاملين ايه ؟
كل عام وانتم بخير
لنا عودة مره اخرى مع الـ 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();
وبقى جزء صغير خالص هو انى اعرض وتم شرحها من قبل فى الدرس السابق
لتحميل الكود
/*
* 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) {
}
}
}

