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

5 - 5 - اضافة صورة Image الى الفورم Form في J2ME

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

تعرفنا سابقا على كيفية التعامل مع الفورم Form

وكيفية اضافة كائن من النوع TextField الى الفورم

سنتعرف الان على الصنف Image وكيفية اضافتها الى الفورم

قبل هذا يجب علينا معرفة ثلاث اشياء

1 - يجب علينا اولا معرفة كيفية انشاء صورة

لانشاء صورة وربطها مع التطبيق يجب علينا استخدام الطريقة cteateImage التابعة للصنف Image

سيكون الكود المستخدم كالاتي

     try{
           Image img = Image.createImage( /* اسم ملف الصورة مع الدليل */ );  
          } catch (java.io.IOException e)
            { /* اظهار رسالة خطأ */ }

وسنلاحظ هنا انا استخدما الاستناءات Exception ومعالجة الاخطاء try و catch

والسبب في ذلك ان التطبيق يقوم بالبحث عن الصورة في وقت التنفيذ فإذا لم يحصل عليها فإن التطبيق يفشل اذا لم نقم بمعالجة الخطأ

2 - يجب علينا معرفة الانماط التي يمكن عرضها في تطبيق J2ME

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

 PNG Image FormatPNG (Portable Network Graphics)

3 - كيفية اضافة الصورة الى الحزمة JAR

باستخدام Wireless ToolKits يمكنك استخدام هذا الامر

/*دليل الجافا*/\bin\jar.exe umf MANIFEST.MF MyApp.jar Image.png

يجب الاتنباه هنا اننا استخدمنا العبارة umf

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

اما اذا وضعتها في دليل اخر فانه يجب كتابة اسم الدليل كاملا مع ملاحظة انه سيتم انشاء نفس الدليل في الكلاسات المحزومة JAR

لا يوجد اي مشيد Constructor لصنف Image مباشرة بعد تعريف كائن من نوع Image يتم استخدام createImage

والسبب ان عملية انشاء كائن Image تحدث تلقائيا عند استخدام الطريقة createImage

هناك عدة طرق لاستخدام الطريقة createImage

public static Image createImage(byte[] imageData, int imageOffset, int imageLength)

imageData : مصفوفة تحتوي على بيانات النقاط للصورة على شكل بايتات Bytes

مثال على ذلك عند تحويل كائن من نوع صورة الى String باستخدام الدالة toString ومن ثم تحويلها الى Bytes باستخدام الدالة getBytes

public static Image createImage(Image source)

source : كائن صورة موجود من قبل نريد نسخه الى كائن اخر باستخدام هذه الطريقة

اي ان هذة الطريقة تستخدم فقط لنسخ كائن من نوع Image الى كائن اخر من نفس النوع

public static Image createImage(int width, int height)

انشاء مساحة فارغة من نمط رسومي لاجل اضافة اي رسومات او صور لهذه المساحة

height : ارتفاع هذه المساحة

width : عرض هذة المساحة

public static Image createImage(String name)

انشاء كائن من صورة موجودة على شكل ملف محزوم مع الكلاسات المحزومة في الملف .jar

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

وهذة الطريقة هي المستخدمة بكثرة

