BBS水木清华站∶精华区
发信人: zixia (独守空房の比特仙子), 信区: Java
标 题: 来自 JAVA 的传说15.2
发信站: BBS 水木清华站 (Tue May 12 19:13:27 1998)
来 自 Java 的 传 说 (15)
好 啦 ! 先 来 编 个 程 序 处 理 一 下 “ 按 下 鼠 标
” 这 个 事 件 , 亲 自 体 验 体 验 交 互 式 程 序 到 底 怎 么 回
事 。 这 个 程 序 会 在 你 点 鼠 标 的 位 置 上 显 示 一 个 小 红
叉 , 并 告 诉 你 这 个 小 叉 的 位 置 , 以 及 这 是 第 几 个 小
叉 。
程 序 17.1
// mouse.java
import java.awt.Graphics;
import java.awt.Event;
import java.awt.Color;
public class mouse extends java.applet.Applet
{
int num = 0; // 设 置 计 数 器
的 初 值
int px,py;
public boolean mouseDown(Event evt,int x,int y)
// “ 鼠 标 按 下 ” 处 理 { px = x;
// 取 得 按 下 鼠 标 时 的 坐 标
py = y;
num++; // 计 数 器 加 1
repaint( ); // 重 画 窗 口
return true; // 返 回 true , 表 明 事 件 处
理 过 了
}
public void update(Graphics g)
{
g.setColor(getBackground( )); // 用 背 景
色 刷 出 一 块 区 域
g.fillRect(10,300,200,60);
paint(g); // 调 用 paint( )
方 法
}
public void paint(Graphics g)
{
g.setColor(Color.green); // 设 置 当 前 画
笔 为 绿 色
g.drawString("The location of mark is
("+px+","+py+")",10,320);
g.drawString("This is NO."+num+"
point",10,340); // 输 出 点 鼠 标 时 的 坐 标 值 和 点 鼠 标
的 次 数
g.setColor(Color.red); // 在 点 了 鼠 标 的
位 置 画 一 个 小 红 叉
g.drawLine(px-5,py-5,px+5,py+5);
g.drawLine(px+5,py-5,px-5,py+5);
}
}
程 序 mouse.java 的 HTML 文 件 如 下 所 示
这 个 程 序 的 运 行 结 果 如 图 17.1 所 示 。
图 17.1 程 序 17.1 的 运 行 结 果
你 看 , 我 们 在 这 个 Java Applet 的 运 行 窗 口 里
用 小 叉 画 了 一 个 北 斗 星 座 。 只 要 程 序 还 在 运 行 , 你
在 这 个 Java Applet 里 所 做 的 任 何 一 个 点 鼠 标 操 作 都 会
被 它 用 小 红 叉 记 录 下 来 , 并 且 告 诉 你 点 中 的 位 置 。
试 一 试 , 是 不 是 很 有 趣 呢 ?
运 行 完 程 序 , 我 们 再 来 看 看 程 序 里 一 些 应 该
注 意 的 地 方 。
1.public boolean mouseDown ( Event evt , int x , int y ) {
… … }
这 就 是 处 理 鼠 标 按 下 这 一 事 件 的 方 法 , 一 旦
鼠 标 被 按 下 , 系 统 就 会 自 动 去 调 用 它 , 取 得 鼠 标 按
下 时 的 位 置 , 并 把 计 数 器 加 1 , 然 后 调 用 repaint 重 画
画 面 , 最 后 返 回 true , 告 诉 系 统 “ 鼠 标 按 下 ” 这 一
事 件 已 经 处 理 完 毕 。
这 个 程 序 中 , 我 们 用 了 两 个 以 前 从 来 没 有 用
过 的 类 : java.awt.Point 和 java.awt.Event 。 Point 对 象 用 坐
标 ( x , y ) 来 表 示 一 个 点 。 Event 就 是 本 章 的 主 角 — —
事 件 类 。 今 后 凡 是 和 鼠 标 、 键 盘 打 交 道 的 程 序 开 始
必 须 写 这 句 话 。
2.import java.awt.Event ;
有 一 个 update 方 法 你 可 能 从 来 没 见 过 。 update
的 意 思 就 是 “ 更 新 ” 。 其 实 每 次 系 统 调 用 repaint 的
时 候 , repaint 就 自 动 先 去 调 用 update , 然 后 再 调 用
paint 在 纸 上 画 画 , 这 就 是 repaint 的 调 用 过 程 。 系 统
缺 省 的 update 是 用 背 景 色 把 全 部 输 出 窗 口 都 刷 一 遍
。 可 是 这 个 程 序 里 , 我 们 想 保 留 每 次 画 的 小 叉 , 唯
一 需 要 更 新 的 是 下 面 的 输 出 信 息 , 所 以 我 们 按 照 自
己 的 需 要 改 写 了 update , 只 让 它 更 新 写 字 的 区 域 ,
而 把 画 小 叉 的 区 域 保 留 不 变 。( 待 续 )
--
爱情来得快去得也快,只有猪肉卷是永恒的.
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.5.75]
BBS水木清华站∶精华区