BBS水木清华站∶精华区

发信人: zixia (独守空房の比特仙子), 信区: Java 
标  题: 来自 JAVA 的传说15.1 
发信站: BBS 水木清华站 (Tue May 12 19:11:58 1998) 
 
 
  
来 自 Java 的 传 说 (15)  
作者 : 清 华 大 学 教 授 : 王 克 宏 
教 学 纲 要 
有 了 Java , 你 和 Homepage 的 交 互 不 仅 仅 是 点 
击 某 个 字 、 按 钮 或 者 图 , 它 切 换 成 下 一 页 。 Java 为 
浏 览 Homepage 的 用 户 提 供 了 地 地 道 道 的 交 互 。 包 含 
了 Java 程 序 的 Homepage 知 道 你 需 要 它 做 什 么 , 而 不 
是 简 简 单 单 地 切 换 到 下 一 页 。 你 一 定 认 为 这 是 理 所 
当 然 的 , 可 是 没 有 Java 以 前 , 事 情 可 没 这 么 简 单 。 
 交 互 的 Java 世 界  
鼠 标 引 发 的 各 种 事 件  
编 写 自 己 的 事 件 处 理 代 码  
键 盘 引 发 的 事 件  
在 Internet 上 实 现 与 程 序 的 实 时 交 互  
 也 许 你 要 问 “ Java 怎 么 知 道 我 点 了 鼠 标 ? 按 
了 哪 个 键 ? ” 它 当 然 知 道 。 你 对 鼠 标 或 键 盘 的 如 何 
操 作 对 Java 而 言 都 称 之 为 “ 事 件 ” , 例 如 : 移 动 鼠 
标 , 点 击 鼠 标 , 按 下 某 个 按 键 … … 。 这 些 事 件 发 生 
了 以 后 , 系 统 就 会 通 知 Java 去 处 理 , 就 好 比 你 按 了 
门 铃 , 让 主 人 来 为 你 开 门 一 样 。 在 这 一 章 里 , 你 将 
学 会 编 写 这 种 交 互 式 的 程 序 来 响 应 鼠 标 和 键 盘 的 输 
入 , 让 Java 干 你 想 让 它 干 的 事 情 。 你 可 以 让 它 告 诉 
你 当 前 鼠 标 所 处 的 位 置 , 拖 动 鼠 标 画 你 想 画 的 东 西 
, 或 者 用 键 盘 控 制 Homepage 中 图 形 的 位 置 , 甚 至 可 
以 编 一 个 由 鼠 标 控 制 的 小 游 戏 。 
你 对 鼠 标 做 了 什 么 
 你 对 鼠 标 所 做 的 任 何 操 作 , 系 统 都 会 产 生 一 
个 所 谓 “ 事 件 ” 通 知 Java 。 如 果 鼠 标 被 按 下 , Java 将 
得 到 一 个 来 自 系 统 的 通 知 --MOUSE_DOWN 。 那 么 释 放 
鼠 标 , 是 不 是 就 是 MOUSE_UP 呢 ? 没 错 , 就 是 这 样 。 
可 是 鼠 标 通 常 都 有 两 、 三 个 按 键 , Java 怎 么 知 道 我 
按 的 是 哪 一 个 呢 ? 不 用 担 心 , Java 对 所 有 的 鼠 标 按 
键 都 一 视 同 仁 , 只 要 你 按 了 键 , MOUSE_DOWN 事 件 
就 产 生 , 不 管 按 的 是 哪 一 个 。 
 对 鼠 标 的 操 作 可 不 仅 仅 是 按 下 或 释 放 , 其 实 
用 的 最 多 的 还 是 移 动 鼠 标 。 一 旦 你 移 动 了 鼠 标 , 
Java 就 会 从 系 统 那 里 得 到 一 个 MOUSE_MOVE 的 通 知 。 
鼠 标 移 动 还 有 另 一 种 方 式 , 那 就 是 拖 动 , 它 和 移 动 
有 什 么 不 同 呢 ? 移 动 时 并 未 按 鼠 标 按 键 , 它 产 生 的 
事 件 是 MOUSE_MOVE 。 如 果 你 移 动 鼠 标 的 同 时 还 按 
住 了 鼠 标 按 键 , 这 就 是 拖 动 , 它 产 生 的 事 件 将 不 再 
是 MOUSE_MOVE , 而 是 MOUSE_DRAG 了 。 
 Java Applet 对 鼠 标 的 动 作 可 以 非 常 敏 感 , 只 
