تعلم رسم مربع ومستطيل في Java باستخدام Graphics وSwing مع مثال كامل قابل للتشغيل. سنوضح الفرق بين الدالتين drawRect وfillRect، وكيف تختار الإحداثيات والأبعاد والألوان، ثم نضيف خطوات الترجمة وحلول الأخطاء الشائعة. الكود يعتمد لوحة JPanel للرسم حتى يعاد عرض الأشكال بصورة صحيحة عند تحديث النافذة.
الفرق بين رسم الإطار والشكل الممتلئ
تستخدم drawRect(x, y, width, height) لرسم حدود مستطيل دون تعبئة داخله. أما fillRect(x, y, width, height) فترسم مستطيلًا ممتلئًا باللون الحالي. المربع حالة خاصة من المستطيل يكون فيها العرض مساويًا للارتفاع. تبدأ إحداثيات الرسم عند الزاوية العلوية اليسرى للوحة؛ تتحكم x في الحركة أفقيًا وy في الحركة رأسيًا.
كود Java كامل لرسم مربع ومستطيل
أنشئ ملفًا باسم RectangleDrawing.java، ثم استخدم المثال التالي لعرض مربع بإطار ومستطيل ممتلئ في نافذة واحدة:
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 RectangleDrawing {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("رسم مربع ومستطيل في Java");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new DrawingPanel());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
});
}
private static class DrawingPanel extends JPanel {
DrawingPanel() {
setPreferredSize(new Dimension(500, 320));
setBackground(Color.WHITE);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLUE);
g.drawRect(50, 50, 120, 120);
g.setColor(Color.RED);
g.fillRect(220, 70, 200, 100);
}
}
}شرح معاملات drawRect وfillRect
في استدعاء drawRect(50, 50, 120, 120) يبدأ المربع على بعد 50 بكسل من يسار اللوحة و50 من أعلاها، ويكون عرضه وارتفاعه 120 بكسل؛ لذلك يظهر مربعًا. وفي fillRect(220, 70, 200, 100) يبدأ المستطيل عند x=220 وy=70، عرضه 200 وارتفاعه 100. تغيير قيم العرض والارتفاع هو ما يحدد إن كان الشكل مربعًا أم مستطيلًا.
تحدد g.setColor لون الشكل التالي، وتقبل ألوانًا جاهزة مثل Color.BLUE وColor.RED، أو لونًا مخصصًا باستخدام new Color(40, 120, 190). قيم RGB تقع بين صفر و255. إذا رسمت عدة أشكال، غيّر اللون قبل كل استدعاء حتى لا تستخدم جميعها اللون نفسه.
لماذا نستخدم JPanel وpaintComponent؟
تحتوي JFrame على النافذة، بينما توفر JPanel مساحة الرسم. عندما تستدعي Swing عملية إعادة الرسم، تنفذ الدالة paintComponent مرة أخرى؛ لذلك يبقى المحتوى ظاهرًا بعد تصغير النافذة أو تغطيتها. يبدأ المثال بـ super.paintComponent(g) ليعيد رسم الخلفية ويمسح آثار الإطار السابق، ثم يرسم الأشكال. لا تستدعِ paintComponent بنفسك، بل استخدم repaint() بعد تغيير البيانات التي تؤثر في الرسم.
كيف ترسم مربعًا مملوءًا أو إطارًا فقط؟
لرسم مربع مملوء، اجعل قيمتي العرض والارتفاع متساويتين واستبدل drawRect بـ fillRect. ولرسم مستطيل بإطار فقط، استخدم drawRect مع عرض مختلف عن الارتفاع. يمكنك الجمع بين الطريقتين: ارسم مستطيلًا مملوءًا أولًا بلون فاتح، ثم ارسم حدوده بلون أغمق وبالإحداثيات والأبعاد نفسها. هذا مفيد في إنشاء أشكال واجهة بسيطة مثل البطاقات ومناطق التحديد.
تشغيل البرنامج من الطرفية
احفظ الملف بالاسم RectangleDrawing.java المطابق لاسم الصنف العام. افتح الطرفية في المجلد نفسه، ثم نفذ javac RectangleDrawing.java لترجمة المصدر، وبعد نجاحه نفذ java RectangleDrawing. تحتاج إلى تثبيت JDK. تظهر نافذة بيضاء فيها مربع أزرق ومستطيل أحمر. إذا كنت تستخدم بيئة تطوير مثل IntelliJ أو NetBeans، أنشئ صنفًا جديدًا والصق البرنامج ثم شغّل الدالة main.
حل مشكلات الرسم الشائعة
- إذا لم يظهر الشكل، فتأكد أن إحداثياته تقع داخل أبعاد اللوحة، وأن العرض والارتفاع أكبر من صفر.
- إذا ظهر جزء من الشكل فقط، راجع حجم JPanel في
setPreferredSizeوقيم x وy. - إذا لم تتغير الخلفية أو ظهرت آثار، أبقِ استدعاء
super.paintComponent(g)في بداية الدالة. - إذا ظهر خطأ في Graphics أو Color أو Swing، تحقق من أسطر import أعلى الملف.
- لا تضع الرسم في constructor؛ احتفظ به في paintComponent ليعاد الرسم متى طلبت Swing ذلك.
توسيع المثال والتدرب
يمكنك إضافة مستطيلات متعددة داخل paintComponent وتغيير لون كل واحد أو وضعه في مكان مختلف. جرّب حساب المواضع باستخدام متغيرات بدل الأرقام الثابتة، ثم أضف حقولًا لتغيير أبعاد الأشكال واستدعِ repaint(). بعد إتقان المستطيلات، انتقل إلى درس رسم مستطيل بزوايا دائرية في Java لتجربة drawRoundRect، أو درس رسم نقطة باستخدام Graphics وSwing لفهم الإحداثيات والرسم في JPanel. وللتدرب على إدخال المستخدم راجع قائمة خيارات Java باستخدام switch وScanner.
ملخص: استخدم drawRect لحدود الشكل وfillRect للتعبئة، واجعل العرض مساويًا للارتفاع عندما تريد مربعًا. تنفيذ الرسم داخل JPanel وpaintComponent يجعل المثال أوضح وأسهل في التوسعة.






