تعلم رسم مربع أو مستطيل بزوايا دائرية في Java باستخدام Graphics وSwing. يشرح هذا الدرس الفرق بين drawRoundRect لرسم الإطار وfillRoundRect لرسم شكل ممتلئ، مع برنامج كامل قابل للتشغيل وطريقة التحكم في الأبعاد والانحناء واللون.
ما وظيفة RoundRect؟
توفر فئة Graphics الدالتين drawRoundRect(x, y, width, height, arcWidth, arcHeight) وfillRoundRect. تمثل x وy موضع أعلى يسار الشكل، ويمثل width العرض وheight الارتفاع. أما arcWidth وarcHeight فيحددان مقدار تدوير الزوايا أفقيًا وعموديًا. كلما زادت القيمتان بدا الانحناء أوضح، مع مراعاة أبعاد الشكل.
برنامج Java كامل لرسم مستطيل بزوايا دائرية
أنشئ ملفًا باسم RoundedRectangle.java. يستخدم المثال JPanel للرسم وJFrame لعرض النافذة:
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 RoundedRectangle {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("مستطيل بزوايا دائرية");
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, 360));
setBackground(Color.WHITE);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(new Color(35, 110, 180));
g.drawRoundRect(60, 50, 220, 120, 35, 35);
g.setColor(new Color(40, 160, 100));
g.fillRoundRect(60, 210, 220, 100, 30, 30);
}
}
}شرح الكود خطوة بخطوة
أنشأنا النافذة على مسار أحداث Swing باستخدام SwingUtilities.invokeLater. تضبط setPreferredSize مساحة اللوحة، ثم تعرض pack النافذة بالحجم المناسب. نضع منطق الرسم داخل الصنف DrawingPanel الذي يرث من JPanel، ونعيد تعريف paintComponent ليعيد Swing رسم الأشكال عند تحديث النافذة أو تغطيتها.
يمسح super.paintComponent(g) محتوى اللوحة ويرسم الخلفية قبل رسم الأشكال. يغير setColor لون الرسم، ثم يرسم drawRoundRect مستطيلًا أزرق بإطار فقط عند الإحداثيات (60، 50). بعده يرسم fillRoundRect مستطيلًا أخضر ممتلئًا أسفله. لاحظ أن إحداثي y يزداد كلما اتجهنا إلى أسفل النافذة.
الفرق بين drawRoundRect وfillRoundRect
استخدم drawRoundRect عندما تريد إظهار حدود الشكل فقط، مثل إطار بطاقة أو مساحة تحديد. استخدم fillRoundRect عندما تريد تعبئة المساحة الداخلية باللون الحالي، مثل زر أو بطاقة ملونة. تستطيع تغيير اللون قبل كل استدعاء عبر g.setColor. تجنب استخدام الدالتين في الصنف JFrame نفسه؛ لوحة الرسم المنفصلة أسهل في التنظيم وأكثر استقرارًا.
تعديل مقدار انحناء الزوايا
جرّب تغيير آخر معاملين إلى 15, 15 للحصول على انحناء خفيف، أو 60, 60 لانحناء أكبر. يجب ألا تكون القيم كبيرة بصورة غير مناسبة لحجم الشكل، وإلا بدت الزوايا كأنها نصف دائرة. للحصول على زوايا متناسقة استخدم قيمتين متساويتين، ولتجربة انحناء مختلف أفقيًا ورأسيًا استخدم قيمتين مختلفتين.
خطوات الترجمة والتشغيل
احفظ الملف باسم RoundedRectangle.java؛ يجب أن يطابق اسم الصنف العام اسم الملف. من مجلد الملف شغّل javac RoundedRectangle.java ثم java RoundedRectangle. يتطلب الأمر وجود JDK. ستظهر نافذة بيضاء فيها مستطيل أزرق بإطار دائري وآخر أخضر ممتلئ.
أخطاء شائعة وحلولها
- نسيان
super.paintComponent(g)قد يترك آثارًا أو يمنع تحديث الخلفية بصورة صحيحة. - إذا لم يظهر الشكل فتحقق أن x وy داخل مساحة اللوحة، وأن العرض والارتفاع أكبر من صفر.
- استدعاء الرسم قبل تعيين اللون قد يعطي لونًا غير متوقع؛ حدد اللون قبل كل شكل.
- إذا ظهر خطأ عن Graphics أو JPanel، راجع أسطر الاستيراد أعلى الملف.
- عند تحديث موضع الشكل أثناء التشغيل، خزّن الإحداثيات في حقول واستدعِ
repaint()بدل استدعاء paintComponent مباشرة.
تابع دروس الرسم بلغة Java
يمكنك متابعة درس رسم نقطة في Java باستخدام Graphics وSwing لفهم الإحداثيات والرسم داخل JPanel، أو تجربة حساب مساحة الدائرة في Java للتدرب على العمليات الحسابية. جرّب تغيير ألوان المستطيلات وأبعادها بنفسك حتى تفهم أثر كل معامل.






