مشروع انشاء ساعة ذات عقارب بالجافا
منتدى مصر التقني :: قسم لغات البرمجة Programming languages :: لغة الجافا Java :: مشاريع مفتوحة المصدر Java App
صفحة 1 من اصل 1 • شاطر
مشروع انشاء ساعة ذات عقارب بالجافا
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
تحية طيبة للاخوان والاعظاء في منتدى مصر التقني
في موضوع سابق طرحة الاخ والاستاذ احمد عن انشاء ساعة رقمية وكان الموضوع مشوق فاحببت ان اضيف القليل لهذا المنتدى المميز
موضوعنا اليوم انشاء الله هو مشروع انشاء ساعة ذات عقارب عن طريق الجافا
سوف يكون المشروع عن طريق الاكواد البرمجية فقط بدون استخدام الواجهات الرسومية
واذا صعب الشرح او التطبيق على احد ويريد شرح لانشاء المشروع بالواجهه الرسومية فليس لدي مانع فقط اخبروني وسوف اطرح موضوع لنفس المشروع ولاكن عن طريق الواجهه الرسومية
نبدا أولا بجلب المكتبات الازمة لمشروعنا :
ومن ثم ننشئ الكلاس الرئيسي والذي سيكون بداخلة الشفرة لواجهة التطبيق ويتم توريثة من الفورم (JApplet)
لم اضع الشفرة بعد في الكلاس السابق حتى يتسنى فهم الموضوع وسنعود للكلاس الرئيسي في اخر الموضوع لنضع الشفرة الخاصة بالواجهه
سوف ننشئ هنا كلاس اخر خارج الكلاس الخاص بالفورم ويتم توريثة من (JPanel) ويحقق الواجهه (ActionListener)
سيكون بالشكل التالي :
بداخل الكلاس سنقوم بتعريف دورانات الساعة والدقائق والثواني عن طرق (AffineTransform)
بعد ذلك سنقوم بانشاء الدالة او الميثود البانية (الكنستراكتر) للكلاس
بداخل الدالة البانية حددنا حجم البانل ولون البانل
ومن ثم قمنا بانشاء غرض التايمر (Timer) حيث أن الدالة أو الميثود البانية (ClockPanel) تستخدم كمراقب للحدث ويهيئ الغرض (Timer) بفترة قدرها 500 ميلي ثانية
وسنستخدم الصف (Calendar) للحصول على توقيت النظام الحالي وتهيئة الدورانات الثلاثة بالزوايا المناسبة
بعد انشاء الدالة السابقة سوف نقوم برسم وجه الساعة والعقارب الثلاثة
سنقوم بانشاء طريقة (paintComponent) او كما يحلو لك الاسم
لاحظ اننا اضفنا بارمتر للطريقة ويمثل الجرافيك (Graphics)
سنبدا خطوة خطوة لشرح الكود السابق
حيث قمنا بضرب 2 في (Math.PI) قسمة 12 وبذلك سيتم تقسيم الدائرة الى قسمين بخط مائل وهمي وتوزيع الرقم 12 على القسمين وبالتالي سيصبح 6 مقابل 6
لو غيرنا الرقم 2 الى 1 سيكون القسم واحد فقط وستجد 12 جميعها في جهه واحدة والمقابل فارغ
الان سنقوم بانشاء الحدث (actionPerformed)
ويتم تهيئة الدورانات الثلاثة وبعد ذلك يتم استدعاء الطريقة (repaint) لتحديث الإظهار
الان سنعود للكلاس الرئيسي في اول الموضوع لنضيف اليه الشفرة الخاصة بالفورم وسيكون بالشكل التالي :
وهنا الكود كاملاً
انا على يقين بان هناك من هو افضل مني مستوى في لغة الجافا في منتداكم الراقي فلو وجدتم اي ملاحظة في الشرح ارجو تنبيهي وتنبيه الاعظاء
في الختام اتمنى ان يكون الموضوع مفيد وارجو ان يكون الشرح واضح فان احسنت فمن الله وان اخطأت فمني والشيطان
كما اتمنى ان ينال الموضوع استحسانكم واعجابكم
السلام عليكم ورحمة الله وبركاته
تحية طيبة للاخوان والاعظاء في منتدى مصر التقني
في موضوع سابق طرحة الاخ والاستاذ احمد عن انشاء ساعة رقمية وكان الموضوع مشوق فاحببت ان اضيف القليل لهذا المنتدى المميز
موضوعنا اليوم انشاء الله هو مشروع انشاء ساعة ذات عقارب عن طريق الجافا
سوف يكون المشروع عن طريق الاكواد البرمجية فقط بدون استخدام الواجهات الرسومية
واذا صعب الشرح او التطبيق على احد ويريد شرح لانشاء المشروع بالواجهه الرسومية فليس لدي مانع فقط اخبروني وسوف اطرح موضوع لنفس المشروع ولاكن عن طريق الواجهه الرسومية
نبدا أولا بجلب المكتبات الازمة لمشروعنا :
- الكود:
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import java.util.Calendar;
import javax.swing.*;
ومن ثم ننشئ الكلاس الرئيسي والذي سيكون بداخلة الشفرة لواجهة التطبيق ويتم توريثة من الفورم (JApplet)
- الكود:
public class Clock2D extends JApplet {
public void init() {
}
}
لم اضع الشفرة بعد في الكلاس السابق حتى يتسنى فهم الموضوع وسنعود للكلاس الرئيسي في اخر الموضوع لنضع الشفرة الخاصة بالواجهه
سوف ننشئ هنا كلاس اخر خارج الكلاس الخاص بالفورم ويتم توريثة من (JPanel) ويحقق الواجهه (ActionListener)
سيكون بالشكل التالي :
- الكود:
class ClockPanel extends JPanel implements ActionListener{
}
بداخل الكلاس سنقوم بتعريف دورانات الساعة والدقائق والثواني عن طرق (AffineTransform)
- الكود:
AffineTransform rotH = new AffineTransform();
AffineTransform rotM = new AffineTransform();
AffineTransform rotS = new AffineTransform();
بعد ذلك سنقوم بانشاء الدالة او الميثود البانية (الكنستراكتر) للكلاس
- الكود:
public ClockPanel() {
setPreferredSize(new Dimension(640, 480));
setBackground(Color.white);
Timer timer = new Timer(500, this);
timer.start();
}
بداخل الدالة البانية حددنا حجم البانل ولون البانل
ومن ثم قمنا بانشاء غرض التايمر (Timer) حيث أن الدالة أو الميثود البانية (ClockPanel) تستخدم كمراقب للحدث ويهيئ الغرض (Timer) بفترة قدرها 500 ميلي ثانية
وسنستخدم الصف (Calendar) للحصول على توقيت النظام الحالي وتهيئة الدورانات الثلاثة بالزوايا المناسبة
بعد انشاء الدالة السابقة سوف نقوم برسم وجه الساعة والعقارب الثلاثة
سنقوم بانشاء طريقة (paintComponent) او كما يحلو لك الاسم
- الكود:
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.translate(320,240);
// clock face
Paint paint = new GradientPaint(-50,-50,Color.white,450,450,Color.gray);
g2.setPaint(paint);
g2.fillOval(-190, -190, 380, 380);
g2.setColor(Color.gray);
g2.drawString("Clock", -20, 80);
Stroke stroke = new BasicStroke(3);
g2.setStroke(stroke);
g2.drawOval(-190, -190, 380, 380);
for (int i = 0; i < 12; i++) {
g2.rotate(2*Math.PI/12);
g2.fill3DRect(-3, -180, 6, 30, true);
}
// clock hands
Shape hour = new Line2D.Double(0, 0, 0, -80);
hour = rotH.createTransformedShape(hour);
Shape minute = new Line2D.Double(0, 0, 0, -120);
minute = rotM.createTransformedShape(minute);
Shape second = new Line2D.Double(0, 0, 0, -120);
second = rotS.createTransformedShape(second);
g2.setColor(Color.black);
g2.setStroke(new BasicStroke(5, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
g2.draw(hour);
g2.draw(minute);
g2.setStroke(new BasicStroke(2));
g2.draw(second);
}
لاحظ اننا اضفنا بارمتر للطريقة ويمثل الجرافيك (Graphics)
سنبدا خطوة خطوة لشرح الكود السابق
- الكود:
Graphics2D g2 = (Graphics2D)g;
g2.translate(320,240);
- الكود:
Paint paint = new GradientPaint(-50,-50,Color.white,450,450,Color.gray);
g2.setPaint(paint);
- الكود:
g2.fillOval(-190, -190, 380, 380);
g2.setColor(Color.gray);
g2.drawString("Clock", -20, 80);
Stroke stroke = new BasicStroke(3);
g2.setStroke(stroke);
g2.drawOval(-190, -190, 380, 380);
- الكود:
for (int i = 0; i < 12; i++) {
g2.rotate(2*Math.PI/12);
g2.fill3DRect(-3, -180, 6, 30, true);
حيث قمنا بضرب 2 في (Math.PI) قسمة 12 وبذلك سيتم تقسيم الدائرة الى قسمين بخط مائل وهمي وتوزيع الرقم 12 على القسمين وبالتالي سيصبح 6 مقابل 6
لو غيرنا الرقم 2 الى 1 سيكون القسم واحد فقط وستجد 12 جميعها في جهه واحدة والمقابل فارغ
- الكود:
Shape hour = new Line2D.Double(0, 0, 0, -80);
hour = rotH.createTransformedShape(hour);
Shape minute = new Line2D.Double(0, 0, 0, -120);
minute = rotM.createTransformedShape(minute);
Shape second = new Line2D.Double(0, 0, 0, -120);
second = rotS.createTransformedShape(second);
g2.setColor(Color.black);
g2.setStroke(new BasicStroke(5, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
g2.draw(hour);
g2.draw(minute);
g2.setStroke(new BasicStroke(2));
g2.draw(second);
الان سنقوم بانشاء الحدث (actionPerformed)
- الكود:
public void actionPerformed(ActionEvent e) {
int hour = Calendar.getInstance().get(Calendar.HOUR);
int min = Calendar.getInstance().get(Calendar.MINUTE);
int sec = Calendar.getInstance().get(Calendar.SECOND);
rotH.setToRotation(Math.PI * (hour+min/60.0)/6.0);
rotM.setToRotation(Math.PI * min /30.0);
rotS.setToRotation(Math.PI * sec /30.0);
repaint();
}
ويتم تهيئة الدورانات الثلاثة وبعد ذلك يتم استدعاء الطريقة (repaint) لتحديث الإظهار
الان سنعود للكلاس الرئيسي في اول الموضوع لنضيف اليه الشفرة الخاصة بالفورم وسيكون بالشكل التالي :
- الكود:
public class Clock2D extends JApplet {
public static void main(String s[]) {
JFrame frame = new JFrame();
frame.setTitle("Clock");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JApplet applet = new Clock2D();
applet.init();
frame.getContentPane().add(applet);
frame.pack();
frame.setVisible(true);
}
public void init() {
JPanel panel = new ClockPanel();
getContentPane().add(panel);
}
}
وهنا الكود كاملاً
- الكود:
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import java.util.Calendar;
import javax.swing.*;
public class Clock2D extends JApplet {
public static void main(String s[]) {
JFrame frame = new JFrame();
frame.setTitle("Clock");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JApplet applet = new Clock2D();
applet.init();
frame.getContentPane().add(applet);
frame.pack();
frame.setVisible(true);
}
public void init() {
JPanel panel = new ClockPanel();
getContentPane().add(panel);
}
}
class ClockPanel extends JPanel implements ActionListener{
AffineTransform rotH = new AffineTransform();
AffineTransform rotM = new AffineTransform();
AffineTransform rotS = new AffineTransform();
public ClockPanel() {
setPreferredSize(new Dimension(640, 480));
setBackground(Color.white);
Timer timer = new Timer(500, this);
timer.start();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.translate(320,240);
// clock face
Paint paint = new GradientPaint(-50,-50,Color.white,450,450,Color.GREEN);
g2.setPaint(paint);
g2.fillOval(-190, -190, 380, 380);
g2.setColor(Color.gray);
g2.drawString("Clock", -20, 80);
Stroke stroke = new BasicStroke(3);
g2.setStroke(stroke);
g2.drawOval(-190, -190, 380, 380);
for (int i = 0; i < 12; i++) {
g2.rotate(2*Math.PI/12);
g2.fill3DRect(-3, -180, 6, 30, true);
}
// clock hands
Shape hour = new Line2D.Double(0, 0, 0, -80);
hour = rotH.createTransformedShape(hour);
Shape minute = new Line2D.Double(0, 0, 0, -120);
minute = rotM.createTransformedShape(minute);
Shape second = new Line2D.Double(0, 0, 0, -120);
second = rotS.createTransformedShape(second);
g2.setColor(Color.black);
g2.setStroke(new BasicStroke(5, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
g2.draw(hour);
g2.draw(minute);
g2.setStroke(new BasicStroke(2));
g2.draw(second);
}
public void actionPerformed(ActionEvent e) {
int hour = Calendar.getInstance().get(Calendar.HOUR);
int min = Calendar.getInstance().get(Calendar.MINUTE);
int sec = Calendar.getInstance().get(Calendar.SECOND);
rotH.setToRotation(Math.PI * (hour+min/60.0)/6.0);
rotM.setToRotation(Math.PI * min /30.0);
rotS.setToRotation(Math.PI * sec /30.0);
repaint();
}
}
انا على يقين بان هناك من هو افضل مني مستوى في لغة الجافا في منتداكم الراقي فلو وجدتم اي ملاحظة في الشرح ارجو تنبيهي وتنبيه الاعظاء
في الختام اتمنى ان يكون الموضوع مفيد وارجو ان يكون الشرح واضح فان احسنت فمن الله وان اخطأت فمني والشيطان
كما اتمنى ان ينال الموضوع استحسانكم واعجابكم
abunwaaf- ..
- تاريخ التسجيل : 01/01/2014
المساهمات : 15
النقاط : 26
التقيم : 3
الدولة :
الجنس :
رد: مشروع انشاء ساعة ذات عقارب بالجافا
ما شاء الله عليك ....جارى التجربة
Solutions1- ..
- تاريخ التسجيل : 31/08/2013
المساهمات : 22
النقاط : 30
التقيم : 0
الدولة :
الجنس :
رد: مشروع انشاء ساعة ذات عقارب بالجافا
انا على يقين بان هناك من هو افضل مني مستوى في لغة الجافا في منتداكم الراقي فلو وجدتم اي ملاحظة في الشرح ارجو تنبيهي وتنبيه الاعظاء
والله يا اخى الكريم لسنا افضل منك ولا شىء كل ما هنالك اننا لدينا مواضيع كثيرة فقط بالمنتدى لذلك ربما تعتقد هذا الاعتقاد الخاطىء عنا
و اشكرك على مجهودك و شرحك الاكثر من رائع ....جزاكم الله خيرا
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
رد: مشروع انشاء ساعة ذات عقارب بالجافا
الكود لا يعمل .....ليس به دالة رئيسية
مدونة وليدوف التطويرية- ...
- تاريخ التسجيل : 22/11/2011
المساهمات : 32
النقاط : 48
التقيم : 4
الدولة :
الجنس :
رد: مشروع انشاء ساعة ذات عقارب بالجافا
يعمل اخي العزيز بشكل سليم والدالة الرئيسية هو الكلاس الاول المسمى (Clock2D)مدونة وليدوف التطويرية كتب:الكود لا يعمل .....ليس به دالة رئيسية
وبداخلها اكواد واجهة التطبيق
اذا احتجت شرح اكثر اعلمني برسائل الخطأ لديك
واشكر لك مرورك
abunwaaf- ..
- تاريخ التسجيل : 01/01/2014
المساهمات : 15
النقاط : 26
التقيم : 3
الدولة :
الجنس :
رد: مشروع انشاء ساعة ذات عقارب بالجافا
ساوضح الطريقة اكثر
قم بانشاء مشروع جديد مع التأكد من ازالة علامة الصح من مربع الكلاس Main
ثم قم بانشاء كلاس جديد وقم بتسميته Clock2D
بعد ذلك امسح الكود بداخل الكلاس الذي انشاته ثم قم بنسخ الكود كاملا في اخر الموضوع ولصقة بداخل الكلاس
قم بتجربة المشروع وسيعمل معك باذن الله
صورة من المشروع
قم بانشاء مشروع جديد مع التأكد من ازالة علامة الصح من مربع الكلاس Main
ثم قم بانشاء كلاس جديد وقم بتسميته Clock2D
بعد ذلك امسح الكود بداخل الكلاس الذي انشاته ثم قم بنسخ الكود كاملا في اخر الموضوع ولصقة بداخل الكلاس
قم بتجربة المشروع وسيعمل معك باذن الله
صورة من المشروع
abunwaaf- ..
- تاريخ التسجيل : 01/01/2014
المساهمات : 15
النقاط : 26
التقيم : 3
الدولة :
الجنس :
Solutions1- ..
- تاريخ التسجيل : 31/08/2013
المساهمات : 22
النقاط : 30
التقيم : 0
الدولة :
الجنس :
رد: مشروع انشاء ساعة ذات عقارب بالجافا
اشكرك على التوضيح اخى ..
مدونة وليدوف التطويرية- ...
- تاريخ التسجيل : 22/11/2011
المساهمات : 32
النقاط : 48
التقيم : 4
الدولة :
الجنس :
| |
منتدى مصر التقني :: قسم لغات البرمجة Programming languages :: لغة الجافا Java :: مشاريع مفتوحة المصدر Java App
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى
أمس في 7:09 pm من طرف moslema_r
» شركة تنظيف فرشات بالرياض
الثلاثاء مارس 26, 2024 6:26 pm من طرف moslema_r
» شركة تنظيف استراحات بالرياض
الأحد مارس 24, 2024 10:49 pm من طرف moslema_r
» كشف تسربات المياه في جدة
السبت مارس 23, 2024 7:23 pm من طرف gmalnagy
» خدمات كشف تسربات المياه بخصم 25% - اتصل الان
السبت مارس 23, 2024 7:22 pm من طرف gmalnagy
» شركة تنظيف ثريات بالرياض
الخميس مارس 21, 2024 7:23 pm من طرف moslema_r
» كهربائي منازل بالرياض
الأحد مارس 17, 2024 1:52 pm من طرف رانيا حماد
» افضل شركة نقل عفش بالرياض نقل باكستاني 40% خصم | موقع الانوار
الأحد مارس 17, 2024 1:25 pm من طرف رانيا حماد
» افضل معلم جبس بالرياض تركيب جبس بورد بالرياض 20% خصم اتصل الآن
الأحد مارس 17, 2024 1:09 pm من طرف رانيا حماد
» شراء اثاث مستعمل بالكويت بخصم 30%
الأحد مارس 17, 2024 12:54 pm من طرف رانيا حماد