BBS水木清华站∶精华区

发信人: zixia (独守空房の比特仙子), 信区: Java 
标  题: 来自 JAVA 的传说14.1 
发信站: BBS 水木清华站 (Tue May 12 20:59:11 1998) 
 
                来 自 Java 的 传 说 (14)  
                                作者 : 清 华 大 学 教 授 : 王 克 宏 
                        教 学 纲 要 
 
你 现 在 已 经 可 以 在 Java 程 序 里 写 各 种 各 样 的 字 了 , 那 么 有 
没 有 想 过 再 加 点 图 形 , 让 你 的 主 页 看 上 去 更 加 优 美 呢 ? 这 一 节 
我 们 将 继 续 学 习 如 何 使 用 Graphics 类 提 供 的 各 种 绘 图 方 法 , 发 挥 
你 的 创 造 力 , 画 出 漂 亮 的 图 形 。 
 多 边 形 
能 够 画 矩 形 、 椭 圆 和 弧 似 乎 还 不 能 满 足 作 图 的 需 要 。 这 一 节 里 
将 介 绍 多 边 形 的 绘 图 方 法 , 而 实 际 上 绘 制 多 边 形 就 是 给 定 两 组 
坐 标 , 一 组 x 坐 标 , 一 组 y 坐 标 , 按 顺 序 将 给 定 的 这 一 组 坐 标 连 
接 起 来 就 可 以 绘 出 一 个 多 边 形 , 绘 制 多 边 形 的 基 本 方 法 格 式 如 
下 : 
      drawPolygon ( int x[ ], int y[ ], int n ) 
      fillPolygon ( int x[ ], int y[ ], int n ) 
 这 两 个 方 法 中 , 参 数 中 x[ ] 、 y[ ] 分 别 是 多 边 形 顶 点 的 x 坐 标 
和 y 坐 标 , n 表 示 多 边 形 的 顶 点 数 。 drawPolygon 并 不 能 自 动 形 成 
封 闭 区 域 , 所 以 要 绘 制 封 闭 多 边 形 , 必 须 确 保 第 一 个 顶 点 和 最 
后 一 个 顶 点 坐 标 相 同 。 fillPolygon 则 无 需 这 样 做 。 
 如 果 想 在 图 中 的 另 一 个 区 域 画 一 个 同 样 的 多 边 形 , 你 会 怎 
么 做 呢 ? 重 复 前 面 的 每 一 条 指 令 , 并 修 改 每 个 点 的 坐 标 。 哦 ! 
可 千 万 别 那 样 做 。 现 在 就 介 绍 一 种 可 以 轻 轻 松 松 解 决 这 个 问 题 
的 方 法 --copyArea 。 其� 样 做 的 。 例 如 : 
      Image getImage ( "http://xxx . yyy . edu /Applet / classes / Image1.gif "); 
      Image getImage ( "file:/D:/image/ ” , " example.gif " );  
 标 准 格 式 如 下 : 
      copyArea ( int x0 , int y0 , int width , int height , int x1 , itn y1 ) 
 前 面 的 四 个 参 数 应 该 都 很 熟 悉 了 , 它 们 指 定 了 要 复 制 的 矩 
形 区 域 , 最 后 两 个 参 数 表 示 所 要 复 制 的 区 域 距 原 位 置 的 x 、 y 偏 
移 量 。 当 x1 和 y1 为 负 , 复 制 到 原 位 置 的 左 边 或 上 边 。 反 之 若 x1 
和 y1 为 正 , 则 复 制 到 右 边 和 下 边 。 
 你 想 试 试 这 个 方 法 有 多 好 用 吗 ? 试 试 下 面 的 程 序 吧  
程 序 16.4     // poly.java 
    import java.awt.Graphics; 
    import java.awt.Color; 
    public class poly extends java.applet.Applet 
    { int poly1_x[ ] = {10,20,80,90,50,10}; // 指 定 第 一 个 多 边 形 的 x 、 y 坐 
标 
            int poly1_y[ ] = {20,10,10,20,60,20}; 
            int poly1_L url ); 
      Image getImage ( URL url , String name ); 
      URL 是 Uniform Resource Locator ( 统 一 资 源 定 位 器 ) 的 缩 写 
, 它 是 WWW 上 用 来 指 示 Internet 信 息 资 源 位 置 的 方 法 。 Java 定 义 
的 URL 对 象 指 定 了 一 个 网 络 资 源 的 位 置 。 getImage 方 法 返 回 一 个 
Image 对 象 。 当 然 , 我 们 可 以 把 文 件 名 及 其 位 置 整 个 看 做 一 个 
URL 对 象 来 指 示 所 要 加 载 的 图 形 文 件 。 这 种 情 况 就 采 用 第 一 种 
格 式 。 同 样 也 可 以 用 图 形 文 件 的 位 置 和 文 件 名 分 别 指 定 它 , 可 
见 第 二 种 格 式 就 是 誴tnum = 6; // 指 定 第 一 个 多 边 形 的 边 数 
            int poly2_x[ ] = {110,120,180,190,150,110}; // 指 定 第 二 个 多 
边 形 的 x 、 y 坐 标 
            int poly2_y[ ] = {20,10,10,20,60,20}; 
            int poly2_ptnum = 6; // 指 定 第 二 个 多 边 形 的 边 数 
        public void paint(Graphics g) 
        { 
            g.drawPolygon(poly1_x,poly1_y,poly1_ptnum); // 以 省 缺 的 
颜 色 画 第 一 个 多 边 形 
            g.setColor(Color.pink); 
            g.fillPolygon(poly2_x,poly2_y,poly2_ptnum); // 用 粉 色 填 充 
第 二 个 多 边 形 
            g.copyArea(108,8,85,60,-50,50); // 把 第 二 个 多 边 形 拷 贝 到 
距 原 位 置 向 左 50 , 向 右 50 的 位 置 
        } 
    } 
      该 程 序 的 HTML 文 件 如 下 所 示 :  