والان سنضع مثالا يوضح كل هذا

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

 public class MyForm extends MIDlet  implements CommandListener
  {
   Display display;
   Form frm;
   Command exitCommand;
  
  public MyForm()
   {
     frm = new Form("Form Title");
     display = Display.getDisplay(this);
     exitCommand = new Command("Exit", Command.EXIT, 1);
   }
  public void startApp()
   {
     frm.append("This text in Form");  
     addImageToForm();
     frm.append("\nwww.arabteam2000.com");  
     frm.addCommand(exitCommand);
     frm.setCommandListener(this);
     display.setCurrent(frm);
   }

   public void  pauseApp() { }
   
   public void destroyApp(boolean unconditional)  { }

  public void addImageToForm()
   {
     try{
           Image img = Image.createImage(
                                             "/Test.png");  // اسم ملف الصورة مع الدليل
           frm.append(img);  
         } catch (java.io.IOException e)
            {
               Alert alert = new Alert ( "Error: Load Image" );
               alert.setString( e.getMessage() );
               display.setCurrent(alert);
             }
   }

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

Image.jpg

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

FormAndImage.zip

#2

شرح الاشياء التي لم نتعرض لهاسابقا

try{
          Image img = Image.createImage(
                                            "/Test.png");  // اسم ملف الصورة مع الدليل
          frm.append(img); //اضافة الصورة للفورم  
        }

هنا سيقوم بمحاولة عرض الصورة على Display وفي حالة عدم تواجدها سيقوم باظهار Alert من نوع Error عن طريق

catch (java.io.IOException e)
           {
              Alert alert = new Alert ( "Error: Load Image" );
              alert.setString( e.getMessage() );
              display.setCurrent(alert);
            }

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

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

#3

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

تسلم افكارك

طريقة تعليمية ممتازة

أحب دائماً أن أتتبع خطوات تطبيق حقيقي يشتغل عندي بالجوال فعلاً

إرفاق ملف من أهم وسائل الإيضاح باستخدامه أعرف ماذا يجب أن يحدث

هناك أشياء كثيرة من الشرح لا تتوضح للمتعلم الا بتتبع الأمثلة وتنفيذها

تعليمات الدوس قديماً كانت عبارة عن أمثلة وهي أوضح من جميع التعليمات الحديثة.

أخ مصعب :

عندما نبدأ تنفيذ ملفات الباتش التي أرفقتها انت ماهو الترتيب الذي يجب أن نتبعه في تنفيذها ؟ أو أبدأ بأي واحد منها بدون ترتيب ؟

#4
اقتباس
عندما نبدأ تنفيذ ملفات الباتش التي أرفقتها انت ماهو الترتيب الذي يجب أن نتبعه في تنفيذها ؟ أو أبدأ بأي واحد منها بدون ترتيب ؟

بالطيع يجب مراعاة الترتيب

BuildClass

PreviryClass

BuildJar

AddImage

مع ملاحظة ان هذة الملفات تعمل على جهازي ولن تعمل على جهازك مالم تقم بتغيير المسارات حيث ان المسارات بالتأكيد مختلفة عندي وعندك

لكن انا قمت بارفاق هذه الملفات كمثال للتوضيح

وكذلك من اجل التعرف على كيفية اضافة الصورة للبرنامج من خلال ملفات الباتش

باستخدام الملف AddImage

يجب ملاحظة ان ملفات الباتش التي ارفقتها عبارة عن الملفات التي قام برنامجي بانشاءها

#5

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

من تفحص خطوات العمل في برنامج التجميع وكذلك ملفات الباتش

التي حصلت عليها من الأخ مصعب غيلان وجدت أن خطوات العمل

تعتمد على خمس ملفات

ثلاث ملفات تنفيذية وملفي أرشفة مع توفر بيئة الجافا

javac.exe موجودعندي ويعمل مع ملفات الباتش صح

jar.exe موجودعندي ويعمل أيضا صح

----------------------

أرجو توفير الملفات التالية إذا أمكن :

preverify.exe غير موجود

midpapi.zip غير موجود

kvem.jar غير موجود

#7

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

المكرم الأخ مصعب أشكرك على ما بذلته من تسهيلات وايضاحات

أرجو ان تتحمل جهلي بالموقع وطريقة الوصول للمطلوب

لم أصل في هذا الموقع لتحميل J2ME أو J2SE

طلبت من أشخاص آخرين ويطلبون وصلة مباشرة

لا نزال ندور في دائرة مغلقة داخل هذا الموقع

هل يحتاج تسجيل فيه أو كلمة سرية أو التزامات أخرى ؟

أرجو تحديد وصلة مباشرة لو كلفت عليكم أو ذكر الخطوات مرقمة

1-

2-

3-

----------------------------

ثانياً : لماذا نطلب J2ME كاملة

أعتقد أن حجم الملفات التي طلبتها ليس كبيراً وأن معطم J2ME ليس مهما

ولا نحتاج اليه

لأن :

javac.exe موجودعندي ويعمل مع ملفات الباتش صح :حجمه 5.5كيلو بايت فقط

jar.exe موجودعندي ويعمل أيضا صح :حجمه 5كيلوبايت فقط

وأحجام جميع ملفات الأوامر في دليل BIN متقاربة

عدد ملفات الدليل BIN كله عندي 62ملف وحجمه بجميع ملفاته 6.16ميقابايت

----------------------

أرجو منك أو غيرك أن يعطيني أحجام الملفات التي أحتاجها وهي :

preverify.exe غير موجود عندي كم حجمه ؟

midpapi.zip غير موجود عندي كم حجمه ؟

kvem.jar غير موجود عندي كم حجمه ؟

وإذا أمكن توفيرها من أحد الإخوان فأنا شاكر ومقدر للتجاوب

علماً أن عندي Java-Studio1.0 كاملة 34.8ميقا بايت

#8
اقتباس
أرجو منك أو غيرك أن يعطيني أحجام الملفات التي أحتاجها وهي :

preverify.exe غير موجود عندي كم حجمه ؟

midpapi.zip غير موجود عندي كم حجمه ؟

kvem.jar غير موجود عندي كم حجمه ؟

وإذا أمكن توفيرها من أحد الإخوان فأنا شاكر ومقدر للتجاوب

هذا الكلام غير نافع

يجب عليك تحميل J2ME كاملة

من هذا الرابط

او من هنا

http://java.sun.com/products/j2mewtoolkit/download.html

#9
أرجو ان تتحمل جهلي بالموقع وطريقة الوصول للمطلوب

أشكرك على كل حال ما قصرت، وسوف أبذل جهدي في مواقع أخري (المعذرة)

#10

جزاك الله ألف خير على هذه الدروس...........

لقد قمت بتطبيق المثال ولكن باستخدام الجي بليدر ... وهناك أختلاف(في الطريقة) لكن ليس كثيرا".

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

#11

sih: ما هو الذي لا تقدر الى الوصول اليه....

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

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

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

لا اعتقد وجود موقع عربي يناقش مشكلة J2ME لاني دائم البحث في جوجل عن المواقع العربية التي تتحدث عنها

يمكنك تجربة البحث في جوجل لتتأكدو ا من ذلك

كان هناك منتدى النجار وفيه قسم خاص ب J2ME ولكن لا يوجد فيه اي مشاركة

#13

درس اكثر من رائع مصعب

نتمنى ان نرى المزيد من ابداعاتك وتميزك الملحوظ

اخي العزيز..

حاولت تجربة كود البرنامج ووضع الصورة في نفس المجلد

ولكن مع بداية تشغيل البرنامج يظر لي التطبيق وبعدها يتم إغلاقه بسرعه حتى ان الصورة لا تعمل.. ولا يظهر لي الـ alert ولا حتى اي تعليق بسبب الخطأ .. لا اعلم ما السبب !!

#14
اقتباس
ولكن مع بداية تشغيل البرنامج يظر لي التطبيق وبعدها يتم إغلاقه بسرعه

هناك خطأ وقت التنفيذ قد يكون بسبب الصورة وقد يكون غير ذلك

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

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

ايظا يجب الانتباه ان اللغة حساسة للحروف مثلا Image.png ليست مثل image.png

#15
ولكن مع بداية تشغيل البرنامج يظر لي التطبيق وبعدها يتم إغلاقه بسرعه حتى ان الصورة لا تعمل.. ولا يظهر لي الـ alert ولا حتى اي تعليق بسبب الخطأ .. لا اعلم ما السبب !!

يا أخي Blue Bird مادام أن التطبيق يشتغل ثم ينطفي ولا تظهر رسائل خطأ فمعنى ذلك أن التطبيق صحيح ولكن الصورة كبيرة بحيث تتحرك أجزائها عند نزولها على الشاشة وتبقى على جزء من الصورة لونه أسود مثلاً أو أي لون فتبدو الشاشة سوداء وهذا السواد جزء من الصورة الكبيرة.

حاول تحريكها أو عالج وضع الصورة .

#16

السلام عليكم

أخواني الأعزاء عند عملية وضع صورة في التطبيق واجهتني مشكلة ولم أعرف من خلال الشرح

وهي بعد كتابة الكود كما وضعه الأخ مصعب وهي أين يتم وضع الصورة المراد عرضها هل في مجلد ال bin أو مجلد ال scr وهل هناك سطر كود إضافي يجب وضعه

وماهي فائدة الملفات الأربعة المرفقة مع مثال الاخ مصعب غير ملفي الجاد والجار

أرجوا الإفادة

تحياتي لكم

#17

ملف الصورة يجب أن تراعي مكانه عند أتمامك لعملية تكوين ملف الـjar

الملفات المرفقة هي عبارة عن batch files ... ملفات نصية تكتب فيها أوامر الدوز المراد تنفيذها بمجرد فتح هذه الملفات ... والأخ مصعب أرفقها ليبين أنه يمكن كتابة الأوامر المتعلقة بمرور التطبيق في مختلف المراحل في ملفات باتش ومن ثم حفظها وتعديلها عند اللزوم لتحديد أسم الملف في كل مرة وهي أساساً نتجت عند تطبيقه لبرنامجه على جهازه ... طبعاً مع مراعاة تغيير أسماء المجلدات المحددة للمسارات على حسب ماهو لديك في الجهاز...

#18

أخي العزيز student

شكرا لك على كل حال

لكن بصراحة لم أفهم قصدك حيث أني إلى الآن لاأعرف مالمقصود ب

Image img = Image.createImage( /* اسم ملف الصورة مع الدليل */ );

فماالمقصو بـ اسم ملف الصورة مع الدليل يعني لنفرض أن ملف الصورة اسمه

shape والمجلد الذي وضعت فيه الصورة هو مجلد ال bin

فما هي العبارة التي أضعها في المكان بين النجمتين

ثانيا لم أفهم متى استخدم هذه العبارة

/*دليل الجافا*/\bin\jar.exe umf MANIFEST.MF MyApp.jar Image.png

مع أن كود الاخ مصعب خالي من هذه العبارة

تحياتي

تم تعديل هذه المشاركة بواسطة ha98 في 9 سبتمبر 2004 في 00:53

#19

[

اقتباس
Image img = Image.createImage( /* اسم ملف الصورة مع الدليل */ );

فماالمقصو بـ اسم ملف الصورة مع الدليل يعني لنفرض أن ملف الصورة اسمه

shape والمجلد الذي وضعت فيه الصورة هو مجلد ال bin

فما هي العبارة التي أضعها في المكان بين النجمتين

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

Image img = Image.createImage("/Test.png");

اقتباس
ثانيا لم أفهم متى استخدم هذه العبارة

/*دليل الجافا*/\bin\jar.exe umf MANIFEST.MF MyApp.jar Image.png

مع أن كود الاخ مصعب خالي من هذه العبارة

تُستخدم هذه العبارة لالحاق الصورة بملف الجار عن طريق ملف الباتش ... بمعنى أن هذه الصيغة تستخدم لاضافة الصورة لحزمة الجار MyForm.jar

وكان بالامكان الحاقها منذ البداية عند بداية خطوة التحزيم

دليل الجافا*/\bin\jar.exe cmf MANIFEST.MF MyForm.jar MyForm.class Image.png

...

اذا أستطعت توفير JBuilder سيغنيك عن كل هذه الخطوات

#20

عزيزي student

عملت مايلي

1- وضعت الصورة في ملف ال bin

2- كتبت الكود كما كتبه الأخ مصعب تماما

ولكن المشكلة أن الصورة لم تظهر

قفط ظهر النص

لماذا أو مالسبب في اعتقادك

تحياتي

#21
اقتباس
عملت مايلي

1- وضعت الصورة في ملف ال bin

2- كتبت الكود كما كتبه الأخ مصعب تماما

ولكن المشكلة أن الصورة لم تظهر

فقط ظهر النص

لماذا أو مالسبب في اعتقادك

أخي الكريم

يبدو أنك لم تضمن الصورة ضمن ملف الجار ...

ماذا تستخدم لتطبيق البرامج

WirelessToolKit أم JBuilder ؟

#22

نعم عزيزي student الظاهر هكذا لأني صراحة لم أعرف طريقة تضمينها بالضبط

وأنا أستخدم WirelessToolKit

حاولت أكثر من مرة لكن دون فائدة

فهذه العبارة من الكود

دليل الجافا*/\bin\jar.exe cmf MANIFEST.MF MyForm.jar MyForm.class Image.png

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

مكان كتابة الكود

على العموم يمكن هذه اللي راح تحل مشكلتي

شكرا لك

#23

السلام عليكم

الحمدلله أخيرا ظهرت الصورة

وماعملته كالتالي

لم أضف على كود الاخ مصعب ولا شيء

مجرد أني وضعت الصورة في المجلد res

وانحلت المشكلة الحمدلله

هل هناك مشكلة في هذه الطريقة

شكرا لك أخي student

#24

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

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

يلاحظ أن بعض البرامج يتم فيها إرفاق ملفات txt ضمن مجلد الأيقونات والصور المسمى res

هل يمكن توضيح الطريقة والنتيجة ؟

#25

ممكن ما قلته يا اخ sih لكن هذا يحتاج الى الحزمة java.io وهو موضوع بحد ذاته وله علاقة بالجافا اكثر من J2ME باختصار شديد هذ اسلوب لاستدعاء ملف وقم بمراجعة الرابط التالي /index.ph...opic=48894&st=0

public void loadfile() throws Exception {

try {
   InputStream is = getClass( ).getResourceAsStream("/the Name of the File");
   InputStreamReader r = new InputStreamReader(is);
   char[] buffer =  new char[64];

  StringBuffer sb = new StringBuffer( );
   r.read(buffer,0,64);
   sb.append(buffer, 0,64);
   str = sb.toString( );
   str = str.trim();
	form.append(str);// اعرض محتويات الملف على الشاشة او في الفورم  
  is.close();        
}
 catch (IOException ex) {str = "Failed to load text";}


  }

تم تعديل هذه المشاركة بواسطة مجدي محمود في 20 ديسمبر 2004 في 20:54

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

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

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