Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1450679
  • 博文数量: 3500
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 43870
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-03 20:31
文章分类

全部博文(3500)

文章存档

2008年(3500)

我的朋友

分类:

2008-05-04 19:14:16

一起学习

教 学 纲 要

有 了 Java , 你 和 Homepage 的 交 互 不 仅 仅 是 点 击 某 个 字 、 按 钮 或者 图 , 它 切 换 成 下 一 页 。 Java 为 浏 览 Homepage 的 用 户 提 供了 地 地 道 道 的 交 互 。 包 含 了 Java 程 序 的 Homepage 知 道 你 需要 它 做 什 么 , 而 不 是 简 简 单 单 地 切 换 到 下 一 页 。

  • 猜 一 猜 我 敲 了 哪 个 键
  • 勇 敢 的 冲 浪 小 子
正 文

猜 一 猜 我 敲 了 哪 个 键

现 在我 们 已 经 能 够 处 理 鼠 标 产 生 的 各 种 事 件 , 对 鼠 标 的 各 种操 作 作 出 相 应 的 反 应 。 和 鼠 标 比 起 来 , 键 盘 产 生 的 动 作要 简 单 得 多 , 因 为 键 盘 不 像 鼠 标 那 么 活 跃 , 能 够 在 屏 幕里 蹿 上 跳 下 。 键 盘 要 规 矩 得 多 , 它 只 会 产 生 两 种 事 件 : KEY_PRESS 和 KEY_RELEASE 。 当 你 按 下 键 盘 上 的 任 意 一 个 键 , 就会 产 生 KEY_PRESS ( 按 下 键 盘 ) 事 件 , 而 放 开 已 按 下 的 按 键时 , 则 发 生 KEY_RELEASE ( 松 开 键 盘 ) 事 件 。 你 会 不 会 觉 得这 两 个 事 件 似 曾 相 识 ? 对 了 , 它 们 很 像 MOUSE_DOWN 和 MOUSE_UP , 同 样 是 按 下 按 键 和 释 放 按 键 。 和 对 鼠 标 按 键 一 样 , 我们 更 关 心 的 是 什 么 键 被 按 下 , 而 不 是 什 么 键 被 释 放 。 所以 我 们 通 常 所 处 理 的 也 是 KEY_PRESS ( 按 下 键 盘 ) 这 个 事 件。

你 可以 通 过 键 盘 告 诉 你 HomePage 里 的 小 人 向 左 、 向 右 , 也 可 以写 一 些 只 有 你 才 懂 的 密 码 。 要 实 现 这 些 功 能 , 你 只 需 要把 想 做 的 事 情 写 到 keyDown 或 keyUp 方 法 里 。 一 旦 你 按 下 了某 个 键 , 系 统 就 把 事 情 交 给 这 两 个 方 法 来 干 。 那 么 方 法 keyDown 和 keyUp 是 什 么 样 子 呢 ?

    public boolean keyDown ( Event evt , int key ) { … … }
    public boolean keyUp ( Event evt , int key ) { … … }

你 也许 发 现 了 , 这 两 个 方 法 同 前 面 处 理 鼠 标 事 件 的 方 法 都 不太 一 样 。 evt 仍 然 表 示 事 件 本 身 , keyDown 中 的 evt 表 示 KEY_PRESS ( 按 下 键 盘 ) 这 一 事 件 , keyUp 中 的 evt 表 示 KEY_RELEASE ( 释放 键 盘 ) 。 那 么 整 数 key 表 示 什 么 呢 ? 它 表 示 所 按 下 键 的键 值 。 键 盘 可 不 像 鼠 标 把 所 有 的 键 都 一 视 同 仁 , 键 盘 上的 每 一 个 键 都 有 一 个 特 定 的 值 与 之 相 对 应 。 也 就 是 说 ,为 了 区 分 键 盘 上 的 键 , 我 们 给 每 个 键 都 编 了 号 , 这 个 编号 就 是 该 键 的 键 值 。 而 且 这 个 编 号 也 不 是 随 随 便 便 编 出来 的 , 而 是 该 键 所 对 应 字 符 的 ASCII 码 。 对 于 那 些 没 有 ASCII 码 的 按 键 , Java 在 Event 类 中 已 经 定 义 好 了 一 些 标 准 键 值, 这 些 特 殊 键 所 对 应 的 值 如 表 17.1 所 示 :

表 17.1 Event 类 里 面 的 标 准 键

按 绩?/td> 绩???/td> 按 绩?/td> 绩???/td>
〃?/td> Event.UP F3 Event.F3
? Event.Down F4 Event.F4
〃?/td> Event.RIGHT F5 Event.F5
? Event.LEFT F6 Event.F6
Home Event.HOME F7 Event.F7
End Event.END F8 Event.F8
Page UP Event.PGUP F9 Event.F9
Page Down Event.PGDN F10 Event.F10
F1 Event.F1 F11 Event.F11
F2 Event.F2 F12 Event.F12

