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

حزمة بياني Achart

بدأه علاء الصالحي في 24 أبريل 2008 · 12 رد · 1,559 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

فكرة الحزمة

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

تعريف بالحزمة

الحزمة تساعد المبرمجين على رسم أشكال بيانية في برامجهم بدون الحاجة إلى كتابة أي كود برمجي

كل ما عليك هو أن تعطي الحزمة Vector يحتوي على أسماء الأعمدة التي تقوم بتمثيلها والقيمة لكل عمود وسيقوم البرنامج

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

ميزات الحزمة

هذه الحزمة تتميز بالتالي:

1-المرونة وتتمثل في:

أ-المرونة في الحجم فالحزمة لا تفرض عليك حجم معين وتتمدد على حسب طول أو عرض الائحة panel في برنامجك

ب-المرونة في عدد البيانات التي تستطيع تمثيلها بيانياً

ج-المرونة في إضافة أنواع جديدة من الرسومات البيانية

د-المرونة في تغيير شكل الرسم البياني

2-تدعم الحزمة الـ Unicode

3-يوجد في الحزمة 6 أنواع من الرسومات البيانية

4-تمكنك من إضافة قيم أخرى على الرسم البياني بعد إتمام الرسم

الإصدارة:

0.3Beta1

النسخة تحت التجريب يرجى تجريب الحزمة والإدلاء بآرائكم عليها

الترخيص:

يمكنك نسخ أو توزيع الحزمة بأي شكل تريد بدون أي مقابل ونحتسب ذلك عند الله

يشترط إرفاق هذا الملف عند النشر

تعديلك على الحزمة يلزمك بإرفاق نسخة من التعديل إلى مدونتي الشخصية

صفحة الحزمة

مكنك استخدام الحزمة في أي برامج ربحية أو غير ربحية دون أي مقابل

كيفية الاستخدام:

1-قم بعمل كائن من الفئة AChart

2-قم بعمل كائن من الفئة AChartPanel وليكن اسمه بياني

3-أضف الكائن بياني إلى برنامجك

4-قم بإضافة بيانات جديدة إلى الرسم البياني

يمكنك مراجعة المثال المرفق مع الحزمة

بالإضافة إلى التوثيق الخاص بالبرنامج

إضافات مستقبلية:

1-زيادة الناحية الجمالية للأشكال

2-استكمال الرسم البياني الدائري

3-زيادة التنظيم لأسماء الأعمدة

4-إضافة إمكانية التحكم بنوع الخط وحجمه ولونه في الحزمة

5-إضافة إمكانية استيراد البيانات من ملف xml

6-إضافة إمكانية استيراد البيانات من قاعدة بيانات

7-تصدير الرسم البياني كصورة

معلومات عن المبرمج:

علاء محمد خليل الصالحي

خريج كلية هندسة الحاسوب - الجامعة الإسلامية بغزة

لتحميل الملف المصدري للحزمة بالإضافة إلى الشيفرة

حزمة بياني AChart

أتمنى أن أسمع آراؤكم حول الحزمة

تحياتي

تم تعديل هذه المشاركة بواسطة alaadiaa في 14 يوليو 2008 في 15:13

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

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

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

728x90.png

#2

السلام عليكم

عمل رائع جداً أخي علاء ... و ألف شكر لك على هذا المجهود

أرجو من الله أن يجعله في ميزان حسناتك ..

من بعد إذنك , قمت بإجراء بعض التعديلات على الحزمة .. أرجو أن تنال اعجابك و رضاك ..

التعديل الاساسي هو في إضافة الصف (أو الفئة كما تحب أن تسميها) DataItem و التي تمثل عنصر البيانات المراد إضافته إلى الرسم ..

هذا الصف يجمع بين القيمة و اسم العمود بالإضافة إلى اللون المستخدم عند رسم هذا العنصر ..

و بالتالي استغنينا عن الشعاعين values و names و استبدلناهما بشعاع جديد هو dataItems (عناصره من النمط DataItem )

عند استخدام الحزمة .. لإضافة عنصر جديد نقوم بخلق كائن جديد من النمط DataItem و إضافته إلى الشعاع dataItems الخاص بالرسم البياني

مثلاً سنستخدم

items.addElement(new DataItem(20,"1901",Color.red));

بدلاً من

numbers.add(20);
names.addElement("1901");

الفائدة من التعديل :

