شارك المقالة

تعلم رسم نقطة في Java باستخدام Graphics وSwing من خلال مثال كامل يعمل داخل نافذة JFrame. سنرسم النقطة في موضع محدد، ثم نوضح كيف تجعل موقعها عشوائيًا، ولماذا نستخدم paintComponent بدل الرسم مباشرة على النافذة. هذا الدرس مناسب لمن يعرف أساسيات الأصناف والكائنات في Java.

ما الفرق بين النقطة والخط؟

لا توفر واجهة Graphics دالة باسم drawPoint. يمكن تمثيل النقطة الصغيرة بدائرة مملوءة باستخدام fillOval(x, y, width, height)، بحيث تكون قيمة العرض والارتفاع صغيرة مثل 6 بكسلات. أما drawLine(x, y, x, y) فيرسم نقطة عمليًا في بعض الحالات، لكن الدائرة المملوءة أوضح ويمكن التحكم في حجمها ولونها بسهولة.

كود رسم نقطة في نافذة Java

أنشئ ملفًا باسم DrawPoint.java وانسخ المثال التالي. يرسم البرنامج نقطة حمراء عند إحداثيات محددة داخل لوحة Swing:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class DrawPoint {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            JFrame frame = new JFrame("رسم نقطة في Java");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(new PointPanel());
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        });
    }

    private static class PointPanel extends JPanel {
        PointPanel() {
            setPreferredSize(new Dimension(400, 300));
            setBackground(Color.WHITE);
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.setColor(Color.RED);
            g.fillOval(195, 145, 10, 10);
        }
    }
}

شرح طريقة الرسم

تبدأ نافذة البرنامج داخل SwingUtilities.invokeLater حتى تُنشأ عناصر Swing على مسار واجهة المستخدم المخصص. يحدد JFrame النافذة، بينما تمثل PointPanel مساحة الرسم. حددنا أبعاد اللوحة بـ 400×300 بكسل ولون خلفيتها بالأبيض.

تستدعي Swing الدالة paintComponent عند الحاجة إلى رسم اللوحة. استدعاء super.paintComponent(g) أولًا يمسح الرسم السابق ويرسم الخلفية. بعد ذلك يغير setColor لون الرسم إلى الأحمر، ثم يرسم fillOval دائرة عرضها وارتفاعها 10 بكسلات. يقع مركزها تقريبًا عند (200، 150)، أي قرب منتصف اللوحة.

تغيير مكان النقطة أو لونها

في fillOval(x, y, width, height) تمثل x المسافة من يسار اللوحة وy المسافة من أعلاها. غيّر أول رقمين لتحريك النقطة، وغيّر الرقمين الأخيرين لتكبيرها أو تصغيرها. يمكنك تجربة Color.BLUE أو Color.GREEN بدل اللون الأحمر. تذكر أن الإحداثيات تبدأ من (0، 0) في الزاوية العلوية اليسرى.

لرسم نقطة في موضع عشوائي، أنشئ قيمتي x وy قبل الرسم، مع تقييدهما بأبعاد اللوحة ناقص حجم النقطة؛ مثال ذلك: int x = random.nextInt(Math.max(1, getWidth() - 10));. ضع القيم في حقول للكائن عند الحاجة لإعادة الرسم، ثم استدعِ repaint() لتطلب من Swing الرسم مجددًا. لا تستدعِ paintComponent بنفسك؛ دع إطار Swing يدير عملية الرسم.

ترجمة البرنامج وتشغيله

تأكد أن اسم الملف هو DrawPoint.java، ثم افتح الطرفية في مجلد الملف ونفذ javac DrawPoint.java وبعد نجاح الترجمة نفذ java DrawPoint. يجب تثبيت JDK، لا JRE فقط، حتى يتوفر مترجم javac. ستظهر نافذة بيضاء وبداخلها نقطة حمراء قرب المنتصف.

أخطاء شائعة عند الرسم في Java

  • الرسم داخل paint في JFrame مباشرة قد يسبب اختفاء الرسم عند تحديث النافذة؛ استخدم لوحة JPanel وأعد تعريف paintComponent.
  • نسيان super.paintComponent(g) قد يترك آثار الرسومات القديمة أو الخلفية غير محدثة.
  • إذا لم تظهر النقطة، تأكد أن إحداثياتها داخل أبعاد اللوحة وأن العرض والارتفاع أكبر من صفر.
  • يجب أن يطابق اسم الملف اسم الصنف العام، بما في ذلك الأحرف الكبيرة والصغيرة.

تدرب على أمثلة Java أخرى

بعد تجربة الرسم، راجع شرح حساب مساحة الدائرة بلغة Java للتدرب على المتغيرات والعمليات الحسابية، ثم تعلّم إنشاء قائمة خيارات Java باستخدام switch وScanner للتعامل مع إدخال المستخدم. احتفظ بكل مثال في ملف مستقل باسم الصنف العام.

شاهد أيضًا
مقالات ذات صلة
🚫 مانع الإعلانات مفعل

يجب إيقاف مانع الإعلانات لاستكمال تصفح الموقع