BBS水木清华站∶精华区

发信人: zixia (独守空房の比特仙子), 信区: Java 
标  题: 来自 JAVA 的传说14.2 
发信站: BBS 水木清华站 (Tue May 12 21:00:44 1998) 
 
                来 自 Java 的 传 说 (14) 
 
                 显 示 图 形 
 
 加 载 了 图 形 , 怎 样 把 它 按 要 求 在 程 序 里 显 示 出 来 呢 ? Graphics 
类 里 提 供 了 drawImage 这 个 方 法 把 Image 对 象 在 程 序 里 绘 制 出 来 。 如 
果 只 是 按 原 样 显 示 图 形 , 就 可 以 这 样 写 : 
      g.drawImage ( picture , x , y , this ); 
其 中 picture 是 一 个 Image 对 象 , (x , y) 是 图 形 的 坐 标 , this 指 的 是 g 这 个 
Graphics 对 象 。 
 现 在 看 到 的 图 象 已 经 相 当 不 错 了 , 不 过 我 们 还 可 以 在 图 形 显 
示 时 增 加 一 些 有 趣 的 处 理 。 你 可 以 改 变 图 形 的 背 景 , 还 可 以 任 意 
缩 放 图 形 。 看 下 面 这 两 条 语 句 就 是 这 样 做 的 : 
      g.drawImage ( picture , x, y, clr , this ); 
      g.drawImage ( picture , x, y, width, height , this ); 
其 中 clr 指 定 了 显 示 图 片 的 背 景 色 , width 和 height 指 定 了 图 片 输 出 的 
大 小 。  
* 设 置 图 片 的 背 景 色 效 果 时 , 只 有 图 片 具 有 透 明 属 性 才 能 看 得 出 
来 , 如 果 设 置 了 底 色 , 而 不 显 示 , 说 明 你 所 加 载 的 图 片 是 不 透 明 
的 。  
讲 了 这 么 多 , 编 个 程 序 看 看 吧 ! 
程 序 16.5 
    import java.awt.Image;  
      import java.awt.Graphics;  
      import java.awt.Color;  
      public class picture extends java.applet.Applet  
      {  
          Image picture1,picture2; // 定 义 两 个 Image 类 型 的 对 象  
          public void init( ) // 加 载 图 片 , 把 sunjava.gif 加 载 到 picute1 , 
window.jpg 加 载 到 picture2  
          {  
            picture1 = getImage(getDocumentBase( ),"sunjava.gif");  
            picture2 = getImage(getDocumentBase( ),"window.jpg");  
          }  
          public void paint(Graphics g)  
          {  
            g.drawImage(picture1,0,0,this); // 以 ( 0 , 0 ) 为 左 上 角 按 原 
样 显 示 picture1  
              // 以 ( 0 , 240 ) 为 左 上 角 , 将 picture1 拉 伸 到 200 × 
100 , 然 后 再 显 示  
            g.drawImage(picture1,0,240,200,100,this);  
            g.drawImage(picture2,220,0, this); // 以 ( 220 , 0 ) 为 左 上 角 
按 原 样 显 示 picture2  
          }  
      } 
      该 程 序 的 HTML 文 件 如 下 所 示 :  
 编 辑 完 以 后 , 顺 利 通 过 编 译 就 可 以 运 行 了 , 运 行 结 果 如 图 16.8 
所 示 :  
  
图 16.8 程 序 16.5 运 行 结 果  
这 里 请 大 家 注 意 加 载 图 片 的 这 两 条 语 句  
      picture1 = getImage(getDocumentBase( ),"sunjava.gif"); 
      picture2 = getImage(getDocumentBase( ),"window.jpg");  
 其 中 getDocumentBase( ) 给 出 了 包 含 这 个 Applet 的 HTML 的 URL , 这 