1) منع أي أخطاء تنتج من احتمال إعطاء القيم و الأسماء في غير ترتيبها الصحيح (أو عدد القيم أكبر من عدد الأسماء أو العكس)

2) امكانية تحديد لون كل عمود على حدا (أو القطاع في الرسومات الدائرية) حسب رغبة المستخدم .. (سابقاً كل الأعمدة كانت باللون الأسود)

آثار هذا التعديل على الكود :

في الصف AChart

1) الاستغناء عن التابعين addValue و addNameOfColumn

و استبدال التابع addColumn بالتابع الجديد addDataItem (توجد منه 3 نسخ تختلف باختلاف البارامترات)

2) استبدال العبارة

names.elementAt(i)

(عند كل ورود لها)

بالعبارة

dataItems.elementAt(i).getName()

و استبدال العبارة

values.elementAt(i)

بالعبارة

dataItems.elementAt(i).getValue()

3) باني الصف أصبح بالشكل :

AChart(short type , int width , int height ,Vector<DataItem> dataItems)

بدلاً من :

AChart(short type , int width , int height ,Vector<Integer> values ,Vector<String> names )

4) للاختصار قمت بإضافة السطرين التاليين


String name = dataItems.elementAt(i).getName();
Integer value = dataItems.elementAt(i).getValue();

إلى بداية كل كتلة برمجية و من ثم استبدال العبارات dataItems.elementAt(i).getValue بكلمة value

و العبارات dataItems.elementAt(i).getName بالكلمة name

5) إضافة العبارة

g2d.setColor(dataItems.elementAt(i).getColor());

في الأماكن المناسبة .. و غالباً كبديل لـ

g2d.setColor(Color.BLACK);

6) اضافة التابع getMaxValue() الذي يحسب القيمة العليا .. بهدف اختصار الكود ..

كمقترحات للإضافات المستقبلية :

1) اضافة إمكانية إدخال البيانات (القيم و الأسماء) من ملف نصي

2) بناء واجهة بسيطة تتيح إدخال البيانات و استعراض مختلف الرسوم المتاحة ..

3) امكانية حفظ الرسم كصورة (ملف) .. (لا أدري إن كانت هذه الإمكانية قابلة للتحقيق أم لا !؟)

كود النسخة المعدلة :

version0_2Beta.rar

تم تعديل هذه المشاركة بواسطة أبو خالد السوري في 29 أبريل 2008 في 02:09

أبو خالد السوري

#3

السلام عليكم

تحياتي أخ أبو خالد

اليوم كنت في طريقي إلى إصدار v.1beta2

لكن مع تعديلاتك تم إلفاء الإصدار وسنعتمد v.1 كإصدارة رسمية

ونعتمد تعديلك كإصدارة v.2beta

سأعود لأرد عليك رداً مفصلاً

بإذن الله

وسأقوم بوضع آلية لتنسيق عملية التعديل على الشيفرة

لكي نوثق كل خطوة قمنا بها

تحياتي

تم تعديل هذه المشاركة بواسطة alaadiaa في 29 أبريل 2008 في 05:48

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

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

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

728x90.png

#4

السلام عليكم

سنتبع الطريقة التالية في عملية التعديل على الشيفرة

لن نقوم بحذف أي جزء مباشرة

لكن في الإصدارة التي يتم فيها التعديل

سنقوم بإيقاف comment الأجزاء المعدلة

ووضع تعليقات على المقاطع التي تم التعديل عليها

شكل التعليق سيكون كالتالي:

//modefied i vSomeVersion by SomeOne

بالنسبة vSomeVersion فهي تمثل الإصدارة التي حصل فيها التعديل

بالنسبة للرقم i فهو يمثل ترتيب التعديل

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

بالنسبة SomeOne هو الشخص الذي أجرى التعديل

في الإصدارة التي تليها سنحذف جميع التعليقات حتى لا تتراكم التعليقات وتجعل شكل الشيفرة سيئاً

كيفية توثيق التعديلات:

1- العنوان يكون تعديل رقم س

حيث س رقم التعديل

2- العنوان سبب التعديل

يلي ذلك السبب الذي تم من أجله التعديل

إوتنقسم الأسباب إلى:

أ- مشكلة

ب- تحسين الشيفرة

ج- تحسين المنظر العام

3- وهي خطوة تعتمد على سبب التعديل

