根据应用剪裁JavaBeans定制你的Java.ppt
-
资源ID:73429534
资源大小:258.63KB
全文页数:27页
- 资源格式: PPT
下载积分:11.9金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
根据应用剪裁JavaBeans定制你的Java.ppt
根据应用剪裁根据应用剪裁JavaBeans 定制你的定制你的Java摘 要:对 于 可 定 制 的 组 件(Components),开 发 者 可 以 根 据 自 己 的 需 要 剪 裁。可 定 制 的JavaBeans 中 有 应 用 程 序 开 发 者 可 以 修 改 的 属 性(Properties)例 如,改 变Beans 的 外 观 和/或 动 作。本 文 将 介 绍 如 何 定 制JavaBeans。我 们 将 讨 论 属 性、读 取 器(getter)和 设 置 器(setter)方 法(Mothods),绑 定(Bound)和 约 束(Constrained)属 性,以 及 使 定 制 简 单 化 的 设 计 模 板(Design Pattern)。然 后 介 绍 属 性 编 辑 器(Editors)和 定 制 器(Customizers),最 后 我 们 在 一 个 已 有 的JavaBeans 中 增 加 定 制 功 能。可 定 制 的 组 件 有 更 大 的 应 用 范 围。例 如,对 于 一 个 电 子 表 格(Spreadsheets)Bean,假 如 它 必 须 占 满 全 屏 幕、与 你 的 应 用 程 序 颜 色 方 案 冲 突 或 者 只 能 以16 进 制 方 式 显 示 数 据,不 管 它 在 其 他 方 面 的 功 能 有 多 出 色,你 恐 怕 不 能 用 它。JavaBeans 规 范 对 简 单 情 况 提 供 了 非 常 简 单 的 识 别、修 改 属 性 的 特 征,对 复 杂 的 情 况 提 供 了 扩 展。本 文 将 研 究JavaBeans 的 定 制 接 口、组 件 属 性、以 及 如 何 编 写 你 的Beans 使 得 集 成 开 发 环 境(IDEs)可 以 将 这 些 属 性 显 示 给 应 用 程 序 开 发 者。我 们 还 将 讨 论 以 下 的 问 题:绑 定 和 约 束 属 性,它 们 可 以 方 便Beans 之 间 通 信 和 维 持 一 致 性;定 制 器,它 可 以 使 我 们 更 方 便 地 定 制;BeanBox 的 使 用,它 是Sun 免 费 提 供 的JavaBeans 测 试 工 具。什 么 是 定 制软 件 组 件 是 通 用 的 功 能 和 数 据 模 块,它 可 以 在 很 多 情 况 下 使 用,软 件 组 件 的 定 制 是 很 重 要 的,如 果 应 用 程 序 开 发 者 可 以 控 制 其 外 观 和 行 为,它 才 能 在 很 多 应 用 程 序 中 得 到 应 用。例 如,如 果 一 个 按 钮 类 的 文 本 标 签 总 是“Button”,与 之 相 关 的 动 作 总 是 重 启 计 算 机(虽 然 在 一 些 操 作 系 统 中 这 可 能 是 最 有 用 的 工 具 之 一)的 话,那 它 是 没 有 多 大 用 处 的。简 单 的 组 件,如 按 钮 都 有 很 多 开 发 者 可 以 控 制 的 属 性,其 中 包 括:是 否 使 能动 作背 景 颜 色文 本 颜 色大 小位 置形 状标 签 文 本当 按 此 按 钮 时 播 放 的 声 音 文 件复 杂 的 组 件 需 要 更 多 的 定 制。定 制 一 个 远 程 数 据 库 连 接 可 能 从 可 用 的 服 务 器 列 表 中 进 行 选 择(信 息 只 有 在 运 行 时 才 可 用)、选 择 协 议(同 上)、指 定 用 户 名 和 密 码 和 设 置 通 过 防 火 墙 访 问。Beans 的 属 性一 般 说 来,定 制 就 是 配 置Beans 的 内 部 状 态,使 其 外 观 和 行 为 适 合 所 用 的 环 境。这 些 内 部 状 态(颜 色、大 小 和 密 码 字 符 串 等)在JavaBeans 规 范 里 称 为 属 性。Beans 中 的 属 性 可 以 用 称 为 访 问 器(Accessors)的 方 法 读 取 和 修 改。一 个 访 问 器 方 法 是 读 取 属 性 值 的getter 方 法,或 者 是 修 改 属 性 值 的setter 方 法。在 按 钮Beans 中 有String getLabel()方 法,它 返 回Beans 的 当 前 标 签,有void setLabel(String newLabel)方 法,它 设 置Beans 的 当 前 标 签,只 有getter 方 法 的 属 性 是 只 读 的。为 什 么 不 简 单 地 访 问Beans 内 部 地 数 据 成 员,直 接 读 取 和 修 改 它 们,而 是 编 写 一 些 访 问 器 呢?因 为 不 能 保 证 属 性 和Beans 内 部 的 成 员 数 据 直 接 对 应。例 如,Beans 中 的 标 签 属 性 可 能 是 一 个AWT 标 签 对 象,但 是 也 可 能 不 是。标 签 文 本 可 能 来 自 数 据 库,可 能 是 另 一 个Bean 的 标 签,也 可 能 当 需 要 时 形 成 一 个 标 签。访 问 器 方 法 是Beans 中 属 性 的 统 一 接 口,它 隐 藏 了 属 性 的 实 现 细 节。这 是 好 的 面 向 对 象 编 程 惯 例,因 为 它 减 小 了 对 象 间 的 依 赖 和“耦 合”。符 合JavaBeans 规 范 的 集 成 开 发 环 境 能 分 析Beans,找 到 它 的 属 性,同 时 它 还 能 给 每 种 属 性 创 建 直 观 的 显 示(称 为 属 性 编 辑 器),允 许 开 发 者 在 设 计 时 修 改 属 性。当 开 发 者 将 一 个Bean 放 入 应 用 程 序 中 时,集 成 开 发 环 境 在 面 板 上 画 出 此Bean,然 后 显 示 属 性 表,它 是Bean 所 有 属 性 的 简 单 列 表,每 个 属 性 有 一 个 对 应 的 编 辑 器。集 成 开 发 环 境 调 用 所 有 的getter 方 法,将Bean 中 当 前 属 性 值 显 示 在 属 性 表。当 开 发 者 修 改 属 性 表 中 的 属 性 时,集 成 开 发 环 境 调 用 相 应 的setter 方 法,更 新 所 选Bean 中 的 相 关 属 性。对 低 等 到 中 等 复 杂 度 的Beans,在 设 计 时 调 用setter 方 法 配 置 它 往 往 已 经 足 够。为 了 支 持 复 杂Beans 更 高 程 度 的 定 制,规 范 中 定 义 了 定 制 器(customizer)类。开 发 者 可 以 扩 充Beans,这 就 为 实 现 任 何 类 型 的 定 制 打 开 了 方 便 之 门:复 杂 的 颜 色 拾 取 器、图 形 化 的 网 络 配 置 精 灵,只 要 你 愿 意,甚 至 可 以 编 写 一 个VRML 界 面。实 际 上,以 上 描 述 的 属 性 表 可 以 看 作 是 集 成 开 发 环 境 自 动 产 生 的 定 制 器。这 种 模 式 在JavaBeans 框 架 中 是 常 见 的:简 单 的 情 况(在 这 种 情 况 下,简 单 的 属 性 类 型 已 有 属 性 编 辑 器)往 往 只 须 很 少 或 根 本 不 须 工 作,但 是 其 中 隐 藏 着 对 复 杂 情 况 的 访 问 方 法。如 何 使Beans 可 定 制JavaBeans 框 架 使 创 建 有 可 定 制 属 性 的Beans 变 得 相 当 容 易。大 部 分 情 况 下,根 本 无 须 写 任 何 代 码。这 是 因 为JavaBeans 规 范 定 义 了 命 名 约 定,集 成 开 发 环 境 可 用 它 来 推 断 与 属 性 相 关 的 方 法。规 范 中 将 这 种 约 定 称 作 设 计 模 板。如 果 不 考 虑 语 义 原 则 的 话 则 很 简 单:名 字、返 回 值 和 参 数 类 型 决 定 了 属 性 的 名 字 和 类 型。当 集 成 开 发 环 境 装 载Beans 时,使 用JDK 1.1 reflection 机 制 检 查Beans 中 所 有 的 方 法,寻 找 以get 和set 开 头 的 方 法,然 后 将 属 性 加 入 到 属 性 表 中,以 便 开 发 者 定 制Beans。定 制Beans我 们 可 以 看 一 个 具 体Bean 定 制 的 例 子:扩 展 一 个 简 单 的BarChart Bean。读 源 程 序 便 可 以 发 现:BarChart Bean 已 经 有 符 合 规 范 中 设 计 模 板 的 读 取 器 和 设 置 器 方 法 void setPercent(int iPercent)和int getPercent()。换 句 话 说,它 已 经 有 一 个 属 性:percent。将BarChart Bean 装 载 入BeanBox 中 看 有 什 么 发 生。图1 BeanBox 中 的Barchat图 的 左 边 是 一 个 包 括 可 用Beans 的 面 板,便 于 在BeanBox 中 放 置。中 部 是BeanBox 本 身,BarChart 已 被 选 择,而 右 边 是BarChart 的 属 性 列 表。属 性 列 表 中 包 括 五 个 属 性:前 景 和 背 景(Color 类 型)、字 体(Font 类 型)、percent(整 数)和 名 字(字 符 串)。当BeanBox 装 载BarChart 时,发 现int getPercent 和void setPercent(int iPercent)方 法,便 将percent 看 作 是Bean 的 一 个 属 性,并 将 它 以 及 一 个 整 型 数 属 性 编 辑 器(percent 标 签 右 边 的 文 本 框)加 入 到 属 性 表 中。调 用getPercent()函 数 填 充 属 性 编 辑 器 的 值(本 例 中 值 为0)。对 属 性 表 中 的 所 有 属 性 都 做 同 样 的 处 理。BarChart 只 定 义 了percent 属 性,那 其 它 属 性 是 从 哪 里 来 的 呢?因 为BarChart 定 义 为:public class BarChart extends Canvas implements Serializable。BarChart 继 承 了java.awt.Canvas,而 它 又 继 承 了java.awt.Component,它 定 义 了Color getForeground(),void setForeground(Color)等。这 意 味 着,如 果 你 定 义 一 个Bean 的 子 类,你 便 巧 妙 地 得 到 一 个 包 括 父Bean 所 有 属 性 的 新Bean。当 你 在BeanBox 的 属 性 表 中 修 改 属 性 时,Bean 马 上 就 被 更 新。在percent 的 属 性 编 辑 器 中 输 入62,BeanBox 便 做 出 相 应 的 反 应,如 图2 所 示。图2 62%的BarChart集 成 开 发 环 境(本 例 为BeanBox),检 测 到percent 属 性 编 辑 器 的 值 改 变,便 调 用setPercent()更 新BarChart 的percent。如 果 你 的 应 用 程 序 正 好 需 要 一 个 蓝 色 背 景、两 点 的 黑 色 边 框 和 对 选 择 百 分 比 填 充 红 色,25 乘150 的BarChart,一 切 都 很 好。好 在 我 们 有 此Bean 的 源 代 码,我 们 可 以 增 加 一 些 新 属 性:Color 型fillColor、floodColor 和borderColor,整 型borderWidth、barHeight 和barWidth。作 为 例 子,我 们 增 加floodColor()访 问 器。我 们 首 先 定 义 填 充 颜 色private Color fgColor_=Color.red。为 了 避 免 与java.awt.Component 的 前 景 和 背 景 属 性 相 混 淆,我 们 更 名 为floodColor,并 编 写 它 的 访 问 器:private Color floodColor_=Color.red;public void setFloodColor(Color floodColor)floodColor_=floodColor;public Color getFloodColor()return floodColor_;对 其 他 属 性 也 可 增 加 类 似 的 访 问 器,这 就 形 成 了 一 个 灵 活 的 新Bean 的 新 类 文 件。到 此,BarChart 就 是 可 定 制 的 了。我 们 可 以 将 它 们 设 置 成 我 们 喜 欢 的 外 观,如 图3 所 示。图3 已 定 制 的BarChartBeans我 们 可 以 看 到 四 个BarChart Beans,每 个 用 不 同 的 颜 色 方 案 和 不 同 的 百 分 比 填 充 定 制。对BarChart 类 增 加 了 几 个 方 法 便 可 给 应 用 程 序 开 发 者 提 供 极 大 的 灵 活 性。当 属 性 的 类 型 是 内 建 的 类 型,而 且 你 并 不 介 意 键 入 字 符 串 来 提 取 颜 色,这 样 工 作 得 很 好。但 是 当 属 性 的 类 型 为 自 定 义 类 型 时,例 如BarChart 有direction 属 性 指 示BarChart 的 增 长 方 向,合 理 的 值 为 上、下、左 和 右,如 何 定 制 呢?笨 的 方 法 是 让 用 户 键 入 整 数0-3 来 指 示 方 向。在JavaBeans 规 范 中 明 智 的 方 法 是 编 写 自 己 的 属 性 编 辑 器。java.beans.PropertyEditor 接 口 和java.beans.PropertyEditorSupport 实 用 工 具 类 允 许Beans 开 发 者 对 于 以 上 描 述 的 自 定 义 类 型,如 方 向 类 型 指 定 属 性 编 辑 器。自 定 义 属 性 编 辑 器 甚 至 可 以 是 图 形 化 的:NetworkConfiguration Bean 可 能 有HostConnections 属 性,它 可 以 用 鼠 标 在 服 务 器 之 间 画 出 连 接 的 方 式 来 配 置。对 于 基 本 的 属 性 有 最 后 一 点 需 要 注 意。有 的 属 性 可 能 定 义 为 值 的 数 组,而 不 仅 仅 是 标 量,这 些 属 性 就 是 索 引 属 性(Indexed Properties)。它 与 标 量 属 性 相 比 在 访 问 器 方 法 方 面 是 不 同 的。读 取 器 和 设 置 器 方 法 被 重 载。可 以 以 单 个 元 素 的 方 式 访 问 属 性:void setProperty(int index,TYPE value)TYPE getProperty(int index)或 者 一 次 整 个 数 组 的 方 式:void setProperty(TYPE valueList)TYPE getProperty()例 如 对 于Polygon3D Bean,它 将 自 己 画 在 画 布(Canvas)上,可 以 单 独 地 访 问 它 的 点:Point3D newPoint=new Point3D(0,25,0);myPolygon.setPoint(2,newPoint);/Throws exception if Bind Property,你 将 发 现 你 可 以 以 图 形 的 方 式 创 建ColorBar Bean。以 上 我 们 讨 论 了 属 性 以 及 如 何 利 用 它 定 制Beans。我 们 讨 论 了 事 件 监 听 器 接 口、绑 定 属 性 和 约 束 属 性,然 后 用PropertyChangeListener 接 口 将 一 个Bean 的 属 性 绑 定 到 另 一 个 的 属 性 上。