第十六讲 交互效果(二)

来源:互联网 发布:网络聊天用语指南 编辑:程序博客网 时间:2024/05/29 07:49
<script type="text/javascript">google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//</script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

教 学 纲 要

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

原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 天空好像下雨我好想住你隔壁 天要下雨娘要嫁人什么意思 下雨时蝴蝶会躲在哪里 听见下雨的声音 明天几点下雨 天黑有灯下雨有伞 山沟皇帝雨天下雨 大当家不好雨天下雨 梦见下雪 漠河下雪 长春下雪 下雪 梦到下雪 漠河下雪了 雪之下雪乃 下雪图片 下雪哈尔滨 下雪的图片 下雪了 北京下雪 梦见下雪了 做梦下雪 下雪天 下雪的英文 下雪英文 下雪朋友圈 下雪拼音 西安下雪 哪里下雪了 东北下雪 河北下雪 今天下雪了 今天下雪 上海下雪 下雪的拼音 下雪作文 重庆下雪 下雪诗句 长沙下雪 广东下雪 下雪了作文