BBS水木清华站∶精华区

发信人: zixia (独守空房の比特仙子), 信区: Java 
标  题: 来自 JAVA 的传说15.2 
发信站: BBS 水木清华站 (Tue May 12 19:13:27 1998) 
 
        来 自 Java 的 传 说 (15) 
 
 好 啦 ! 先 来 编 个 程 序 处 理 一 下 “ 按 下 鼠 标 
” 这 个 事 件 , 亲 自 体 验 体 验 交 互 式 程 序 到 底 怎 么 回 
事 。 这 个 程 序 会 在 你 点 鼠 标 的 位 置 上 显 示 一 个 小 红 
叉 , 并 告 诉 你 这 个 小 叉 的 位 置 , 以 及 这 是 第 几 个 小 
叉 。 
程 序 17.1 
    // mouse.java 
    import java.awt.Graphics; 
    import java.awt.Event; 
    import java.awt.Color; 
    public class mouse extends java.applet.Applet 
    { 
        int num = 0;                // 设 置 计 数 器 
的 初 值 
        int px,py; 
        public boolean mouseDown(Event evt,int x,int y)   
  // “ 鼠 标 按 下 ” 处 理         {    px = x;        
// 取 得 按 下 鼠 标 时 的 坐 标 
            py = y; 
            num++;        // 计 数 器 加 1 
            repaint( );    // 重 画 窗 口 
            return true;    // 返 回 true , 表 明 事 件 处 
理 过 了 
        } 
        public void update(Graphics g) 
        { 
            g.setColor(getBackground( ));    // 用 背 景 
色 刷 出 一 块 区 域 
            g.fillRect(10,300,200,60); 
            paint(g);                // 调 用 paint( ) 
方 法 
        } 
        public void paint(Graphics g) 
        { 
            g.setColor(Color.green);    // 设 置 当 前 画 
笔 为 绿 色 
            g.drawString("The location of mark is 
("+px+","+py+")",10,320); 
            g.drawString("This is NO."+num+" 
point",10,340);    // 输 出 点 鼠 标 时 的 坐 标 值 和 点 鼠 标 
的 次 数 
            g.setColor(Color.red);    // 在 点 了 鼠 标 的 
位 置 画 一 个 小 红 叉 
            g.drawLine(px-5,py-5,px+5,py+5); 
            g.drawLine(px+5,py-5,px-5,py+5); 
        } 
    } 
程 序 mouse.java 的 HTML 文 件 如 下 所 示 
这 个 程 序 的 运 行 结 果 如 图 17.1 所 示 。 
  
图 17.1 程 序 17.1 的 运 行 结 果  
 你 看 , 我 们 在 这 个 Java Applet 的 运 行 窗 口 里 
用 小 叉 画 了 一 个 北 斗 星 座 。 只 要 程 序 还 在 运 行 , 你 
在 这 个 Java Applet 里 所 做 的 任 何 一 个 点 鼠 标 操 作 都 会 
被 它 用 小 红 叉 记 录 下 来 , 并 且 告 诉 你 点 中 的 位 置 。 
试 一 试 , 是 不 是 很 有 趣 呢 ?  
 运 行 完 程 序 , 我 们 再 来 看 看 程 序 里 一 些 应 该 
注 意 的 地 方 。  
 1.public boolean mouseDown ( Event evt , int x , int y ) { 
… … } 
 这 就 是 处 理 鼠 标 按 下 这 一 事 件 的 方 法 , 一 旦 
鼠 标 被 按 下 , 系 统 就 会 自 动 去 调 用 它 , 取 得 鼠 标 按 
下 时 的 位 置 , 并 把 计 数 器 加 1 , 然 后 调 用 repaint 重 画 
画 面 , 最 后 返 回 true , 告 诉 系 统 “ 鼠 标 按 下 ” 这 一 
事 件 已 经 处 理 完 毕 。 
 这 个 程 序 中 , 我 们 用 了 两 个 以 前 从 来 没 有 用 
过 的 类 : java.awt.Point 和 java.awt.Event 。 Point 对 象 用 坐 
标 ( x , y ) 来 表 示 一 个 点 。 Event 就 是 本 章 的 主 角 — — 
事 件 类 。 今 后 凡 是 和 鼠 标 、 键 盘 打 交 道 的 程 序 开 始 
必 须 写 这 句 话 。  
 2.import java.awt.Event ; 
 有 一 个 update 方 法 你 可 能 从 来 没 见 过 。 update 
的 意 思 就 是 “ 更 新 ” 。 其 实 每 次 系 统 调 用 repaint 的 
时 候 , repaint 就 自 动 先 去 调 用 update , 然 后 再 调 用 
paint 在 纸 上 画 画 , 这 就 是 repaint 的 调 用 过 程 。 系 统 
缺 省 的 update 是 用 背 景 色 把 全 部 输 出 窗 口 都 刷 一 遍 
。 可 是 这 个 程 序 里 , 我 们 想 保 留 每 次 画 的 小 叉 , 唯 
一 需 要 更 新 的 是 下 面 的 输 出 信 息 , 所 以 我 们 按 照 自 
己 的 需 要 改 写 了 update , 只 让 它 更 新 写 字 的 区 域 , 
而 把 画 小 叉 的 区 域 保 留 不 变 。( 待 续 )  
-- 
 
        爱情来得快去得也快,只有猪肉卷是永恒的. 
 
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.5.75] 

BBS水木清华站∶精华区