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

شرح : مشروع مسطرة بأرقام عربية وبوحدة السنتيمتر

بدأه rohaili في 1 يونيو 2009 · 6 رد · 2,756 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

أولا : أضف class المسطرة التالي إلى مشروعك .

package rohailiroler;

import java.awt.Graphics;
import java.awt.font.NumericShaper;
import java.awt.Toolkit;

public class ruler extends javax.swing.JPanel {

	public ruler() {
		this.setBackground(java.awt.Color.WHITE);
		shaper = NumericShaper.getShaper(NumericShaper.ARABIC);
	}

	public int getresdpcm(){

		//دقة الشاشة ( عدد النقاط في البوصة )
		int resdpi = Toolkit.getDefaultToolkit().getScreenResolution();

		//حساب عدد النقاط في السنتيمتر
		int resdpcm = (int) (resdpi / 2.54);

		return resdpcm;
	}

	private String converttoarabicnumber(String s){

		//بناء مصفوفة حروف مكونة من طول النص s
		char[] a = new char[s.length()];

		//وضع حروف (أرقام) النص s في المصفوفة a
		s.getChars(0, s.length(), a, 0);

		//تحويل الأرقام من الشكل الإنجليزي إلى الشكل العربي
		shaper.shape(a, 0, a.length);

		return new String(a);
	}

	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);

		int resdpcm = this.getresdpcm();

		int i = 1;
		//رسم الشرطات وكتابة الأرقام حتى الوصول إلى نهاية اللوحة jpanel باستخدام الشرط التالي
		while (this.getWidth() - resdpcm * i > 0){

			//رسم شرطات المسطرة من اليمين لليسار
			g.drawLine(this.getWidth() - resdpcm * i, 0, this.getWidth() - resdpcm * i, resdpcm / 2);

			//تحويل أرقام المسطرة إلى نص en
			String en = new Integer(i).toString();

			//تحويل الأرقام الإنجليزية إلى عربية باستخدام الدالة converttoarabicnumber
			String ar = this.converttoarabicnumber(en);

			//كتابة أرقام المسطرة
			g.drawString(ar, this.getWidth() - resdpcm * i, resdpcm);

			i++;
		}

	}
	private NumericShaper shaper;
}

ثانيا : أنشئ كائن من class المسطرة كالتالي ثم إضافته إلى شمال اللوحة mainPanel ذات التخطيط BorderLayout .

mainPanel.setLayout(new java.awt.BorderLayout());
ruler r = new ruler();

//اختيار الحجم المفضل للمسطرة بحيث يكون ارتفاعها واحد سنتيمتر
//أما العرض وضعته صفر لأنه غير مهم لأن BorderLayout سوف تمدد المسطرة إلى نهاية mainPanel
r.setPreferredSize(new java.awt.Dimension(0, r.getresdpcm()));

mainPanel.add(r, java.awt.BorderLayout.NORTH);

تم تعديل هذه المشاركة بواسطة rohaili في 1 يونيو 2009 في 07:47

300_130.gif

#2

جزاك الله خيرا عنا

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

الايميل غير صحيح

يرجى تصحيح الايميل برسالة لأحد مدراء المنتدى

#3

فكرة جميلة جداً

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

تحياتي

تم تعديل هذه المشاركة بواسطة علاء الصالحي في 1 يونيو 2009 في 09:55

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

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

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

728x90.png

#4

بما أن المشاركة جيدة رأيت أنك تستحق العودة وكتابة بعض التعليقات السخيفة :lol:

لماذا قسمت على هذا الرقم 2.54؟

يبدو لي أنك تحول من انش إلى سم

هل بوصة == إنش ؟

عندي بعض تعليقات على طريقة كتابتك للبرامج

1- حاول اتباع التقليد الخاص بجافا مثل الحرف الأول حرف كبير في اسم الفئة والحرف الأول حرف صغير في اسم الدالة

ثم الحرف الأول كبير في باقي الكلمات في اسم الدالة واسم الفئة

مثال converttoarabicnumber

تصبح convertToArabicNumber

2- لا تكتب أي أرقام في الشيفرة الخاصة بك

وإن كان لديك رقم ثابت عرفه كثابت في أعلى الشيفرة

3- لا تكرر أي شيفرة كانت حتى لو كانت بسيطة جداً

مثال من الشيفرة استخدمت this.getWidth() - resdpcm * i أكثر من مرة

لهذا استخدم متغير يحتوي هذه القيمة

على كل حال ما رأيك أن نقوم بتحويلها إلى شيء أعقد قليلاً

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

أقصد مثلاُ عندما تضغط على المسطرة تقوم برسم خط مقطع يساعدك في تنسيق النص الخاص بك

هل الفكرة واضحة؟؟؟

تحياتي

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

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

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

728x90.png

#5
علاء الصالحي كتب:
بما أن المشاركة جيدة رأيت أنك تستحق العودة وكتابة بعض التعليقات السخيفة :lol:

لماذا قسمت على هذا الرقم 2.54؟

يبدو لي أنك تحول من انش إلى سم

هل بوصة == إنش ؟

نعم البوصة هي ال inch .

علاء الصالحي كتب:
عندي بعض تعليقات على طريقة كتابتك للبرامج

1- حاول اتباع التقليد الخاص بجافا مثل الحرف الأول حرف كبير في اسم الفئة والحرف الأول حرف صغير في اسم الدالة

ثم الحرف الأول كبير في باقي الكلمات في اسم الدالة واسم الفئة

مثال converttoarabicnumber

تصبح convertToArabicNumber

جزاك الله خيرا على هذه الملاحظة ، وإن كنت قد تركتها عن قصد فلأني لا أهتم بالشكليات وهذه هي طريقتي في كل مشاريعي .

علاء الصالحي كتب:
2- لا تكتب أي أرقام في الشيفرة الخاصة بك

وإن كان لديك رقم ثابت عرفه كثابت في أعلى الشيفرة

جزاك الله خيرا على هذه الملاحظة أيضا ، والسبب أيضا هو أني لا أهتم بالشكل قدر إهتمامي بالمضمون ، ولأجل السرعة .

علاء الصالحي كتب:
3- لا تكرر أي شيفرة كانت حتى لو كانت بسيطة جداً

مثال من الشيفرة استخدمت this.getWidth() - resdpcm * i أكثر من مرة

لهذا استخدم متغير يحتوي هذه القيمة

الأمر السابق تكرر مرتين فقط داخل while ولم يكن هذا سبب كاف لدي لكي أضعها في متغير ، وقد وردت مرة واحدة كشرط في while ولم يكن هناك بد من استخدامها كما هي .

علاء الصالحي كتب:
على كل حال ما رأيك أن نقوم بتحويلها إلى شيء أعقد قليلاً

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

أقصد مثلاُ عندما تضغط على المسطرة تقوم برسم خط مقطع يساعدك في تنسيق النص الخاص بك

هل الفكرة واضحة؟؟؟

تحياتي

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

جزاك الله خيرا .

تم تعديل هذه المشاركة بواسطة rohaili في 3 يونيو 2009 في 14:19

300_130.gif

#6

جزاك الله خيرا عنا

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

#7

مممممممممممم

تأكد أنك ستغير رأيك في أقرب فرصة

عندما تحاول تعديل أحد هذه الشيفرات وتجد أنك غير قادر على فهم الشيفرة

أتمنى لك التوفيق

تحياتي

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

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

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

728x90.png

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