是 什 么 意 思 呢 ? 也 就 是 说 它 指 明 了 你 的 Java 程 序 在 主 机 上 存 放 的 位 
置 , 按 照 这 个 路 径 , 系 统 才 能 找 到 你 所 加 载 的 图 片 。 
 为 什 么 要 用 getDocumentBase( ) 呢 ? 我 直 接 告 诉 它 不 就 行 了 吗 ? 
可 是 你 想 过 没 有 , 如 果 你 把 整 个 目 录 树 挪 了 地 方 , 而 不 修 改 程 序 
里 的 路 径 , 系 统 还 能 按 你 所 给 的 绝 对 路 径 找 到 图 片 吗 ? 当 然 不 能 
。 所 以 这 里 用 了 getDocumnetBase( ), 这 样 你 就 可 以 放 心 地 挪 动 你 的 目 
录 , 而 无 需 每 挪 一 次 就 去 修 改 程 序 。 不 论 你 怎 么 移 动 目 录 
getDocumentBase( ) 总 能 找 到 那 个 包 含 了 Java 程 序 的 HTML , 找 到 它 我 
们 就 可 以 按 相 对 路 径 找 到 所 要 加 载 的 图 片 。  
* 我 实 在 不 想 去 考 虑 什 么 目 录 树 、 路 径 这 些 难 缠 的 问 题 , 我 想 就 
像 程 序 里 那 样 在 getDocumentBase( ) 后 面 直 接 写 图 片 文 件 的 文 件 名 。 
好 主 意 ! 想 那 样 做 很 容 易 , 你 只 需 要 把 那 个 图 片 文 件 和 包 含 了 这 
个 Applet 的 HTML 文 件 放 在 同 一 个 目 录 下 就 行 了 。  
小 结 
 这 一 章 的 学 习 到 此 就 结 束 了 , Java 多 姿 多 彩 的 图 形 效 果 为 你 的 
主 页 增 色 不 少 。 总 结 一 下 本 章 所 讲 述 的 内 容 , 我 们 在 这 一 章 里 学 
习 了 :  
用 各 种 丰 富 的 绘 图 指 令 画 出 线 、 矩 形 、 椭 圆 、 弧 、 多 边 形 等 
各 式 各 样 的 图 形 。  
drawLine 用 来 画 线 , drawRect 和 fillRect 画 的 是 空 心 和 实 心 的 矩 形 
, drawRoundRect 和 fillRoundRect 是 画 圆 角 矩 形 的 方 法 , 可 以 用 
fill3Drect 画 出 具 有 3 维 立 体 效 果 的 矩 形 , 当 然 也 可 以 完 全 自 己 
画 。  
用 drawOral 和 fillOral 画 空 心 和 实 心 的 椭 圆 , drawArc 可 以 画 一 段 
弧 , fillArc 画 的 是 一 个 扇 形 , drawPolygon 和 fillPolygon 是 画 多 边 
形 的 两 种 方 法 。  
用 getImage 在 Java Applet 中 加 载 现 成 的 图 形 , 你 不 仅 可 以 自 己 
在 程 序 中 画 图 , 还 能 够 利 用 别 的 图 形 处 理 专 业 软 件 为 你 的 程 
序 作 出 精 美 的 图 片 , 然 后 直 接 加 载 到 程 序 中 。  
加 载 了 图 片 靠 drawImage 把 它 显 示 出 来 。  
 学 习 完 本 章 , 可 以 在 主 页 里 加 入 各 种 栩 栩 如 生 的 图 片 了 , 美 
中 不 足 的 是 它 们 都 是 静 态 的 , 试 想 一 下 , 主 页 里 的 图 形 动 起 来 , 
能 够 用 鼠 标 、 键 盘 控 制 该 会 多 么 令 人 振 奋 。 接 着 学 习 以 后 的 两 章 
, 你 就 能 够 通 过 自 己 的 努 力 实 现 这 个 愿 望 。 ( 待 续 )  
-- 
 
        爱情来得快去得也快,只有猪肉卷是永恒的. 
 
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.5.75] 

BBS水木清华站∶精华区