إن كان السبب مشكلة فسيكون العنوان المشكلة

وإلا تتجاهل هذه الخطوة

4- العنوان الإجراء المتخذ

تحت هذا العنوان نذكر ماهية التعديل الحاصل

مثال على كلامي السابق

التعديلات في الإصدارة v.1beta2

تعديل رقم 1:

سبب التعديل:

مشكلة

المشكلة:

الدالة addColumn كانت عند إضافة عمود جديد

تتأكد من أن السلسلة الخاصة بأسماء الأعمدة

ليس فيها عناصر أكثر من السلسلة الخاصة بقيم الأعمدة أو العكس

في كلا الحالتين كانت تحذف عنصر من السلسلة الأكثر عناصراً

بالطبع يوجد مشكلة في ذلك

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

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

الإجراء المتخذ:

عدلتها لكي تقوم بالتالي

إذا كان عدد العناصر في سلسلة أسماء الأعمدة أكثر من القيم

فستقوم الدالة بحذف العناصر الزائدة من سلسلة الأسماء

أما إذا كانت سلسلة قيم الأعمدة تحتوي على عناصر أكثر

فسأقوم بإضافة عناصر تحتوي على جملة خالية empty string

تعديل رقم 2:

سبب التعديل:

تحسين الشيفرة

الإجراء المتخذ:

قمت بفصل عملية حساب أكبر قيمة في سلسلة القيم المعطاة

عن عملية الرسم

الأحداث المترتبة عل

ترتب على ذلك إضافة الدالة evaluateMaxColumn

تعديل رقم 3:

سبب التعديل:

تحسين المنظر العام

الإجراء المتخذ:

تحسين الألوان بالنسبة للرسم الدائري

قمت بتغيير تدرجات الألوان إلى تدرجات جيدة

ترتب على هذا إضافة الثوابت BLUE RED GREEN

التعديل رقم 4:

سبب التعديل:

تحسين الشيفرة

الإجراء المتخذ:

قمت بحذف الجملتين

th.setDaemon(true);
System.out.println(th.isDaemon());

من فئة ChartTest

لا أعلم سبب وجودهما لكن على ما يبدو أني كنت أجرب شيئاً ما

مثال على الطريقة

حذفت مجموعة جمل في الإصدارة v.1beta2 ورقم الحذف 4 واسمي علاء الصالحي

//modefied 4 v.1beta2 by Alaa AL-Salhi
//th.setDaemon(true);
//System.out.println(th.isDaemon());
//end modefied 1 v.1beta2 by Alaa

هذه الطريقة قابلة للمناقشة والزيادة والحذف

على هذا الأساس قرر أن أنشر الإصدارة v.1beta2 لكي يتضح المفهوم للجميع

أتمنى أن يكون هناك ملاحظات

تحياتي

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

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

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

728x90.png

#5

أخ أبو خالد اطلعت على الشيفرة المعدلة

واعجبني إضافة الفئة الجديدة

هناك مشكلة في موضوع اللون لكل DataItem

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

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

لكي لا نحصل تضادات في الألوان

ما رأيك لو حذفنا موضوع اللون

ونعيده عندما نفصل القطاعات الدائرية عن القطاعات العمودية

تحياتي

تم تعديل هذه المشاركة بواسطة alaadiaa في 29 أبريل 2008 في 11:33

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

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

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

728x90.png

#6

بالنسبة للطريقة التي طرحتها

لتوثيق التعليقات

وجدتها مكلفة

وتأخذ الكثير من الوقت

لهذا سأوقف استعمالها

تحياتي

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

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

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

728x90.png

#7

بالنسبة لاقتراحاتك أخي أبو خالد

الاقتراح الأول

لم أفهم ما المقصود منه

هل تقصد ملف xml إن كان كذلك ففكرة جيدة

الاتراح الثاني

أنا عن نفسي لا أصلح للعمل فيه بتاتاً

بالنسبة للاقتراح الأخير

بصراحة كان لي تجربة مع الحفظ في برنامج الرسام البسيط الذي كتبته

لكن الوضوح لم يكن جيداً سأحاول فيه بإذن الله

تحياتي

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

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

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

728x90.png

#8

السلام عليكم

الاقتراح الأول

كنت أقصد ملف نصي عادي (.txt) يحوي أسماء الأعمدة و القيم ..

