คลาส Graphics มีวิธีการวาดขั้นพื้นฐาน และคลาส Graphics2D ให้ความสามารถในการวาดที่ทรงพลังยิ่งขึ้น ส่วนนี้จะอธิบายคลาส Graphics และส่วนถัดไปจะอธิบาย Graphics2D
คลาสกราฟิกมีวิธีการวาดภาพเรขาคณิตขั้นพื้นฐาน ซึ่งส่วนใหญ่ได้แก่ การวาดส่วนของเส้น การวาดสี่เหลี่ยม การวาดวงกลม การวาดภาพกราฟิกสี การวาดวงรี การวาดส่วนโค้ง การวาดรูปหลายเหลี่ยม ฯลฯ
1. วาดเส้น <br />ในการวาดส่วนของเส้นในหน้าต่าง คุณสามารถใช้เมธอด DrawLine() ของคลาส Graphics:
วาดเส้น(int x1,int y1,int x2,int 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 Raised): วาดรูปสี่เหลี่ยมผืนผ้าที่ไฮไลต์ ในหมู่พวกเขา x และ y ระบุตำแหน่งของมุมซ้ายบนของสี่เหลี่ยมผืนผ้า ความกว้างและความสูงของพารามิเตอร์คือความกว้างและความสูงของสี่เหลี่ยมผืนผ้า และพารามิเตอร์ที่เพิ่มขึ้นคือไม่ว่าจะถูกเน้นหรือไม่ก็ตาม
fill3DRect(int x,int y,int width,int height,boolean Raised): เติมสี่เหลี่ยมที่ไฮไลต์ด้วยสีที่กำหนดไว้ล่วงหน้า
รหัสต่อไปนี้เป็นตัวอย่างของการวาดรูปสี่เหลี่ยมผืนผ้าที่ยื่นออกมา:
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); g.fillPolygon(px1,py1,4); ; g.drawPolygon(px2,py2,9);
คุณยังสามารถใช้วัตถุรูปหลายเหลี่ยมเพื่อวาดรูปหลายเหลี่ยมได้ สร้างวัตถุรูปหลายเหลี่ยมโดยใช้คลาสรูปหลายเหลี่ยม รูปหลายเหลี่ยม จากนั้นใช้วัตถุนี้เพื่อวาดรูปหลายเหลี่ยม วิธีการหลักของคลาสรูปหลายเหลี่ยม:
ตัวอย่างเช่น โค้ดต่อไปนี้วาดรูปสามเหลี่ยมแล้วเติมด้วยสามเหลี่ยมสีเหลือง โปรดทราบว่าการใช้วัตถุรูปหลายเหลี่ยมเพื่อวาดรูปหลายเหลี่ยมแบบปิดไม่จำเป็นต้องให้จุดแรกและจุดสุดท้ายตรงกัน
int x[]={140,180,170,180,140,100,110,100}; int y[]={5,25,35,45,65,45,35,25}; .addPoint(90,50); polygon1.addPoint(10,50); g.drawPolygon(polygon1); g.setColor(Color.yellow); รูปหลายเหลี่ยม polygon2 = รูปหลายเหลี่ยมใหม่ (x,y,8);
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);
[ตัวอย่าง] แอปพลิเคชันขนาดเล็กเขียนเมธอด update() ใหม่เพื่อล้างเฉพาะบล็อกวงกลม ไม่ใช่ข้อความ และหน้าต่างจะแสดงสี่เหลี่ยมสีแดงที่เคลื่อนไหวตลอดเวลา
import java.applet.*;import java.awt.*;public class ตัวอย่าง 7_3 ขยาย Applet{ int i=1; public void init(){ setBackground(Color.yellow); } public void paint(Graphics g){ i = i +8; if(i>160)i=1; g.setColor(Color.red);g.fillRect(i,10,20,20); g.drawString("ฉันกำลังเรียนรู้วิธีอัปเดต()",100,100); ลอง{ Thread.sleep(100); } catch(InterruptedException e){} ทาสีใหม่(); } อัปเดตเป็นโมฆะสาธารณะ (กราฟิก g) .clearRect (i,10,200,100);//อย่าล้าง "ฉันกำลังเรียนรู้วิธีอัปเดต ()" (g }}
โปรแกรมวาดภาพทั่วไปจะต้องสืบทอด JFrame และกำหนดคลาสย่อยของหน้าต่าง JFrame และยังสืบทอด JPanel และกำหนดคลาสย่อย JPanel ด้วย กำหนดเมธอด paintComponent() ใหม่ในคลาสย่อย JPanel และเรียกใช้เมธอดการวาดในเมธอดนี้เพื่อวาดกราฟิกต่างๆ
[ตัวอย่าง] แอปพลิเคชันที่ใช้โหมดการวาด XOR
import javax.swing.*;import java.awt.*;คลาสสาธารณะ Example7_4 ขยาย JFrame{ public static void main(String args[]){ GraphicsDemo myGraphicsFrame = new GraphicsDemo(); }}คลาส ShapesPanel ขยาย JPanel{ SharpesPanel(){ setBackground (Color.white); } โมฆะสาธารณะ paintComponent (กราฟิก g) { super.paintComponent (g); setBackground(Color.yellow); //สีพื้นหลังเป็นสีเหลือง g.setXORMode(Color.red); //ตั้งค่าโหมดการวาดภาพ XOR และสีเป็นสีแดง g.setColor(Color.green); 20, 80 , 40); //สีจริงเป็นสีผสมระหว่าง สีเขียว + สีเหลือง = สีเทา g.setColor(Color.yellow); g.fillRect(60, 20, 80, 40); //ครึ่งหลังคือเหลือง+เหลือง=อ่าน ครึ่งแรกเป็นเหลือง+เทา g.setColor(Color.green); g.fillRect(20, 70, 80, 40); //สีจริงคือ สีเขียว+สีเหลือง สีผสม = สีเทา g.fillRect(60, 70, 80, 40); // ครึ่งแรกคือ (เขียว+เหลือง)+สีเทา =สีพื้นหลัง ครึ่งหลังเป็นสีเขียว+เหลือง = สีเทา g.setColor(Color.green); g.drawLine(80, 100, 180, 200); //เส้นตรงเป็นสีเขียว+สีเหลือง = สีเทา 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); }}คลาส GraphicsDemod ขยาย JFrame{ public GraphicsDemo(){ this.getContentPane().add(new ShapesPanel()); setTile("การสาธิตวิธีการวาดขั้นพื้นฐาน"); (300, 300); setVisible(จริง);