第 一 篇 基 礎 圖 文 動 畫 (Basic Graphics / Animation) 2 1 簡 介 2 2 Frame Class 2 3 執 行 緒 繪 圖 流 程 2 4 Font Class 2 5 Color Class 2 6 中 文 處 理 2 7 習 題 (Exercises) 第 二 章 文 字 繪 製 (Words)
2 1 簡 介 本 書 探 討 的 是 動 畫 遊 戲, 有 文 字 有 影 像 有 動 畫, 這 些 都 需 要 一 個 環 境 來 顯 示, 常 用 的 顯 示 工 具 為 框 架 (Frame) 與 瀏 覽 器 (Browser), 前 者 可 用 於 單 機 顯 示 或 多 機 網 路 對 陣 ; 後 者 可 用 於 單 機 網 路 顯 示, 兩 者 本 書 都 將 詳 細 介 紹 本 章 將 使 用 框 架 來 顯 示 基 礎 圖 文 繪 製 2 22 Frame Class java.awt.frame 繼 承 (extends) 自 Window Container Component Object, 此 類 別 物 件 可 建 立 一 個 視 窗 外 框, 配 合 Java 程 式, 提 供 單 機 圖 文 或 多 機 網 路 對 陣 圖 文 之 顯 示 Constructor: public Frame() Public Frame(String title) Public Methods: getcursortype(): 已 過 時, 用 component.getcursort 代 替 gettitle()
2 22 Frame Class setcursortype(int cursortype) : 用 component.setcursort(int Cursor) 代 替 boolean ir isresizable() i bl() settitle(string title) setresizable(boolean l resizable) setsize(int w, int h): set frame size setvisible(true) dispose(): close frame and release resources 範 例 1: 設 計 檔 案 Ex2_2_1.java 其 功 能 為 解 釋 視 窗 框 架 之 建 立 01 import java.awt.*; 02 class Ex2_2_1 { 03 public Ex2_2_1() { 04 Frame frame = new Frame("Ex2_2_1"); 05 frame.setsize(350, 350); 06 frame.setvisible(true); 07 } 08 public static void main(string[] args) { 09 Ex2_2_1 2 workstart = new Ex2_2_1(); 2 10 } 11 }
範 例 2: 比 較 範 例 1, 設 計 檔 案 Ex2_2_2.java 其 功 能 為 解 釋 繼 承 類 別 Frame 之 使 用 方 法 01 import java.awt.*; 02 public class Ex2_2_2 extends Frame { 03 public Ex2_2_2() { 04 super("ex2_2_2"); 05 setsize(350, 350); 06 setvisible(true); 07 } 08 public static void main(string args[]) { 09 Ex2_2_2 Ex222workStart=new Ex222(); Ex2_2_2(); 10 } 11 }
2 3 執 行 緒 繪 圖 流 程 在 繪 圖 或 遊 戲 應 用 上, 發 生 事 件 的 區 域 範 圍 不 僅 廣 大 且 數 量 也 多 不 勝 數, 在 程 式 設 計 中, 我 們 必 須 考 量 事 件 執 行 緒 同 步 並 行 之 安 排, 在 CPU 能 力 允 許 下, 各 執 行 緒 競 爭 進 入 CPU 執 行, 以 使 提 高 執 行 效 率 為 了 達 到 這 些 之 要 求, 我 們 使 用 Thread 類 別 Runnable 介 面 Component 類 別 執 行 緒 繪 圖 程 式 流 程 格 式 01 public class mywork extends Frame implements Runnable { 02 public static void main(string args[]) { 03 mywork workstart=new mywork (); 04 } 05 public mywork () { 06 super("mywork"); 07 setsize(350, 350); 08 setvisible(true); 09 new Thread(this).start(); 10 } 11 public void run() { 12 13 repaint(); 14 } 15 public void paint(graphics p g) { 16 17 } 18 }
2 4 Font Class java.awt.font 繼 承 (extends) 自 Object, 此 類 別 物 件 定 義 字 型 的 規 格, 包 括 字 型 名 稱 ( 如 Times New Roman) 字 型 樣 式 ( 如 Bold) 字 型 大 小 ( 如 10) Constructor: Font(String name, int style, int size) Name: 字 型 名 稱, Ex: Bt Batang, Times New Roman Style: 字 型 樣 式, Ex: BOLD, ITALIC, PLAIN size: 字 型 大 小 Public Methods: String getname() 2 4 Font Class String getstyle() String getsize() boolean isbold(), isitalic(), isplain()
範 例 3: 設 計 檔 案 Ex241.java 其 功 能 為 解 釋 如 何 以 類 別 Font 建 立 字 型 物 件? 01 import java.awt.*; awt 02 import java.awt.event.*; 03 import java.awt.graphics; 04 import tjava.awt.font; tf t 05 public class Ex2_4_1 extends Frame implements Runnable { 06 Font messagefont; 07 String message; 08 public static void main(string args[]) { 09 Ex2_4_1 workstart=new Ex2_4_1(); 10 } 範 例 3 續 11 public Ex2_4_1() { 12 super("ex2_4_1"); 13 setsize(350, 350); 14 setvisible(true); 15 new Thread(this).start(); 16 } 17 public void run() { 18 messagefont = new Font("TimesRoman", Font.PLAIN, 20); 19 message = "This is a test string"; 20 repaint(); 21 } 22 public void paint(graphics g) { 23 g.setfont(messagefont); 24 g.drawstring(message, 5, 50); 25 } 26 }
Bold!!
範 例 4: 設 計 檔 案 Ex2_4_2.java 其 功 能 為 解 釋 類 別 Font 各 生 存 實 體 方 法 程 序 之 應 用? 01 import java.awt.*; 02 import java.awt.event.*; 03 import java.awt.graphics; 04 import java.awt.font; 05 public class Ex2_4_2 extends Frame implements Runnable { 06 Font messagefont; 07 String message; 08 public static void main(string args[]) { 09 Ex2_4_2 workstart=new Ex2_4_2(); 10 } 11 public Ex2_4_2() { 12 super("ex2_4_2"); 13 setsize(350, 350); 14 setvisible(true); 15 new Thread(this).start(); 16 } 範 例 4 續 17 public void run() { 18 messagefont = new Font("TimesRoman", Font.PLAIN, 20); 19 message = "This is a test tstring"; ti 20 System.out.println("getName() : " + messagefont.getname()); 21 System.out.println("getStyle() : " + messagefont.getstyle()); 22 System.out.println("getSize() Si () : " + messagefont.getsize()); 23 System.out.println("isBold() : " + messagefont.isbold()); 24 System.out.println("isItalic() : " + messagefont.isitalic()); 25 System.out.println("isPlain() : " + messagefont.isplain()); 26 repaint(); 27 } 28 public void paint(graphics g) { 29 g.setfont(messagefont); 30 g.drawstring(message, 5, 50); 31 } 32 }
2 5 Color Class java.awt.color 繼 承 (extends) 自 Object, 為 public final Class, 此 類 別 物 件 用 於 定 義 顏 色 值, 因 是 final 類 別, 故 不 得 被 繼 承 使 用 Constructor public Color (int r, int g, int b) r, g, b=0 ~ 255. public Color (int rgb) RGB=oxd4ff00, RGB= 2818304 public Color(double r, double g, double b) r=0.83f, g=1.0f, b=0.0f
Class variables 2 5 Color Class black, blue, cyan, darkgray, gray, lightgray, magenta, orange, pink, red, white, yellow Public methods: int getred(), int getgreen(), int getblue(), int getrgb() 範 例 5: 設 計 檔 案 Ex2_5_1.java 其 功 能 為 解 釋 類 別 Color 建 構 子 參 數 顏 色 值 之 設 定 01 import java.awt.*; 02 import tjava.awt.event.*; t* 03 import java.awt.graphics; 04 import java.awt.font; 05 public class Ex2_5_1 extends Frame implements Runnable { 06 Font messagefont; 07 String message; 08 Color color1, color2, color3; 09 public static void main(string args[]) { 10 Ex2_5_1 workstart=new Ex2_5_1(); 11 }
範 例 5 續 1 12 public Ex2_5_1() { 13 super("ex2_5_1"); 14 setsize(350, 350); 15 setvisible(true); 16 new Thread(this).start(); hi () 17 } 18 public void run() { 19 color1 = new Color(212, 255, 0); 20 color2 = new Color(0xd4ff00); 21 color3 = new Color(0.83f, 1.0f, 0.0f); 22 messagefont = new Font("TimesRoman", Font.PLAIN, 20); 23 message = "This is a test string"; 24 repaint(); 25 } 範 例 5 續 2 26 public void paint(graphics g) { 27 g.setfont(messagefont); 28 g.setcolor(color1); 29 g.drawstring(message, 5, 50); 30 g.setfont(messagefont); 31 g.setcolor(color2); 32 g.drawstring(message, 5, 100); 33 g.setfont(messagefont); 34 g.setcolor(color3); 35 g.drawstring(message, 5, 150); 36 } 37 }
範 例 6: 設 計 檔 案 Ex2_5_2.java 其 功 能 為 解 釋 Color Class 之 類 別 常 數 01 import java.awt.*; 02 import java.awt.event.*; 03 import java.awt.graphics; 04 import java.awt.font; 05 import java.awt.color; 06 public class Ex2_5_2 extends Frame implements Runnable { 07 Font messagefont; 08 String message; 09 public static void main(string args[]) { 10 Ex252workStart=new Ex2_5_2 Ex2_5_2(); Ex252(); 11 } 12 public Ex2_5_2() { 13 super("ex252"); Ex2_5_2 14 setsize(350, 350); 15 setvisible(true); 16 new Thread(this).start(); start(); 17 }
範 例 6 續 18 public void run() { 19 messagefont = new Font("TimesRoman", Font.PLAIN, 30); 20 message = "This is a test string"; 21 repaint(); 22 } 23 public void paint(graphics g) { 24 g.setfont(messagefont); 25 g.setcolor(color.blue); 26 g.drawstring(message, 5, 50); 27 } 28 }
範 例 6.5: 設 計 檔 案 Ex2_5_3.java 其 功 能 為 解 釋 Color Class 讀 取 顏 色 值 之 實 體 方 法 程 序, 執 行 時 必 須 配 合 新 物 件 之 生 存 才 可 使 用 01 import java.awt.*; 02 import java.awt.event. awt *; 03 import java.awt.graphics; 04 import java.awt.font; 05 public class Ex2_5_3 extends Frame implements Runnable { 06 Font messagefont; 07 String message; 08 Color color; 09 public static void main(string args[]) { 10 Ex2_5_3 workstart=new Ex2_5_3(); 11 } 範 例 6.5 續 1 12 public Ex2_5_3() { 13 super("ex2_5_3"); ("E253") 14 setsize(350, 350); 15 setvisible(true); 16 new Thread(this).start(); 17 } 18 public void run() { 19 color = new Color(212, 255, 0); 20 messagefont = new Font("TimesRoman", Font.PLAIN, 20); 21 message = "This is a test string";
範 例 65 6.5 續 2 22 System.out.println("getRed() Rd() : " + color.getred()); 23 System.out.println("getGreen() : " + color.getgreen()); 24 System.out.println("getBlue() : " + color.getblue()); 25 System.out.println("getRGB() : " + color.getrgb()); 26 repaint(); 27 } 28 public void paint(graphics g) { 29 g.setfont(messagefont); 30 g.setcolor(color); 31 g.drawstring(message, 5, 50); 32 } 33 }
2 6 中 文 處 理 於 2 4 節 曾 述 及 類 別 Font 之 功 能, 其 產 生 的 物 件 可 定 義 字 型 之 格 式, 建 構 子 參 數 name 為 字 型 名 稱, 如 Batang Times New Roman 標 楷 體 等 ; 參 數 style 為 字 型 樣 式, 如 BOLD( 粗 體 ) ITALIC( 斜 體 ) PLAIN( 標 準 ); 參 數 size 為 字 型 大 小, 如 10 12 等
範 例 7: 設 計 檔 案 Ex2_6_1.java 其 功 能 為 解 釋 中 文 字 型 之 繪 製 01 import java.awt.*; 02 import java.awt.event. awt *; 03 import java.awt.graphics; 04 import java.awt.font; 05 import java.awt.color; awt 06 public class Ex2_6_1 extends Frame implements Runnable { 07 Font messagefont1; 08 Font messagefont2; 09 String message; 10 public static void main(string args[]) { 11 Ex2_6_1 workstart=new Ex2_6_1(); 12 } 範 例 7 續 1 13 public Ex2_6_1() { 14 super("ex2_6_1"); 15 setsize(350, 350); 16 setvisible(true); 17 new Thread(this).start(); 18 } 19 public void run() { 20 messagefont1 = new Font(" 新 細 明 體 ", Font.PLAIN, 30); 21 messagefont2 = new Font(" 標 楷 體 ", Font.PLAIN, 30); 22 message = " 中 文 字 串 "; 23 repaint(); 24 }
25 public void paint(graphics g) { 26 g.setfont(messagefont1); 27 g.setcolor(color.blue); 28 g.drawstring(message, 5, 50); 29 g.setfont(messagefont2); 30 g.setcolor(color.green); 31 g.drawstring(message, 5, 100); 32 } 33 } 範 例 7 續 2
範 例 8: 設 計 檔 案 Ex2_6_2.java 其 功 能 為 解 釋 同 時 設 定 中 文 / 英 文 之 字 型 名 稱 或 兩 種 字 型 樣 式 01 import java.awt.*; 02 import java.awt.event.*; 03 import tjava.awt.graphics; tg 04 import java.awt.font; 05 import java.awt.color; 06 public class Ex2_6_2 extends Frame implements Runnable { 07 Font messagefont1, messagefont2, messagefont3, messagefont4; 08 String message; 09 public static void main(string args[]) { 10 Ex2_6_2 workstart=new Ex2_6_2(); 11 } 12 public Ex2_6_2() { 13 super("ex2_6_2"); 14 setsize(350, 350); 範 例 8 續 1 15 setvisible(true); 16 new Thread(this).start(); 17 } 18 public void run() { 19 messagefont1 = new Font(" 新 細 明 體 "+"TimesRoman", Font.PLAIN, 30); 20 messagefont2 = new Font(" 新 細 明 體 "+"Monotype Corsiva", Font.PLAIN, 30); 21 messagefont3 = new Font("Monotype Corsiva", Font.PLAIN, 30); 22 messagefont4 = new Font(" 標 楷 體 "+"Monotype Corsiva", Font.ITALIC + Font.PLAIN, 30); 23 message = " 中 文 字 串 English String"; 24 repaint(); 25 }
26 public void paint(graphics g) { 27 g.setfont(messagefont1); 28 g.setcolor(color.blue); 29 g.drawstring(message, 5, 50); 30 g.setfont(messagefont2); 31 g.setcolor(color.gray); 32 g.drawstring(message, gda g( 5, 100); 33 g.setfont(messagefont3); 34 g.setcolor(color.red); 35 g.drawstring(message, 5, 150); 36 gsetfont(messagefont4); g.setfont(messagefont4); 37 g.setcolor(color.yellow); 38 g.drawstring(message, 5, 200); 39 } 40 } 範 例 8 續 2
2 7 習 題 (Exercises) 01 類 別 Frame 之 功 能 為 何? 01 類 別 Frame 之 功 能 為 何? 02 建 構 子 public Frame(String title) 之 參 數 有 何 意 義? 03 如 果 設 計 一 個 繼 承 類 別 Frame 的 程 式, 較 以 Frame 產 生 新 物 件, 有 何 優 勢? 試 述 執 行 緒 之 意 義 04 試 述 執 行 緒 之 意 義 05 當 執 行 緒 以 start() 開 始 執 行 時, 將 呼 叫 何 者 方 法 程 序 執 行? 06 Component 類 別 提 供 方 法 程 序 paint(graphics g) 之 功 能 為 何? p p ( p g) 07 類 別 Font 之 功 能 為 何? 08 類 別 Color 之 功 能 為 何? 09 如 何 設 定 顏 色 值? 09 如 何 設 定 顏 色 值? 10 當 用 於 設 定 中 文 字 型 時, 如 何 作 字 型 設 定? 11 當 同 時 設 定 中 文 / 英 文 之 字 型 時, 如 何 執 行? 12 當 同 時 設 定 中 文 / 英 文 之 字 型 時, 有 那 些 注 意 事 項?