في كل سطر قيمة و اسم العمود الموافق لها , مفصول بينهما بفاصلة (أو فاصلة منقوطة أو مسافة .... الخ)

كما في الملف التالي ..

input_data.rar

و يمكن أيضاً القراءة من ملف XML أو حتى من قاعدة بيانات ..

كل هذه الخيارات واردة و ممكنة التحقيق ..

الاقتراح الثاني

أنا لها إن شاء الله ..

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

بالمناسبة هل لديك من جديد حتى أضمنّه في هذه الإصدارة ..

أبو خالد السوري

#9

أنا حالياً متوقف عن التطوير

لأني أعاني من نقص في الوقت

ظروف الامتحانات

آخر ما قمت به أصدرته مع التعديل الخاص بك

في النسخة v.2beta1 في صفحة المدونة خاصتي

http://modonat-alaa.freehostia.com/?p=68

على العموم أظن لا يوجد اعتمادية بين الاقتراحات خاصتك

وبين أي تحديثات قد تحصل على الشيفرة حالياً

بالنسبة للاقتراح الثالث سأحاول العمل عليه بإذن الله

عندما أقضي من امتحاناتي

أعاني من مشكلة في التمثيل الدائري

أحس أن الشكل غير انسيابي

تحياتي

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

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

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

728x90.png

#10

تم إصدار النسخة 0.2beta2

يمكنكم التحميل من مدونتي

وهذا رابط سريع

تضمنت النسخة تعديلات تنظيمية في الأغلب

سأحاول إصدار نسخة تحتم على المستخدم اختيار نوع من الأنواع المطروحة

وعدم إدراج أرقام قد تكون خاطئة

تحياتي

تم تعديل هذه المشاركة بواسطة alaadiaa في 27 مايو 2008 في 08:48

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

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

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

728x90.png

#11

فكرة جميلة جدا ..... سأنتهز أول فرصة و أشارك في الحزمة

شكرا جزيلا

#12

يشرفني أن تشارك في حزمتي المتواضعة

إن شاء الله تكون خلصت جيش

طمنا عليك

تحياتي

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

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

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

728x90.png

#13

قمت بإصدار النسخة v.3beta1

وقد تضمنت التعديلات التالية:

التعديل رقم 1:

سبب التعديل:

تحويل الشيفرة إلى البرمجة الكائنية

الإجراء المتخذ:

قمت باتباع الهيكلية التالية

Achart
	AChartAbstract
		ACircleWithClockWiseChart
		ACircleWithoutClockWiseChart
		AChartBarAbstract
			AUPChart
			ADownChart
			AleftChart
			ARightChart

ملاحظة:الفئات التي تقع على التوازي مع بعضها تكون في نفس المستوى الوراثي

وتكون مشتقة من الفئة التي تسبقها تماماً

التعديل رقم 2:

سبب التعديل:

حل مشكلة الاقتصار على الأشكال المبنية في الحزمة

الإجراء المتخذ:

الآن يمكن للمطور عمل الأشكال البيانية الخاصة به

وإضافتها على الحزمة بسهولة

وبدون الحاجة لإضافة ثوابت جديدة

ولكن يجب أن يكون الشكل البياني الجديد

يتصل مع الفئة AChart بصلة وراثية ما

ويترتب على التعديل:

1- حذف الثوابت المرفقة في الحزمة مثل UP_CHART

2- تغيير صانع الكائنات ليأخذ بدلاً من short type ليأخذ AChart chartObject

التعديل رقم 3:

سبب التعديل:

تحسين المنظر العام

الإجراء المتخذ:

تغيير الواجهة الخاصة بالبرنامج -ChartTest-بحيث تقوم بالتبديل بين الأشكال المدمجة في الحزمة

التعديل رقم 4:

سبب التعديل:

التحديث التلقائي

الإجراء المتخذ:

تم حذف الجملتين التاليتين

سيتم تحديث الشكل البياني في أي حالة من الحالات التالية

1- إضافة عنصر جديد على الرسم البياني(موجودة سابقاً)

2- تغيير الشكل المستخدم في الرسم البياني مثلاً من أعمدة إلى صفوف

3- تغيير طول أو عرض اللائحة

غالب التعديلات في هذه النسخة لها علاقة بالبرمجة الكائنية وحلولها

وهذه وصلة لموضوع الحزمة في مدونتي

تحياتي

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

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

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

728x90.png

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