编 辑 完 以 后 , 顺 利 通 过 编 译 就 可 以 运 行 了 , 运 行 结 果 如 图 16.7 
所 示 :  
  
图 16.7 程 序 16.4 运 行 结 果  
 现 � 这 句 话 就 可 以 用 getImage 来 加 载 图 片 了 。 其 标 准 格 式 为 : 
      Image getImage ( UR� 图 中 有 三 个 钻 石 形 状 的 多 边 形 , 而 我 们 只 用 了 两 次 画 
多 边 形 的 方 法 , 中 间 那 个 钻 石 就 是 用 copyArea 画 出 来 的 。 
 加 载 现 成 的 图 片 
 一 帧 复 杂 的 图 形 画 面 , 我 们 不 可 能 在 程 序 执 行 时 通 过 调 用 
各 种 绘 图 方 法 实 时 地 画 出 来 。 大 部 分 的 图 形 都 是 早 在 开 发 程 序 
前 就 用 其 他 绘 图 软 件 绘 制 好 了 , 程 序 执 行 时 。 直 接 把 图 片 加 载 
进 来 并 放 在 适 当 的 位 置 。 这 一 节 我 们 将 学 习 如 何 使 用 Java 图 形 
功 能 在 主 页 里 加 入 各 式 各 样 的 图 片 。 Java 支 持 WWW 上 最 流 行 的 
图 象 格 式 --JPEG 和 GIF 。 通 常 JPEG 更 适 于 自 然 色 彩 的 图 片 , 如 照 
片 , 而 GIF 则 比 较 适 合 装 饰 图 片 、 花 边 和 小 动 画 。 
 首 先 来 看 看 Java 如 何 载 入 形 成 的 图 形 文 件 。 其 实 很 简 单 , 
只 要 给 定 要 加 载 的 图 形 文 件 的 位 置 和 文 件 名 , 就 可 以 通 过 
getImage 这 个 方 法 来 把 图 片 加 载 到 程 序 中 。 这 里 所 说 的 文 件 位 置 
不 仅 仅 是 指 文 件 在 本 地 硬 盘 的 存 放 路 径 , Java 程 序 还 可 以 根 据 
指 定 的 URL , 直 接 加 载 网 络 上 的 图 形 文 件 , 也 就 是 说 加 载 的 图 
形 可 以 在 本 机 硬 盘 上 , 也 可 以 在 网 络 上 。 对 于 编 程 者 而 言 , 两 
者 的 使 用 一 样 简 单 。 
 在 Applet 中 加 载 图 片 就 不 得 不 使 用 Image 这 个 类 , 和 前 面 用 
过 的 许 多 类 一 样 , Image 也 在 java.awt 程 序 包 里 。 所 以 , 如 果 要 编 
写 一 个 包 含 有 图 片 的 Applet , 就 应 该 记 住 在 程 序 开 头 加 上 这 句 
话 : 
      import java.awt.Image; 
写 上 
-- 
 
        爱情来得快去得也快,只有猪肉卷是永恒的. 
 
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.5.75] 

BBS水木清华站∶精华区