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

الفرق باستخدام ال Canvas and MIDlet

مغلق
بدأه rasha2003 في 24 أكتوبر 2006 · 5 رد · 1,045 مشاهدة · في JavaME
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

أنا مبتدأة في مجال ال J2ME وحاليا اعمل على برنامج بسيط لتمثيل اغلب اجزاء اللغة

لكن الان احاول فهم الفرق باستخدام ال Canvas and MIDlet

قمت باستخدام كل منهم على حدا وكان استخدما ناجحا لكن الان احاول دمج الاثنين معا لعمل GUI

أكثر تفصيلا كتغيير لون وحجم الخط المستخدم في قائمة المواد List

لكني لم انجح حاولت البحث في الكثير من المواقع والكتب لكن لم اجد الجواب المقنع

أعلم ان ال Canvas تستخدم لل Low level interface

وال MIDlet لل Hight level interface

هل هناك طريقة لدمج الاثنين معا للاستفادة منهما ؟

شكرا

#2

الصف الأساسي لتطبيقك الخاص بالجوال يجب ان يرث الصف MIdlet لأسباب تتعلق بدورة حياة التطبيق ( تشغيله - ايقافه - انهاءه ) وتنسيقه مع برنامج ادارة التطبيقات ( Application Manager Software (AMSبمعنى انه لا علاقة للصف MIdlet بواجهة الاستخدام User Interface .

.......

الصف المسؤؤل عن واجهات الاستخدام منخفضة المستوى هو Canvas ... صحيح

الصف المسؤول عن واجهات الاستخدام عالية المستوى هو Screen من الحزمة :

java.microedition.lcdui

لااعتقد انك تستطيعين استخدام كلا نمطين واجهات الاستخدام منخفضة وعالية المستوى معا ليظهرا في نفس شاشة العرض Display ، اما ان يأخذ تطبيقك طابع رسومي Canvas (في حالة الألعاب والرسومات البيانية )مع الاستعانه بالأوامر التقليدية Command

واما ان يأخذ تطبيقك طابع فورم (صناديق نص ولوائح واشارات تنبيه Alert... الخ)

سيمضي ركبنا العملاق لن يركع .. بإيمان لغير الحق لا يصدع

عزيزا شامخا كالمجد بل أروع .. فسجل أيها التاريخ ما تسمع :

فلسطين لنا الآمال والمطمع .. نعاهد أن نحررها وأن ترجع

ونقسم نستعيد الأرض أو نصرع .. ويبقى رمزنا الزيتون والمدفع

Palestine.gif

#3

سأقنعك أكثر من وجهة نظر تصميمية ..

لاحظي معي اختي العزيزة من الشكل ...

d1ba3c6e3a.jpg

طبيقك فرضت ان اسمه myMIDlet طبعا سيرث الصف MIDlet

تعلمين ان الصف Display هو المسؤول عن عرض واجهة الاستخدام بالطريقة setCurrent التي تأخذ برامتر وحيد هو غرض من نمط Displayable ولكنه صف مجرد لا نستطيع انشاء غرض منه لنممره كما انه لا يحوي أي طريقة مجردة

(تذكرت ملاحظة الأخ حسام حول أهمية وجود صف مجرد بدون طرق مجردة)

وبالتالي ننظر في شجرة الوراثة لمستوى الأبناء نجد ابنين يرثان Displayable هما Screen و Canvas

فنحن أمام خيارين :

اما انشاء صف يرث الصف المجرد Canvas أو GameCanvas (يرث Canvas)

وتحقيق (كتابة كود أو سلوك) الطريقة المجردة paint

أما الصف Screen فهو أيضا لايحوي أي طريقة مجردة فننظر لمستوى ابنائه

Alert, Form, List, TextBox .... هذه صفوف غير مجردة تستطيعين تمريرها مباشرة أو تستطيعين تطوير أي منها بصف تطوريه يرثها

وبالتالي ننشئ منه غرض في تطبيقنا myMIDlet بالشكل :

Display d=Display.getDisplay(this);

ونستدعي الطريقة setCurrent على احد الصفوف الناتجة سابقا

(احد سلالة ابناء Displayable التي تندرج من احد نوعين Screen أو Canvas وليس كلاهما معا )

.........

تستطيعين انشاء أكثر من صف Displayable

بعضها من سلالة Screen وبعضها من سلالة Canvas ومن ثم تستدعين setCurrent أكثر من مرة حسب احداث التطبيق وفي كل مرة تعطينها كبرامتر Displayable مختلف لتصلي للنتيجة التي تريدينها .

d.setCurrent(ScreenSon);
d.setCurrent(CanvasSon);

سيمضي ركبنا العملاق لن يركع .. بإيمان لغير الحق لا يصدع

عزيزا شامخا كالمجد بل أروع .. فسجل أيها التاريخ ما تسمع :

فلسطين لنا الآمال والمطمع .. نعاهد أن نحررها وأن ترجع

ونقسم نستعيد الأرض أو نصرع .. ويبقى رمزنا الزيتون والمدفع

Palestine.gif

#4

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

ولقد قضيت وقتا لا بأس به لتجريب كل الاحتمالات المتعلقة بهما وما زلت في بداية الطريق

:)

وفي حال اتسع صدرك لسؤال اخر فساكون شاكرة مرة اخرى. انا حاليا احاول انو اجعل مقدمة برنامجي عبارة عن شرح كلامي مبسط طبعا حاولت الكتابة بال Canvas لكن العملية كانت معقدة حيث ان الالوان والاحجام تختلف من simulator الى الواقع على جهاز الموبيل لذا خطرت ببالي ان اعمل المقدمة كصورة واجعلها Background لكن اواجه مشكلة حقيقية من حيث اختلاف الاحجام من هاتف لاخر فهل من نصيحة بخصوص هذا الموضوع

سلام

#5

للتوضيح :

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

قصدت لا يمكن ان يحتوي عناصر من كلاهما على نفس الشاشة ..

ولكن يمكنك عرض النوعين كأنها صفحات أو نوافذ تلي بعضها .

يعني اذا كنت تستخدمين شاشة عرض رسومية Canvas

d.setCurrent(CanvasSon);

وتردين ان توفري للمستخدم امكانية تغيير خواص فيها بظهور فورم (سيغطي الشاشة كلها ) كاستجابة لحدث Command ينقلك لشاشة الفورم

d.setCurrent(ScreenSon);

وبعد اختياره يعود للشاشة الرسومية Canvas

d.setCurrent(CanvasSon);

أتمنى ان تكون وضحت الفكرة ....

.................................................................

تستطيعين تكييف واجهة استخدام تطبيقك UI لتناسب حجم شاشة أي جوال باستخدام بعض الطرق من الصف Displayable ( أحد ابناءه ) تستخلص بعض المعلومات عن الجوال المنصب فيه التطبيق مثل طول الشاشة getHeight وعرضها getWidth :

public void paint(Graphics g) {
.....
g.fillRect(0, 0, getWidth(), getHeight()) 
.....
}

حظا سعيدا .. ونحن بانتظار منتجاتك من برامج وتطبيقات الجوال .

سيمضي ركبنا العملاق لن يركع .. بإيمان لغير الحق لا يصدع

عزيزا شامخا كالمجد بل أروع .. فسجل أيها التاريخ ما تسمع :

فلسطين لنا الآمال والمطمع .. نعاهد أن نحررها وأن ترجع

ونقسم نستعيد الأرض أو نصرع .. ويبقى رمزنا الزيتون والمدفع

Palestine.gif

#6

يسلمو كتيير على تعبك

انا فهمت الفكرة وتطبيقها كان ناجح 100%

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

g.drawImage(image, 0,0,Graphics.TOP|Graphics.LEFT);

واظن انها غير قابلة للتطبيق لانها ترتبط بحجم الصورة نفسها لا الجهاز

في حالة وجود مواضيع خاصة بالكتابة او الصورة الرجاء اضفتها

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

سلام

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

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