勇 敢 的 冲 浪 小 子

不 要以 为 键 盘 只 能 产 生 两 个 简 单 的 事 件 就 没 有 什 么 意 思 , 试一 试 下 面 这 个 程 序 , 你 就 会 发 现 键 盘 和 鼠 标 一 样 有 意 思。
程 序 17.4
// key.java
import java.awt.Graphics;
import java.awt.Event;
import java.awt.Image;

public class key extends java.applet.Applet
{ char PressKey = 0;        // 初 始 化 设 置
  int x = 5,y =15;
  Image surfer ;          // 定 义 一 个 名 为 surfer 的 Image 对 象
  public void init( )
  { surfer = getImage(getDocumentBase( ),"surfer.gif") } // 加 载 图 片
  public boolean keyDown (Event evt,int key0)  // “ 键 盘 按 下 ” 事 件 处 理
  { switch(key0)
    {case Event.UP:     // 按 下 ↑ 时 y 坐 标 减 1
    y--;
    break;
    case Event.DOWN:     // 按 下 ↓ 时 y 坐 标 加 1
    y ;
    break;
    case Event.LEFT:     // 按 下 ← 时 x 坐 标 减 1
    x--;
    break;
    case Event.RIGHT:     // 按 下 → 时 x 坐 标加 1
    x ;
    break;
    default:           // 按 下 除 四 个 键 外的 键 时 ,
    PressKey = (char)key0;  // 就 给 出 该 键 键 值对 应 的 字 符
    break;
  }
  repaint( );
  return true;
  }
  public void paint(Graphics g)
  { if (PressKey!=0)
    g.drawString("Press Up, Down, Left and Right arrow to move the surfer.",10,15);
    g.drawImage (surfer,x,y,this);    // 根 据 ↑ 、 ↓ 、 → 、 ← 改 变 的 (x , y) 输 出 图 片
    g.drawString("You have pressed " PressKey " just now!",10,250); // 输 出 所 按 下 的 键
  }
}

程 序 17.4 的 HTML 文 件 是 如 下 所 示 :
< HTML>
< HEAD> < TITLE>key< /TITLE> < /HEAD>
< BODY>
< APPLET CODE = "key.class" WIDTH = 500 HEIGHT = 260>< /APPLET>
< /BODY>
< /HTML>

运 行程 序 时 , 看 看 提 示 行 信 息 , 按 一 下 空 格 键 , 一 只 冲 浪 企鹅 就 会 出 现 在 你 的 眼 前 , 按 ↑ 、 ↓ 、 → 、 ← 键 , 你 将 看到 它 勇 往 直 前 地 在 你 的 主 页 上 冲 浪 。 如 果 你 偷 偷 按 了 字符 键 , 程 序 能 猜 出 你 按 的 是 哪 一 个 键 。 不 信 你 可 以 试 一试 。

怎 么样 ? 可 以 交 互 的 Java 程 序 是 不 是 比 那 些 静 态 的 图 形 、 文字 有 意 思 多 了 ? 这 回 你 知 道 电 子 游 戏 里 的 金 钢 是 怎 么 在你 的 鼠 标 和 键 盘 的 控 制 下 , 所 向 披 靡 了 吧 。

图 17.5 程 序 17.4 的 运 行 结 果

小 结

学 习了 这 一 章 , 你 应 该 知 道 什 么 呢 ? 总 结 一 下 吧 。

  • Java 通 过 Event 类 来 处 理 鼠 标 键 盘 事 件 。
  • 可 以 在 mouseDown 里 处 理 鼠 标 按 下 这 个 事 件 , 鼠标 按 下 了 , 你 想 做 什 么 就 把 想 做 的 事 情 写 在 mouseDown 这 个方 法 里 。
  • 鼠 标 还 能 产 生 移 动 (mouseMove) 、 拖 动 (mouseDrag) 、 进 入 (mouseEnter) 、 离 开 (mouseExit) 等 许 多 事 件 , 我 们 可 以在 它 们 对 应 的 事 件 处 理 中 做 任 何 想 做 的 事 情 。
  • 键 盘 会 产 生 按 下 (keyPress) 和 释 放 (keyRelease) 两个 事 件 , 通 常 我 们 只 处 理 KeyPress 事 件 , 处 理 这 个 事 件 的代 码 就 写 在 方 法 keyDown 里 。
  • 鼠 标 按 键 对 Java 而 言 是 没 有 区 别 的 , 但 键 盘 上的 每 个 键 都 有 各 自 的 键 值 代 表 特 定 的 字 符 。
下载本文示例代码


第十七讲 交互效果(三)第十七讲 交互效果(三)第十七讲 交互效果(三)第十七讲 交互效果(三)第十七讲 交互效果(三)第十七讲 交互效果(三)第十七讲 交互效果(三)第十七讲 交互效果(三)第十七讲 交互效果(三)第十七讲 交互效果(三)第十七讲 交互效果(三)第十七讲 交互效果(三)
阅读(204) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~