• 0
rohaili

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

سؤال

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

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

أولا : أضف 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
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

6 إجابة على هذا السؤال .

  • 0

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

تحياتي

تم تعديل بواسطه علاء الصالحي
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

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

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

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

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

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

مثال converttoarabicnumber

تصبح convertToArabicNumber

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

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

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

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

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

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

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

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

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

تحياتي

0

شارك هذا الرد


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

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

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

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

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

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

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

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

مثال converttoarabicnumber

تصبح convertToArabicNumber

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

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

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

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

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

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

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

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

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

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

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

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

تحياتي

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

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

تم تعديل بواسطه rohaili
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

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

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

تحياتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .