شارك المقالة

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

ما الأدوات المستخدمة لرسم خط في Java؟

تتولى JFrame إنشاء نافذة التطبيق، بينما يرسم JPanel المحتوى داخلها. نعيد تعريف الدالة paintComponent في اللوحة ونستخدم الكائن Graphics الذي توفره Swing. من المهم استدعاء super.paintComponent(g) أولًا حتى تمسح Swing الرسم القديم وتعيد رسم الخلفية بالطريقة الصحيحة عند تحديث النافذة أو تحريكها. لا ترسم مباشرة على JFrame ولا تستدعِ paintComponent بنفسك؛ ضع الرسم داخل JPanel واترك نظام Swing يدير إعادة الرسم.

كود Java كامل لرسم خط

أنشئ ملفًا باسم LineDrawing.java، ثم انسخ المثال التالي. يفتح البرنامج نافذة بيضاء ويرسم خطًا أزرق مائلًا بسماكة ثلاثة بكسلات:

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

public class LineDrawing {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            JFrame frame = new JFrame("رسم خط في Java");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setContentPane(new DrawingPanel());
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        });
    }

    static class DrawingPanel extends JPanel {
        DrawingPanel() {
            setPreferredSize(new java.awt.Dimension(500, 350));
            setBackground(Color.WHITE);
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D) g.create();
            try {
                g2.setColor(new Color(30, 100, 220));
                g2.setStroke(new BasicStroke(3));
                g2.drawLine(60, 70, 400, 250);
            } finally {
                g2.dispose();
            }
        }
    }
}

فهم إحداثيات drawLine

تأخذ الدالة drawLine أربعة أعداد بالترتيب: x1 وy1 لنقطة البداية، ثم x2 وy2 لنقطة النهاية. يبدأ نظام الإحداثيات في أعلى يسار اللوحة؛ تزداد قيمة x باتجاه اليمين وتزداد y باتجاه الأسفل. لذلك يرسم drawLine(60, 70, 400, 250) خطًا يبدأ قرب أعلى اليسار وينتهي إلى اليمين والأسفل. إذا عكست النقطتين سيبقى شكل الخط نفسه، لكن اتجاه تعريفه سيتغير.

لرسم خط أفقي اجعل قيمتي y متساويتين، مثل drawLine(40, 100, 300, 100). ولرسم خط عمودي اجعل قيمتي x متساويتين، مثل drawLine(160, 40, 160, 280). أما الخط المائل فينتج عندما تختلف قيمتا x وy معًا. يمكنك استدعاء drawLine أكثر من مرة لرسم شبكة أو محاور إحداثيات، مع تغيير اللون قبل كل استدعاء.

تغيير اللون والسماكة وجودة الرسم

يحدد setColor لون الخط قبل الرسم، ويمكن استعمال ألوان Color الجاهزة مثل Color.RED أو إنشاء لون بقيم RGB. حوّل Graphics إلى Graphics2D لاستخدام setStroke وتحديد سماكة الخط عبر BasicStroke. الكائن Graphics2D في المثال نسخة منفصلة أنشأناها عبر create ثم أغلقناها في finally باستخدام dispose؛ ذلك يمنع إعدادات اللون والسماكة من التأثير في رسومات أخرى. ويمكن تفعيل تنعيم الحواف باستخدام RenderingHints عند الحاجة لتحسين مظهر الخطوط المائلة.

تشغيل البرنامج وتحديث الرسم

من سطر الأوامر شغّل javac LineDrawing.java ثم java LineDrawing، أو استخدم زر التشغيل في بيئة التطوير بعد التأكد أن اسم الملف يطابق اسم الصنف العام. يبدأ Swing التطبيق داخل SwingUtilities.invokeLater للحفاظ على سلامة واجهة المستخدم. إذا غيرت بيانات الرسم بعد فتح النافذة، استدعِ repaint() على اللوحة كي تطلب من Swing إعادة الرسم؛ لا تستدعِ paintComponent يدويًا.

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

  • ظهور نافذة فارغة: تحقق من وضع drawLine داخل paintComponent ومن إضافة اللوحة إلى الإطار عبر setContentPane.
  • اختفاء الرسم بعد تحريك النافذة: يحدث غالبًا عند الرسم خارج paintComponent؛ انقل أوامر الرسم إلى الدالة المعاد تعريفها.
  • عدم ظهور الخط: افحص الإحداثيات لتكون داخل مساحة اللوحة، واختر لونًا واضحًا يختلف عن الخلفية.
  • صغر مساحة النافذة أو قص الخط: حدد الحجم المفضل للوحة عبر setPreferredSize واستخدم pack بدل قياسات عشوائية للإطار.
  • خط رفيع جدًا: استعمل Graphics2D وBasicStroke مع سماكة مناسبة، وتأكد من ضبطها قبل drawLine.

أفكار للتدريب والتطوير

جرّب إضافة حقول تسمح للمستخدم بإدخال إحداثيات النقطتين، ثم ارسم الخط عند النقر على زر. يمكنك كذلك رسم عدة خطوط بألوان مختلفة، أو حفظ نقاطها في قائمة وإعادة عرضها عند كل استدعاء repaint. بعد فهم الخطوط، انتقل إلى الأشكال الأخرى باستخدام drawRect وfillRect، أو ارسم نقطة بتحديد شكل صغير. هذه التمارين تساعدك على فهم الرسم في Swing قبل الانتقال إلى رسوم متحركة أو واجهات أكثر تعقيدًا.

أسئلة شائعة

هل drawLine ترسم خطًا في نافذة JFrame مباشرة؟

تُستخدم داخل دالة الرسم لكائن Graphics، والأفضل وضعها في paintComponent الخاصة بلوحة JPanel ثم وضع اللوحة داخل JFrame.

كيف أغير اتجاه الخط؟

غيّر قيم x1 وy1 وx2 وy2. موضع النقطتين هو ما يحدد الميل والطول والاتجاه داخل اللوحة.

كيف أجعل الخط أكثر سماكة؟

استخدم Graphics2D ثم setStroke(new BasicStroke(4)) قبل استدعاء drawLine.

لمتابعة سلسلة الرسم في Java، اقرأ أيضًا شرح رسم مربع ومستطيل في Java وطريقة رسم نقطة في Java، ثم انتقل إلى رسم مستطيل بزوايا مستديرة. هذه الدروس تكمل أساسيات Graphics وتساعدك على تركيب أكثر من شكل في لوحة واحدة.

فيديو الشرح

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

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