和春技術學院資訊管理系 九十三學年度第一學期 物件導向程式語言 第八章 A W T 的2D繪圖套件 教學投影片 課程網頁 講師:毛立仁
本章重點 8-1 認識Graphics類別繪圖簡介 8-2 動畫的原理與製作
8-1 認識Graphics類別繪圖簡介 Graphics類別是所有繪圖或字型的基礎 類別,具備有繪圖方法、設定字型、選 擇顏色及影像等功能。
座標軸系統 視窗的座標系統是以左上角為原點(0,0), X座標是由左往右為正向,Y座標則是以 上往下為正向。
Java 繪圖座標軸系統
滑鼠在這裡 滑鼠在這裡
繪出線、面與幾何圖形 程式CH08_01.java, CH08_02.java 方法名稱 說明 abstract void drawLine(int x1座標, int y1座標, int x2座標, int y2座標) 給兩點座標(x1,y1), (x2,y2)。 abstract void draw Arc(int x座標, int y座標, int寬, int長, int起始角度, int結束角度) 給(x,y)座標、寬長、起始角度和結束角度。 abstract void drawRect(int x座標, int y座標, int寬, int長) 給(x,y)座標、寬長。 abstract void drawOval(int x座標, int y座標, int寬, int長) abstract void drawPolygon(int[] x座標陣列, int[] y座標陣列, int頂點數): 設定要畫的圖形為幾邊形及各頂點座標。
繪出字串功能 程式CH08_03.java 名稱 說明 ascender 一行字串繪製最高的位置 descender 一行字串繪製最低的位置 baseline 字串繪製的基本線 ascent 基本線向上的最大距離 descent 基本線向下的最大距離 leading 字型與字型間的距離。
程式CH08_03.java 方法名稱 說明 int getAscent() 傳回字的Ascent位置 int getDescent() 傳回字的Dscent位置 int getHeight() 傳回字的高度。 int getLeading() 傳回兩行之間的距離。 int getMaxAscent() 傳回字的最大Ascent位置。 int getMaxDescent() 傳回字的最大Descent位置。 int charWidth(字元) char是傳回特定字元的寬度。 int charsWidth(字元陣列),開始位置 ,結束位置) 傳回字串陣列中各字元的前進寬度。 int stringWidth() 傳回字串的寬度。 int getMaxAdvance() 傳回字的最大Advance位置
在AWT類別裡,每種字型都是一個Font物 件,可以讓使用者能取得或設定所用字 型的名稱、樣式、大小。
Font類別裡常用的方法 方法名稱 說明 boolean isPlain() 表示是否使用平體,如果是則傳回true,不是則傳回false。另有isBold()和isItalic()方法。 String getFamily() 取得字型組,就是同一字型但大小不一樣。 String getFontName() 取得字型名稱。 String toString() 將字型物件轉換成字串物件。
顏色的設定 通常分為前景顏色、背景顏色 setColor(Color 前景顏色) 前景色是元件本身要繪製的顏色,譬如 繪製字串時的字串顏色。
setBackground(Color 背景顏色) 背景色是設定視窗或是元件的背景顏色。
畫出字串的顏色就是前景色,視窗畫面 的顏色就是背景色。
自行設定顏色的Color類別的建構子 建構子名稱 說明 Color(int 紅色,int 綠色,int 藍色) 建立紅、綠、欄所組成的Color物件,若設定為float數值介於0.0~1.0間。 Color(int 顏色位元) 建立顏色位元所組成的Color物件,rgb0~7位元是藍色;8~15是綠色;16~23是紅色。
較常使用到的顏色常數: 顏色名稱 常數 black Color(0,0,0) orange Color(255,200,0) blue pink Color(255,175,175) lightGray Color(192,192,192) red Color(255,0,0) gray Color(128,128,128) white Color(255,255,255) green Color(0,255,0) yellow Color(255,255,0)
Color類別幾個常用的方法 程式CH08_04.java 方法名稱 說明 int getBlue() 傳回藍色的設定值 int getRed() 傳回紅色的設定值 int getGreen() 傳回綠色的設定值 int getRGB() 傳回RGB成分,0~7位元是藍色;8~15是綠色;16~23是紅色。
認識Graphics2D類別 為抽象類別,繼承自Graphics類別,除了繼 承Graphics類別的方法之外,還提供幾何圖 形"座標轉移"的功能。這一個座標轉移的體 系,我們稱為「使用者空間」(userspace)。
Graphics2D類別,提供以下的抽象方法 方法名稱 說明 abstract void setPaint(Paint 顏色) 提供繪製圖形線條的顏色。 abstract void setStroke(Stroke 樣式) 提供繪製圖形線條的樣式。 abstract void setFont(Font字型) 提供繪製字串的字型,是繼承自Graphics類別。 abstract void transform() 提供繪製圖形線條的座標轉換體系,無標明代表使用預設體系。 abstract void setClip(int x座標,int y座標,int 寬度,int 長度) 提供繪製圖形的邊界。是繼承自Graphics類別。 abstract void setComposite(Composite屬性) 提供兩個繪製圖形的重疊屬性。
關於Graphics2D的圖形繪製有以下方法 方法名稱 說明 abstract void draw(Shape圖形) 繪製目前Graphics物件的圖形輪廓。 abstract void fill(Shape圖形) 填滿目前目前Graphics物件的圖形。 abstract void drawString(String字串,int x座標, int y座標) 將字串s畫在座標(x,y)上。 abstract void drawstring (AttributedCharacterIterator 重繪,int x座標,int y座標) 在(x,y)上重新繪製字串。 abstract void drawImage(BufferedImage 緩衝影像, BufferedImage Op 物件, x座標,y座標) 把物件裡的緩衝影像在(x,y)處顯現出來。
點 Point2D.Float p1=new point2D.Float(x,y) 建立一個2D的點其座標值為float型態,座 標值也可以用Double型態來設定。
Point2D類別常用的方法 方法名稱 說明 abstract double getX() 傳回Point2D物件的x座標。 abstract double getY() 傳回Point2D物件的y座標。 static double distance() 傳回兩點之間的距離。 double distance(Point2D物件) 傳回物件至物件的距離。 abstract void setLocation(int x座標,int y座標 ) 設定物件座標為(x,y)。 void setLocation(Point2D物件) 設定物件的座標。 double distance(int x座標,int y座標) 傳回Point2D物件至點(x,y)的距離。
直線段與矩形 主要有三個抽象類別來定義 Line2D類別 Rectangle2D類別 RoundRectangle2D類別 程式CH08_05.java 直線段與矩形 主要有三個抽象類別來定義 Line2D類別 Rectangle2D類別 RoundRectangle2D類別
平行移動與旋轉 程式CH08_05.java 方法名稱 說明 AffineTransform getTranslate() void rotate(idouble 角度) 目前Graphics2D物件座標旋轉角度。 void rotate (double角度, double x座標, double y座標) 目前物件座標平行移動至(x,y)物置,後旋轉theta度。 void translate(double tx座標, double ty座標) 目前Graphics2D物件座標平行移動至(tx,ty)物置。 void translate(double x座標, double y座標) 目前Graphics2D物件座標平行移動至(x,y)
8-2 動畫的原理與製作 動畫原理及Timer類別 8-2 動畫的原理與製作 動畫原理及Timer類別 動畫的原理,就是將一連串的圖片,以 一定的時間間隔來依序顯示出來,並利 用視覺暫留的原理來造成移動的現象。 影像撥放的速度單位是"FPS(Frame Per Second)",也就是每秒可撥放的畫框
Timer類別的建構子語法 Timer(int 延遲時間,ActionListoner事件監 聽者)
Timer類別常用方法 程式CH08_06.java 方法名稱 說明 void addActionListener() 為物件加入事件傾聽者 void removeActionListener() 移除事件傾聽者 void setDelay() 設定時間的延遲 void start() 啟動Timer物件發出事件 void restart() 重新啟動Timer物件 void stop() 停止Timer物件發出事件
程式CH08_07.java 動畫的產生方法 圖片位置的移動 一種比較簡單的動畫表現方式,單純的利 用Timer類別,並配合圖片的載入,將圖 片顯示的位置,從畫面的一端移到另一端, 達到動畫的效果。
程式CH08_08.java 動畫迴圈 以連續的圖片利用迴圈的方式重複撥放 來形成動畫。
程式CH08_09.java
public void update(Graphics g){ paint(g); } 程式CH08_10.java 改善動畫的撥放品質 重新定義update()方法: public void update(Graphics g){ paint(g); }