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