2008年(3500)
分类:
2008-05-04 19:14:19
教 学 纲 要
有 了 Java , 你 和 Homepage 的 交 互 不 仅 仅 是 点 击 某 个 字 、 按 钮 或者 图 , 它 切 换 成 下 一 页 。 Java 为 浏 览 Homepage 的 用 户 提 供了 地 地 道 道 的 交 互 。 包 含 了 Java 程 序 的 Homepage 知 道 你 需要 它 做 什 么 , 而 不 是 简 简 单 单 地 切 换 到 下 一 页 。
拖 一 拖 鼠 标
移 动鼠 标 是 我 们 最 常 用 的 鼠 标 操 作 。 移 动 鼠 标 有 两 种 方
式 :一 种 是 单 纯 的 移 动 鼠 标 , 没 有 别 的 动 作 。 另 一 种 是 移 动鼠 标 的 同 时 按 住
鼠 标 按 键 。 当 然 , 不 论 你 按 住 的 是 哪 个键 , , 对 Java 而 言 没 有 什 么 区 别 。
这 两 种 移 动 鼠 标 的 方式 将 会 引 发 不 同 的 事 件 , 前 者 产 生 的 事 件 叫 MOUSE_MOVE,
而后 一 种 将 产 生 MOUSE_DRAG 事 件 。 如 果 要 对 这 两 个 事 件 进 行进 一 步 处 理 , 让
计 算 机 在 你 移 动 或 拖 动 鼠 标 时 , 做 一 些你 希 望 它 做 的 事 情 , 那 么 你 就 应 该 把
事 情 交 代 给 mouseDown 或 mouseDrag 。 它 们 的 写 法 和 mouseDown 和 mouseUp
非 常 相 似 , 除了 名 字 不 同 以 外 , 其 他 都 一 样 。
public boolean mouseMove ( Event evt , int x
, int y ) { … }
public boolean mouseDrag ( Event evt , int x
, int y ) { … }
在 前面 的 学 习 中 你 已 经 学 会 怎 么 处 理 鼠 标 事 件 了 , 这 一
节 里的 事 件 处 理 也 是 一 样 的 。 把 你 想 让 Java 做 的 事 情 写 到 { … } 里 就 行 了
。 让 我 们 实 验 一 下 , 这 两 个 方 法 会 在 Java Applet 窗 口 里 产 生 什 么 效 果 。
程 序 17.2
// MouseMove.java
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Event;
import java.awt.Color;
public class dragmouse extends java.applet.Applet
{ Point CurrentPoint = new Point(0,0); //
初 始 化 点 的 坐 标 和 输 出 消 息
String CurrentMessage = " ” ;
public boolean mouseDrag(Event evt, int x,
int y) // “ 拖 动 鼠 标 ” 事 件 处 理
{ CurrentPoint.x = x ; // 获 得 当前 鼠
标 位 置
CurrentPoint.y = y ;
CurrentMessage = "you are painting
on: (" x "," y ")" ; // 更 新 输 出
消 息
repaint( ) ; // 重 画 窗口
return true;
}
public boolean mouseMove(Event evt, int x,
int y) // “ 移 动 鼠 标 ” 事 件 处 理
{ CurrentMessage = "you are moving on
(" x ", " y ")"; // 更 新 输 出 消 息
repaint( ); // 重 画 窗 口
return true;
}
public void update(Graphics g)
{ g.setColor(getBackground( )); //
清 除 输 出 消 息 的 区 域
g.fillRect(0,0,200,20);
paint(g);
}
public void paint(Graphics g)
{ g.setColor(Color.blue); // 设 置 当 前画 笔
为 蓝 色
g.drawString(CurrentMessage, 5, 15); //
输 出 鼠 标 位 置 信 息
g.drawLine(CurrentPoint.x,CurrentPoint.y,CurrentPoint.x,CurrentPoint.y);
// 在 鼠 标 拖 过 的 位 置 画 点
}
}
程 序 17.2 的 HTML 文 件 是 如 下 所 示 :
< HTML>
< HEAD>
< TITLE>dragmouse< /TITLE>
< /HEAD>
< BODY>
< APPLET CODE = "dragmouse.class" WIDTH
= 300 HEIGHT = 200>< /APPLET>
< /BODY>
< /HTML>
这 个程 序 里 包 含 了 两 个 事 件 处 理 , 当 你 移 动 鼠 标 时 , 系 统 调用 的 是 mouseMove 这 个 事 件 处 理 , 拖 动 鼠 标 时 调 用 的 又 是 mouseDrag 这 个 事 件 处 理 。 运 行 这 个 程 序 , 也 许 你 已 经 试 过 了 , 可以 用 拖 动 鼠 标 来 画 图 。
啊 哈! 那 就 让 它 运 行 起 来 看 看 什 么 样 子 。 在 Applet 运
行 窗 口 里移 动 鼠 标 , 提 示 行 告 诉 你 当 前 鼠 标 的 位 置 。 拖 一 拖 鼠 标呢 ? 按 住 鼠
标 按 键 拖 动 鼠 标 , 你 可 以 随 心 所 欲 地 在 Applet 窗 口 里 画 图 了 。 那 么 就 画 点
儿 什 么 吧 ! 来 杯 咖 啡 怎 么 样? 好 主 意 !
图 17.2 程 序 17.2 的 运 行 结 果
编 个 胆 小 鬼 的 程 序
移 动鼠 标 除 了 会 产 生 MOUSE_MOVE 和 MOUSE_DRAG 事 件 外
, 还 会 产 生 另外 的 两 个 事 件 , 你 可 能 意 识 不 到 , 不 过 它 们 的 确 产 生 了。 那 就
是 MOUSE_ENTER 和 MOUSE_EXIT 。 顾 名 思 义 , MOUSE_ENTER 就是 鼠 标 进 入 到
Applet 窗 口 范 围 之 内 , 而 MOUSE_EXIT 就 是 鼠 标离 开 Applet 窗 口 。 如 果 你
想 让 你 的 Java 程 序 对 鼠 标 的 进 进出 出 有 所 反 应 的 话 , 就 应 该 到 方 法 mouseEnter
和 mouseExit 里面 去 处 理 。 这 两 个 方 法 的 写 法 也 和 前 面 的 一 样 , 仅 仅 在名 字
上 有 所 区 别 。
public boolean mouseEnter ( Event evt , int
x , int y ) { … }
public boolean mouseExit ( Event evt , int x
, int y ) { … }
好 啦, 我 已 经 等 不 及 要 给 你 们 看 一 个 有 趣 的 程 序 了 , 这
个 程序 里 藏 着 一 个 胆 小 鬼 , 他 害 怕 老 鼠 。
程 序 17.3
// coward.java
import java.awt.* ;
public class coward extends java.applet.Applet
{
String CurrentMessage = " "; //
初 始 化 输出 消 息
Image face; // 定 义 一 个 Image 对
象 名 为 face
public boolean mouseEnter(Event evt, int x, int
y) // “ 鼠 标 进 入 ” 事 件 处 理
{
CurrentMessage = "HA !!! There is a mouse.
I am afraid of mouse."; // 输 出 消 息
face = getImage (getDocumentBase( ),"frighten.gif");
// 加 载 害 怕 时 的 图 片
repaint( );
return true;
}
public boolean mouseExit(Event evt, int x, int
y) // “ 鼠 标 离 开 ” 事 件 处 理
{ CurrentMessage = "OK ! It's gone . I am
horrified."; // 输 出 消 息
face = getImage (getDocumentBase( ),"happy.gif");
// 加 载 高 兴 时 的 图 片
repaint( );
return true;
}
public void paint(Graphics g)
{ Font fn = new Font("TimesRoman",Font.BOLD
, 20 ); // 设 置 当 前 字 体
g.setFont (fn);
g.drawString(CurrentMessage, 10, 230);
// 显 示 消 息
g.drawImage(face,100,0,this);
// 显 示 图 片
}
}
程 序 17.3 的 HTML 文 件 是 如 下 所 示 :
< HTML>
< HEAD>
< TITLE>coward< /TITLE>
< /HEAD>
< BODY>
< APPLET CODE = "coward.class" WIDTH
= 400 HEIGHT = 250>< /APPLET>
< /BODY>
< /HTML>
这 个程 序 刚 开 始 运 行 的 时 候 是 一 个 空 白 窗 口 , 把 你 的 鼠 标 挪到 窗 口 里 来 , 你 看 到 了 什 么 ? 一 个 吓 坏 了 的 胆 小 鬼 ( 图 17.3 ) 。
运 行完 这 个 程 序 , 你 笑 了 吗 ? 如 果 笑 了 , 这 就 对 了 。 说
明 你已 经 开 始 体 会 到 Java 带 给 你 的 乐 趣 了 。 继 续 努 力 , 好 戏还 在 后 头 呢 !
图 17.3 程 序 17.3 运 行 结 果 之 一
好 啦, 别 再 吓 唬 它 了 , 把 你 的 鼠 标 挪 开 吧 。 你 看 它 笑 了
( 图 17.4 ) 。
图 17.4 程 序 17.3 运 行 结 果 之 二