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

全部博文(3500)

文章存档

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 运 行 结 果 之 二

下载本文示例代码


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