توفر فئة Graphics طرق رسم أساسية، وتوفر فئة Graphics2D إمكانات رسم أكثر قوة. يشرح هذا القسم فئة الرسومات، ويشرح القسم التالي Graphics2D.
توفر فئة الرسومات أساليب الرسم الهندسي الأساسية، بما في ذلك بشكل أساسي: رسم مقاطع الخطوط، ورسم المستطيلات، ورسم الدوائر، ورسم الرسومات الملونة، ورسم القطع الناقص، ورسم الأقواس، ورسم المضلعات، وما إلى ذلك.
1. ارسم خطًا <br />لرسم مقطع خطي في النافذة، يمكنك استخدام طريقة drawLine() لفئة الرسومات:
رسم الخط (كثافة العمليات x1، كثافة العمليات y1، كثافة العمليات x2، كثافة العمليات y2)
على سبيل المثال، التعليمة البرمجية التالية ترسم مقطعًا خطيًا بين النقطة (3,3) والنقطة (50,50)، وترسم نقطة عند النقطة (100,100).
g.drawLine(3,3,50,50);// ارسم مقطعًا خطيًا g.drawLine(100,100,100,100);// ارسم نقطة.
2. ارسم مستطيلاً <br />هناك نوعان من المستطيلات: منتظمة ومستديرة.
(1) هناك طريقتان لرسم المستطيلات العادية:
drawRect(int x, int y, int width, int height): ارسم مستطيلاً محاطًا بإطار سلكي. تحدد المعلمات x وy موضع الزاوية اليسرى العليا، ومعلمات العرض والارتفاع هي عرض المستطيل وارتفاعه.
fillRect(int x, int y, int width, int height): يملأ المستطيل بلون محدد مسبقًا للحصول على كتلة مستطيلة ملونة.
الكود التالي هو مثال لرسم مستطيل:
g.drawRect(80,100,40,25);// ارسم الإطار السلكي g.setColor(Color.yellow);g.fillRect(20,70,20,30);// ارسم كتلة التلوين
(2) هناك طريقتان لرسم مستطيل مستدير الزوايا:
drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight): وهو مستطيل مستدير الزوايا محاط بخطوط. تحدد المعلمتان x وy موضع الزاوية اليسرى العليا للمستطيل؛ ومعلمات العرض والارتفاع هي عرض المستطيل وارتفاعه؛ arcWidth وarcHeight هما القطر العرضي والقطر الطولي لقوس الشرائح على التوالي.
fillRoundRect(int x, int y, int width, int height, int arcWidth, int Archeight): هو مستطيل مستدير الزوايا مملوء بلون محدد مسبقًا. معنى كل معلمة هو نفس الطريقة السابقة.
الكود التالي هو مثال لرسم مستطيل:
g.drawRoundRect(10,10,150,70,40,25);// ارسم مستطيلًا مستدير الزوايا g.setColor(Color.blue); g.fillRoundRect(80,100,100,100,60,40);// ارسم كتلة مستطيلة مستديرة g.drawRoundRect(10,150,40,40,40,40);// ارسم دائرة g.setColor(Color.red); g.fillRoundRect(80,100,100,100,100,100);// ارسم دائرة
يمكنك رسم دائرة عن طريق رسم مستطيل مستدير الزوايا، عندما يتساوى عرض المستطيل وارتفاعه، يكون القطر العرضي للقوس المستدير والقطر الطولي للقوس المستدير متساويين أيضًا، ويساويان عرض وارتفاع القوس. مستطيل، يتم رسم دائرة. انظر التعليقات في المثال أعلاه. الأول هو رسم دائرة، والثاني هو رسم كتلة دائرية.
3. رسم مستطيل ثلاثي الأبعاد <br />هناك طريقتان لرسم مستطيل ثلاثي الأبعاد:
draw3DRect(int x,int y,int width,int height, boolean مرتفعة): ارسم مستطيلاً مميزًا. من بينها، تحدد x وy موضع الزاوية اليسرى العليا للمستطيل، ومعلمات العرض والارتفاع هي عرض المستطيل وارتفاعه، والمعلمة المرفوعة هي ما إذا كان مميزًا أم لا.
fill3DRect(int x,int y,int width,int height,boolean مرتفعة): املأ المستطيل المميز بلون محدد مسبقًا.
الكود التالي هو مثال لرسم مستطيل بارز:
g.draw3DRect(80,100,40,25,true);// ارسم إطارًا سلكيًا g.setColor(Color.yellow); g.fill3DRect(20,70,20,30,true);// ارسم كتلة تلوين
4. ارسم القطع الناقص <br />يتم تحديد القطع الناقص بواسطة المحورين الأفقي والرأسي للقطع الناقص. هناك طريقتان لرسم شكل بيضاوي:
drawOval(int x, int y, int width, int height): يرسم شكلًا بيضاويًا محاطًا بخطوط. تحدد المعلمتان x وy موضع الزاوية اليسرى العليا من القطع الناقص، ومعلمتي العرض والارتفاع هما المحوران الأفقي والرأسي.
fillOval(int x, int y, int width, int height): وهو شكل بيضاوي مملوء بلون محدد مسبقًا وهو عبارة عن كتلة تلوين. يمكنك أيضًا استخدام طريقة رسم القطع الناقص لرسم دائرة. عندما يكون المحور الأفقي والمحور الرأسي متساويين، يكون القطع الناقص المرسوم دائرة.
التعليمة البرمجية التالية هي مثال لرسم القطع الناقص:
g.drawOval(10,10,60,120);// ارسم شكلًا بيضاويًا g.setColor(Color.cyan);g.fillOval(100,30,60,60);// ارسم دائرة g.setColor(Color.magenta) ) ;g.fillOval(15,140,100,50);// ارسم الشكل البيضاوي
5. ارسم قوسًا
هناك طريقتان لرسم القوس:
drawArc(int x, int y, int width, int height, int startAngle, int arcAngle): ارسم خطًا قوسيًا كجزء من القطع الناقص. مركز القطع الناقص هو مركز المستطيل المحيط به، حيث المعلمات هي إحداثيات (x، y) للزاوية اليسرى العليا للمستطيل المحيط، والعرض هو العرض، والارتفاع هو الارتفاع. وحدة المعلمة startAngle هي "درجة"، وتشير زاوية البداية البالغة 0 درجة إلى موضع الساعة 3. تشير المعلمات startAngle و arcAngle إلى أنه بدءًا من زاوية startAngle، يتم رسم قوس من درجات arcAngle في اتجاه عكس اتجاه عقارب الساعة. وفقًا للاتفاقية، تكون الدرجات الإيجابية في اتجاه عكس عقارب الساعة، على سبيل المثال -90 درجة هي الساعة 6.
fillArc(int x, int y, int width, int height, int startAngle, int arcAngle): استخدم اللون الذي تم تعيينه بواسطة طريقة setColor () لرسم جزء من القطع الناقص الملون.
الكود التالي هو مثال لرسم قوس:
g.drawArc(10,40,90,50,0,180);// ارسم خطًا قوسيًا g.drawArc(100,40,90,50,180,180);// ارسم خطًا قوسيًا g.setColor(Color.yellow); g.fillArc(10,100,40,40,0,-270);// املأ ثلاثة أرباع الشكل الناقص الذي يفتقد الزاوية اليمنى العليا g.setColor(Color.green); g.fillArc(60,110,110,60,-90 ,- 270);// املأ ثلاثة أرباع الزاوية اليسرى السفلية المفقودة من القطع الناقص
6. ارسم المضلعات <br />المضلع هو شكل مستو مغلق يتكون من خلال ربط أجزاء خطية متعددة من طرف إلى طرف. يتم تخزين إحداثيات x وإحداثيات y لنقاط النهاية لمقاطع خط المضلع في صفيفين على التوالي. إن رسم مضلع يعني توصيلها بمقاطع خط مستقيم بترتيب نقاط الإحداثيات المحددة. فيما يلي طريقتان شائعتان الاستخدام لرسم المضلعات:
drawPolygon(int xpoints[],int yPoints[],int nPoints): ارسم مضلعًا
fillPolygon(int xPoints[],int yPoints[],int nPoints): قم بتلوين المضلع باللون الذي تم تعيينه بواسطة طريقة setColor(). يخزن المصفوفة xPoints[] نقاط إحداثيات x، ويخزن yPoints[] نقاط إحداثيات y، وnPoints هو عدد نقاط الإحداثيات.
لاحظ أن الطريقة المذكورة أعلاه لا تغلق المضلع تلقائيًا، لرسم مضلع مغلق، يجب أن تكون النقطة الأخيرة من نقطة الإحداثيات المحددة هي نفس النقطة الأولى. ينفذ التعليمة البرمجية التالية ملء مثلث ورسم مثمن.
int px1[]={50,90,10,50};// لا يمكن رسم المضلع إلا عندما تكون النقطتان الأولى والأخيرة متماثلتين int py1[]={10,50,50,10}; ]={140,180,170,180,140,100,110,140}; py2[]={5,25,35,45,65,35,25,5}; g.setColor(Color.blue); ;
يمكنك أيضًا استخدام الكائنات المضلعة لرسم المضلعات. قم بإنشاء كائن مضلع باستخدام فئة المضلع، ثم استخدم هذا الكائن لرسم المضلعات. الطرق الرئيسية لفئة المضلع:
على سبيل المثال، التعليمة البرمجية التالية ترسم مثلثًا وتعبئته بمثلث أصفر. لاحظ أن استخدام كائن مضلع لرسم مضلع مغلق لا يتطلب تطابق النقطتين الأولى والأخيرة.
int x[]={140,180,170,180,140,100,110,100}; int y[]={5,25,35,45,65,45,35,25}; Polygon polygon1=new polygon1.addPoint(50,10); .addPoint(90,50); polygon1.addPoint(10,50); g.drawPolygon(polygon1); g.setColor(Color.yellow);
7. مسح الكتلة المستطيلة <br />عندما تريد أن يكون لديك مستطيل فارغ في منتصف الرسم الملون، يمكنك ملء كتلة مستطيلة بلون الخلفية، وهو ما يعادل استخدام "ممحاة" على الكتلة المستطيلة. الطريقة هي:
ClearRect(int x, int y, int width, int height): مسح تلوين الكتلة المستطيلة المحددة بواسطة المعلمات.
على سبيل المثال، تطبق التعليمة البرمجية التالية التلوين الذي يمحو كتلة مستطيلة في دائرة:
g.setColor(Color.blue g.fillOval(50,50,100,100);g.clearRect(70,70,40,55);
8. تحديد مساحة عرض الرسم <br />استخدم مستطيلًا لتمثيل مساحة عرض الرسم البياني، ويجب أن يكون الرسم البياني صالحًا ضمن النطاق المحدد، ولن يتم إعادة حساب قيم الإحداثيات الجديدة، وسيتم تجاوزها لن يتم عرض الجزء تلقائيًا. الطريقة هي clipRect(int x, int y, int width, int height)، مما يحد من عرض الرسومات في المنطقة المحددة، ولا يعرض الجزء الزائد. عند تغطية مناطق محظورة متعددة، يتم الحصول على منطقة تقاطع المناطق المحظورة. على سبيل المثال الكود:
g.clipRect(0,0,100,50);g.clipRect(50,25,100,50);
يعادل
g.clipRect(50,25,50,25);
9. نسخ الرسومات <br />استخدم الطريقة CopyArea() الخاصة بفئة الرسومات لنسخ الرسومات. تنسيق الاستخدام هو:
CopyArea(int x, int y, int width, int height, int dx, int dy), dx و dy يمثلان على التوالي عدد وحدات البكسل التي يتم إزاحتها عن طريق لصق الرسومات في الموضع الأصلي. القيم الموجبة تعني الإزاحة إلى اليمين أو يتم إزاحة القيم السالبة إلى اليسار أو إلى الأعلى. النقطة المرجعية للإزاحة هي إحداثيات الزاوية اليسرى العليا للمستطيل المراد نسخه.
على سبيل المثال، يوضح التعليمة البرمجية التالية نسخ الرسومات، عن طريق تخصيص جزء من مستطيل واحد ومستطيل آخر بالكامل.
g.drawRect(10,10,60,90); g.fillRect(90,10,60,90); g.copyArea(40,50,60,70,-20,80); 50،60،60،10،80)؛
[مثال] يقوم تطبيق صغير بإعادة كتابة طريقة التحديث () لمسح كتلة الدائرة فقط، وليس النص، وتعرض النافذة مربعًا أحمر يتحرك باستمرار.
import java.applet.*;import java.awt.*;public class example7_3 Extends Applet{ int i=1; public void init(){ setBackground(Color.yellow) public void Paint(Graphics g){ i = i +8; if(i>160)i=1; g.drawString("أتعلم طريقة التحديث()"،100,100); حاول{ Thread.sleep(100); }catch(InterruptedException e){} repaint(); .clearRect (i,10,200,100);// لا تقم بمسح "أنا أتعلم طريقة التحديث ()" Paint(g }});
يجب أن يرث برنامج الرسم العام JFrame ويحدد فئة فرعية لنافذة JFrame، كما يجب أن يرث JPanel ويحدد فئة فرعية JPanel. أعد تعريف طريقة الطلاء () في فئة JPanel الفرعية، واستدعاء طريقة الرسم في هذه الطريقة لرسم رسومات متنوعة.
[مثال] تطبيق يستخدم وضع الرسم XOR.
import javax.swing.*;import java.awt.*;public class example7_4 Extends JFrame{ public static void main(String args[]){ GraphicsDemo myGraphicsFrame = new GraphicsDemo() }}class ShapesPanel Extends JPanel{ SharpesPanel(){ setBackground(Color.white } public void PaintComponent(Graphics g){ super.paintComponent(g); setBackground(Color.yellow); // لون الخلفية أصفر g.setXORMode(Color.red); // اضبط وضع رسم XOR واللون أحمر g.setColor(Color.green(20, 20, 80, 40); // اللون الفعلي هو لون مختلط من اللون الأخضر + الأصفر = الرمادي g.setColor(Color.yellow); 40); // النصف الثاني أصفر+أصفر=قراءة، والنصف الأول أصفر+رمادي g.setColor(Color.green); أخضر + أصفر اللون المختلط = رمادي g.fillRect(60, 70, 80, 40); // النصف الأول هو (أخضر + أصفر) + رمادي =لون الخلفية، النصف الأخير أخضر+أصفر = رمادي g.setColor(Color.green g.drawLine(80, 100, 180, 200); // الخط المستقيم أخضر+yellow = Gray g.drawLine(); 100، 100، 200، 200)؛ // كما هو مذكور أعلاه/*ارسم خطًا مستقيمًا متداخلًا جزئيًا. الجزء الأوسط من الخط المستقيم الأصلي هو اللون الرمادي+الرمادي=لون الخلفية، والجزء الممتد هو اللون الأخضر+الأصفر=الرمادي.*/ g.drawLine(140, 140 , 220, 220); g.setColor(Color.yellow); // تحليل تغيرات لون الخطوط المستقيمة التالية، والتي تتداخل مع القوة السابقة g.drawLine(20, 30, 160, 30); g.drawLine(20, 75, 160, 75); }}class GraphicsDemod Extends JFrame{ public GraphicsDemo(){ this.getContentPane().add(new ShapesPanel()); setTile("عرض طريقة الرسم الأساسية"); (300, 300);