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水木清华站∶精华区