第三章基礎繪圖 (Basic Graphics) 3 1 簡介 3 2 Graphics Class 3 3 3 直線繪製 3 4 長方形繪製 3 5 橢圓形繪製 3 6 弧線繪製 3 7 多邊形繪製 3 8 圖形剪裁 3 9 圖形複製 3 10 習題 (Exercises) 3 1 簡介 在基礎圖文繪製上, 除了前章所探討的文字繪製之外, 本章將介紹基礎圖形之繪製 類別 Graphics 提供了各類圖形之繪製方法程序, 包括直線繪製 長方形繪製 橢圓形繪製 弧線繪製 多邊形繪製 圖片處理等
3 2 Graphics Class java.awt.graphics 繼承 (extends) 自 Object, 為 abstract public class( 有關抽象類別之用法, 請參考本書系列叢書第一冊基礎入門程式 9 6 節 ), 此類別提供了所有 Java 的繪圖功能 因是抽象類別, 無法借助建構子產生實體新物件直接繪圖, 但可借由類別 Component 之方法程序 paint() 參與繪製 繪製 : public abstract void drawstring(string str, int x, int y) public abstract void drawline(int x1, int y1, int x2, int y2) public abstract void drawrect(int x, int y, int width, int height), (x,y) 左上角座標 3 2 Graphics Class public abstract void fillrect(int x, int y, int width, int height) public abstract void fillrect() 以前景色填入長方型區域內圖形 public abstract void drawoval(int x, int y, int width, int height), (x,y) (xy) 左上角座標 public abstract void filloval(int x, int y, int width, int height) public abstract void filloval() public abstract void drawarc(int x, int y, int width, int height, intstartangle startangle, intarcangle) public abstract void fillarc(int x, int y, int width, int height, int startangle, int arcangle) public abstract void fillarc()
3 2 Graphics Class public abstract void drawpolygon(int[] xpoints, int[] ypoints, int npoints) public abstract bt tvoid fillpolygon(int[] l xpoints, int[] ypoints, int npoints) public abstract void fillpolygon() public abstract void clearrect(int x, int y, int width, int height), 以背景色清除長方型區域內圖形 public abstract void cliprect(int x, int y, int width, int height) public abstract void copyarea(int x, int y, int width, int height, int dx, int dy), 複製圖形到 (x+dx, y+dy) y) ( 左上角 ) 3 2 Graphics Class public abstract void setcolor(color c) public abstract void getcolor() public abstract void setfont(font font) public abstract void getfont()
3 33 直線繪製 依類別 Graphics 之方法程序 public abstract void drawline(int x1, int y1, int x2, int y2) 繪製直線, 其中參數 (x1, y1) 為直線起始點座標,(x2, y2) 為直線終止點座標 範例 9: 設計檔案 Ex3_3.java 其功能為解釋直線繪製 01 import java.awt.*; 02 i tj t t* 02 import java.awt.event.*; 03 import java.awt.graphics; 04 bli l E33 d F i l R bl { 04 public class Ex3_3 extends Frame implements Runnable { 05 public static void main(string args[]) { 06 Ex3_3 workstart=new Ex3_3(); 07 } 08 public Ex3_3() { 09 super("ex3_3"); 10 setsize(350, 350); 11 setvisible(true); 12 new Thread(this).start(); 13 }
14 public void run() { 15 repaint(); 16 } 17 public void paint(graphics g) { 18 g.drawline(50,50,120,100); 19 g.drawline(10,250,50,200); 20 g.drawline(50,200,120,270); 21 g.drawline(120,270,200,160); 22 } 23 } 範例 9 續
3 4 長方形繪製 依類別 Graphics 之方法程序 public abstract void drawrect(int x, int y, int width, int height) 繪製長方形, 其中參數 (x, y) 為長方形左上角之座標,width 為長方形之寬距,height 為長方形之高距 範例 10: 設計檔案 Ex3_4.java 其功能為解釋長方形繪製 01 import java.awt.*; 02 import java.awt.event.*; 03 import java.awt.graphics; 04 public class Ex3_4 extends Frame implements Runnable { 05 public static void main(string args[]) { 06 Ex3_4 workstart=new Ex3_4(); 07 } 08 public Ex3_4() { 09 super("ex3_4"); 10 setsize(350, 350); 11 setvisible(true); 12 new Thread(this).start(); 13 }
14 public void run() { 15 repaint(); 16 } 17 public void paint(graphics g) { 18 g.drawrect(90,50,150,100); 19 g.fillrect(90,200,150,100); 20 } 21 } 範例 10 續
3 5 橢圓形繪製 依類別 Graphics 之方法程序 public abstract void drawoval(int x, int y, int width, int height) 繪製橢圓形, 其中參數 (x, y) 為橢圓形長方形框左上角之座標,width 為橢圓形之寬距,height 為橢圓形之高距 範例 11: 設計檔案 Ex3_5.java 其功能為解釋橢圓形繪製 01 import java.awt.*; 02 import java.awt.event.*; 03 import java.awt.graphics; 04 public class Ex3_5 extends Frame implements Runnable { 05 public static void main(string args[]) { 06 Ex3_5 workstart=new Ex3_5(); 07 } 08 public Ex3_5() { 09 super("ex3_5"); 10 setsize(350, 350); 11 setvisible(true); 12 new Thread(this).start(); 13 }
14 public void run() { 15 repaint(); 16 } 17 public void paint(graphics g) { 18 g.drawoval(35,65,100,60); 19 g.drawoval(170,65,100,60); 20 g.drawrect(170,65,100,60); 21 g.filloval(35,200,100,60); 22 } 23 } 範例 11 續
3 6 弧線繪製 依類別 Graphics 之方法程序 public abstract void drawarc(int x, int y, int width, int height, int startangle, int arcangle) 繪製弧線, 其中參數 (x, y) 比照長方形左上角座標,width 為橢圓形之寬距, height 為橢圓形之高距,startAngle 為弧線起始角度,arcAngle 為截取橢圓形邊緣之角度 範例 12: 設計檔案 Ex3_6.java 其功能為解釋弧形繪製 01 import java.awt.*; 02 import java.awt.event.*; 03 import java.awt.graphics; 04 public class Ex3_6 extends Frame implements Runnable { 05 public static void main(string args[]) { 06 Ex3_6 workstart=new Ex3_6(); 07 } 08 public Ex3_6() { 09 super("ex3_6"); 10 setsize(350, 350); 11 setvisible(true); 12 new Thread(this).start(); 13 }
14 public void run() { 15 repaint(); 16 } 17 public void paint(graphics g) { 18 g.drawarc(35,65,100,60,10,90); 19 g.drawarc(170,65,100,60,10,90); 20 g.drawrect(170,65,100,60); 21 g.fillarc(35,200,100,60,10,90); 22 } 23 } 範例 12 續
3 7 多邊形繪製 依類別 Graphics 之方法程序 public abstract void drawpolygon(int[] xpoints, int[] ypoints, int npoints) 繪製多邊形, 其中參數 xpoints 為各點之 x 軸座標 ypoints 為各點之 y 軸座標 npoint 為多邊形點的數量 範例 13: 設計檔案 Ex3_7.java 其功能為解釋多邊形繪製 01 import java.awt.*; 02 import java.awt.event.*; 03 import java.awt.graphics; 04 public class Ex3_ 7 extends Frame implements Runnable { 05 int[] pgx = {90,130,180,230,180,130,90}; 06 int[] pgy = {100,60,60,100,150,150,100}; 07 int pgn= 7; 08 int[] fpgx = {90,130,180,230,180,130,90}; 09 int[] fpgy = {250,210,210,250,300,300,250}; 10 int fpgn = 7; 11 public static void main(string args[]) { 12 Ex3_7 workstart=new Ex3_7(); 13 }
14 public Ex3_7() { 15 super("ex3 Ex3_7 7"); 16 setsize(350, 350); 17 setvisible(true); 18 new Thread(this).start(); 19 } 20 public void run() { 21 repaint(); 22 } 23 public void paint(graphics g) { 24 g.drawpolygon(pgx, pgy, pgn); 25 g.fillpolygon(fpgx, fpgy, fpgn); 26 } 27 } 範例 13 續
3 8 圖形剪裁 依類別 Graphics 之方法程序 public abstract void cliprect(int x, int y, int width, int height) 裁取長方形區域內之圖形, 其中參數 (x, y) 為長方形左上角之座標,width 為長方形之寬距,height 為長方形之高距 範例 14: 參考範例 13, 設計檔案 Ex3_8.java 其功能為解釋圖形剪裁 01 import java.awt.*; 02 import java.awt.event.*; 03 import java.awt.graphics; p j p 04 public class Ex3_8 extends Frame implements Runnable { 05 int[] pgx= {90,130,180,230,180,130,90}; [] pg {,,,,,, }; 06 int[] pgy = {100,60,60,100,150,150,100}; 07 int pgn = 7; 08 int[] fpgx = {90,130,180,230,180,130,90}; 09 int[] fpgy = {250,210,210,250,300,300,250}; 10 int fpgn = 7; 10 int fpgn 7; 11 public static void main(string args[]) { 12 Ex3 8 workstart=new Ex3 8(); 12 Ex3_8 workstart=new Ex3_8(); 13 }
14 public Ex3_8() { 15 super("ex3_8"); 16 setsize(350, 350); 17 setvisible(true); 18 new Thread(this).start(); 19 } 20 public void run() { 21 repaint(); 22 } 23 public void paint(graphics g) { 24 g.drawrect(100,80,120,50); 25 g.drawpolygon(pgx, pgy, pgn); 26 g.cliprect(100,230,120,50); 120 27 g.fillpolygon(fpgx, fpgy, fpgn); 28 } 29 } 範例 14 續
3 9 圖形複製 依類別 Graphics 之方法程序 public abstract void copyarea(int x, int y, int width, int height, int dx, int dy) 複製長方形區域內之圖形到 (x+dx, y+dy), 其中參數 (x, y) 為原長方形左上角之座標,(x+dx, y+dy) 為複製長方形左上角之座標,width 為長方形之寬距,height 為長方形之高距 範例 15: 參考範例 11, 設計檔案 Ex3_9.java 其功能為解釋圖形複製 01 import java.awt.*; 02 import java.awt.event.*; 03 import java awt Graphics; 03 import java.awt.graphics; 04 public class Ex3_9 extends Frame implements Runnable { 05 public static void main(string args[]) { 05 public static void main(string args[]) { 06 Ex3_9 workstart=new Ex3_9(); 07 } 08 public Ex3_9() { 09 super("ex3_9"); 10 tsi (350 350) 10 setsize(350, 350); 11 setvisible(true); 12 Th d(thi ) t t() 12 new Thread(this).start(); 13 }
14 public void run() { 15 repaint(); 16 } 17 public void paint(graphics g) { 18 g.drawoval(35,65,100,60); 19 g.drawoval(170,65,100,60); 20 g.drawrect(170,65,100,60); 21 g.filloval(35,200,100,60); 22 g.copyarea(35,200,100,60,135,0); 23 } 24 } 範例 15 續
3 10 習題 (Exercises) 01 Graphics Class 之功能為何? 02 Graphics Class 因是抽象類別, 無法產生實體物件直接繪圖, 但又如何繪製? 03 drawstring(string str, int x, int y) 繪製字串, 其中參數之意為何? 04 drawline(int x1, int y1, int x2, int y2) 繪製直線, 其中參數之意為何? 05 drawrect(int x, int y, int width, int height) 繪製長方形, 其中參數之意為何? 06 drawoval(int x, int y, int width, int height) 繪製橢圓形, 其中參數之意為何? 07 drawarc(int x, int y, int width, int height, int startangle, int arcangle) 繪製弧線, 其中參數之意為何? 08 drawpolygon(int[] xpoints, int[] ypoints, int npoints) 繪製多邊形, 其中參數之意為何? 09 clearrect(int x, int y, int width, int height) 以背景色清除長方形區域內之圖形, 其中參數之意為何? 10 cliprect(int x, int y, int width, int height) 裁取長方形區域內之圖形, 其中參數之意為何? 11 copyarea(int x, int y, int width, int height, int dx, int dy) 複製長方形區域內之圖形到 (x+dx, y+dy), y) 其中參數之意為何?