要 鼠 标 进 入 Applet 窗 口 的 范 围 , 它 就 会 有 所 反 应 , 
这 是 通 过 MOUSE_ENTER 实 现 的 , MOUSE_ENTER 表 示 
鼠 标 指 针 进 入 到 Applet 的 范 围 , 反 之 , MOUSE_EXIT 
就 是 鼠 标 离 开 时 产 生 的 事 件 了 。 
 你 也 许 要 奇 怪 了 , “ 前 面 编 了 这 么 多 Java 程 序 
, 我 对 鼠 标 作 了 这 么 多 操 作 , 怎 么 都 没 有 反 应 呢 ? 
” 当 然 不 会 有 反 应 ! 因 为 系 统 虽 然 通 知 了 Java , 鼠 
标 做 了 什 么 , 键 盘 被 按 了 哪 个 键 , 可 是 Java 并 没 有 告 
诉 系 统 , 鼠 标 或 键 盘 动 作 了 以 后 应 该 作 何 反 应 。 就 
好 像 门 铃 响 了 , 你 知 道 去 开 门 ; 电 话 铃 响 了 , 应 该 
接 电 话 。 我 们 也 可 以 通 过 自 己 编 写 的 Java 程 序 , 告 
诉 系 统 对 鼠 标 、 键 盘 的 操 作 做 出 相 应 的 反 应 。 
鼠 标 被 按 下 了 
我 们 在 上 一 节 已 经 知 道 鼠 标 被 按 下 会 产 生 应 
该 叫 MOUSE_DOWN 的 事 件 , 如 果 你 想 在 鼠 标 按 下 时 
做 点 儿 什 么 , 就 应 该 把 你 想 做 的 事 情 写 到 mouseDown 
这 个 方 法 中 去 , 那 么 一 旦 鼠 标 被 按 下 , 系 统 就 会 去 执 
行 你 在 mouseDown 这 个 方 法 里 让 它 做 的 事 情 。 
mouseDown 的 写 法 是 这 样 的 : 
    public boolean mouseDown ( Event evt , int x , int y ) { … } 
 你 打 算 在 鼠 标 按 下 后 做 的 事 情 就 填 在 { } 里 , 
这 样 一 来 , 只 要 鼠 标 被 按 下 了 , 系 统 自 己 就 会 去 调 
用 mouseDown , 做 你 让 它 做 的 事 情 。 
 这 里 的 参 数 都 是 什 么 意 思 呢 ? evt 表 示 一 个 
事 件 , 在 这 个 方 法 里 它 表 示 “ 鼠 标 按 下 ” 这 个 事 件 
。 它 前 面 的 Event ( 事 件 ) 说 明 了 evt 是 个 事 件 类 型 的 
对 象 。 x 和 y 是 evt 这 个 事 件 发 生 时 鼠 标 的 坐 标 , 也 就 
是 你 击 鼠 标 的 位 置 。 boolean 又 是 什 么 呢 ? 它 表 示 
mouseDown 这 个 方 法 的 返 回 值 类 型 是 一 个 布 尔 类 型 的 
值 。 怎 么 越 讲 越 糊 涂 了 呢 ? 其 实 , 你 也 不 要 太 在 意 
。 如 果 你 对 “ 鼠 标 按 下 ” 这 一 事 件 进 行 了 处 理 , 就 
尽 管 返 回 “ true " ( 是 ) 好 了 。 
 一 样 的 道 理 , 我 们 知 道 松 开 鼠 标 产 生 的 事 件 
是 MOUSE_UP , 如 果 你 想 处 理 “ 释 放 鼠 标 ” 这 个 事 件 
, 就 把 程 序 写 在 mouseUp 这 个 方 法 里 。 它 的 写 法 和 
mouseDown 很 类 似 , 
    public boolean mouseUp ( Event evt , int x , int y ) { … } 
不 同 的 是 这 里 的 evt 所 代 表 的 就 不 是 “ 按 下 鼠 标 ” 而 
是 “ 释 放 鼠 标 ” 了 。 一 般 情 况 下 , 我 们 只 关 心 “ 按 
下 鼠 标 ” 这 一 事 件 , 至 于 是 否 “ 释 放 鼠 标 ” 就 不 需 
要 理 会 了 。  
-- 
 
        爱情来得快去得也快,只有猪肉卷是永恒的. 
 
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.5.75] 

BBS水木清华站∶精华区