第五讲 窗口设计(三)

<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>

教 学 纲 要

在 复杂 的 窗 口 结 构 里 , 事 件 发 生 以 后 , 该 由 谁 来 处 理 呢 ?

正 文

java8.gif 我 们 使 用 组 件 和 组 件 容 器 的 概 念 来 设 计 程 序 , 使 得 窗 口程 序 的 结 构 变 得 很 复 杂 , 有 很 多 的 层 次 。 很 可 能 设 计 出这 样 的 程 序 : 一 个 组 件 容 器 里 保 护 了 几 个 组 件 和 几 个 组件 容 器 , 而 这 些 组 件 容 器 有 的 包 含 一 些 组 件 , 有 的 又 包含 了 几 个 组 件 和 几 个 组 件 容 器 , 层 层 相 套 , 好 像 如 下 的形 式 : java16

( 图中 圆 圈 表 示 组 件 容 器 , 方 框 表 示 组 件 。 )

那 么, 在 如 此 复 杂 的 窗 口 结 构 里 , 事 件 发 生 以 后 , 该 由 谁 来处 理 呢 ?

原 来, 当 事 件 发 生 的 时 候 , 会 首 先 交 给 最 内 层 的 窗 口 对 象 来处 理 。 如 果 该 窗 口 对 象 的 事 件 处 理 程 序 的 返 回 值 是 false 的 话 , 那 么 这 个 事 件 就 会 被 传 递 给 包 含 该 窗 口 对 象 的 组件 容 器 来 处 理 , 这 样 一 级 一 级 地 往 上 传 递 。 直 到 有 一 个窗 口 对 象 的 事 件 处 理 程 序 返 回 值 为 true 为 止 。

所 以, 在 我 们 自 己 所 写 的 事 件 处 理 程 序 当 中 , 如 果 处 理 了 某个 事 件 , 则 应 置 返 回 值 为 true , 如 果 没 有 处 理 , 则 应 设置 返 回 值 为 false , 以 便 将 事 件 传 递 到 上 一 级 去 。

所 有由 组 件 发 出 的 事 件 , 像 由 输 入 设 备 发 出 的 事 件 一 样 , 都会 交 给 方 法 handleEvent 去 处 理 , 而 在 原 来 的 方 法 handleEvent 中 , 又 会 转 而 调 用 方 法 action 来 处 理 这 些 由 组 件 发 出 的 事件 。

因 此, 通 常 的 情 况 下 , 我 们 会 自 己 写 一 段 方 法 action 程 序 来 处理 组 件 发 出 的 事 件 。


方 法 action 的 用 法 如 下 所 示 :

public boolean action( 参 数 1 , 参 数 2 )
{
… …
}

方 法的

  • 返 回 值 是 一 个 布 尔 型 的 变 量 ,
  • 第 一 个 参 数 是 一 个 事 件
  • 第 二 个 参 数 是 用 来 放 置 额 外 的 数 据 用 的 。 例如 , 如 果 是 一 个 按 钮 发 生 了 ACTION_EVENT 事 件 , 则 这 第 二 个参 数 所 置 的 值 就 是 被 按 下 的 按 钮 上 所 显 示 的 字 符 串 。

方 法 action 被 调 用 时 , 可 能 是 任 何 一 个 组 件 发 生 了 ACTION_EVENT 事 件 , 所 以 在 方 法 action 的 一 开 始 应 先 检 查 是 哪 一 个 组 件发 生 了 事 件 , 如 果 不 是 我 们 所 关 心 的 那 个 组 件 发 生 了 事件 , 就 不 去 理 睬 它 。

程 序流 程 分 析 :
1. 在这 个 程 序 里 使 用 了 类 Label 、 类 Botton 和 类 Event , 为 了 书 写简 便 使 用 了 通 配 符 * , 表 示 把 所 有 前 9 个 字 符 为 “ java.awt. ” 的 类 import 进 来 。
2. 构造 Applet 程 序 类 window1 。
3. 写初 始 化 程 序 :

  • ( 1 ) 设 定 窗 口 大 小 ;
  • ( 2 ) 在 窗 口 以 内 加 入 一 句 话 和 一 个 按 钮 。


4. 写 事 件 处 理 程 序 :

  • ( 1 ) 判 断 是 否 是 按 钮 发 生 的 事 件 ;
  • ( 2 ) 如 果 是 按 钮 发 生 的 事 件 , 则 :
  • 在 窗 口 中 加 入 一 句 话 , 执 行 语 句 layout( ) , 并且 设 定 返 回 值 为 true 。
  • ( 3 ) 如 果 不 是 按 钮 发 生 的 事 件 则 置 返 回 值 为 false , 然 后 返 回 。

java9.gif 在 这 个 程 序 里 面 出 现 的 layout( ) 是 怎 么 一 回 事 ? 如 果 我 们把 layout( ) 语 句 从 程 序 中 删 除 , 则 会 发 生 这 样 的 情 况 : 当程 序 运 行 后 , 如 果 我 们 用 鼠 标 单 击 按 钮 “ 增 加 一 句 话 ” , 屏 幕 显 示 丝 毫 不 会 发 生 变 化 。 那 么 , 是 不 是 说 明 按 钮不 起 作 用 了 呢 ? 不 是 。 如 果 我 们 用 鼠 标 点 在 窗 口 的 边 框线 上 移 动 窗 口 的 边 线 , 改 变 一 下 窗 口 的 大 小 ( 当 鼠 标 变成 黑 色 实 心 双 箭 头 时 , 按 下 鼠 标 左 键 , 做 拖 曳 鼠 标 的 动作 ) , 就 会 发 现 新 增 加 的 话 显 示 了 出 来 。 那 么 , layout( ) 语 句 是 做 什 么 的 , 它 是 如 何 让 新 的 Label 自 动 地 增 加 到窗 口 中 去 的 呢 ? 请 看 下 章 : 《 巧 手 木 匠 》
小 结/pic/news/java17.gif 在 这 一 章 里 , 我 们 学 习 了 众 多 的 有 关 窗 口 的 概 念 , 新 朋友 新 面 孔 可 真 不 少 , 一 定 要 反 复 复 习 呀 !
  • 类 Container 是 窗 口 编 程 的 不 可 缺 少 的 概 念 。
  • 类 Button 和 类 Label 是 最 基 本 的 窗 口 组 件 。
  • 在 这 一 章 里 的 新 学 的 类 有 :
  • Component 、 Container 、 Panel 、 Window 、 Frame 、 Dialog 、 FileDialog 、 Button 和 Label 。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值