您现在的位置:软界网技术中心软件开发Java > 技术显示
第十六讲 交互效果(二)
2001-10-12 0:00:00   网友评论       阅读次数 点此评论
   

教 学 纲 要

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


 
      来源: 作者:
 
【评论查看】
更多关于 第十六讲 交互效果(二)  的技术