分享
 
 
 

控制bean定制器的技巧

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

概 要:

集 成 开 发 环 境(IDEs) 可 以" 解 剖" 一 个bean 类 的 文 件 并 且 生 成 一 个 带 参 数 的 对 话 框, 开 发 者 可 以 利 用 它 来 定 制 自 己 的bean。 但 是 这 些" 标 准 的" 定 制 对 话 框 留 下 了 很 多 参 数 以 满 足 它 的 适 应 性, 灵 活 性 和 美 学 目 的, 本 文 论 述 的 是 怎 样 在 设 计 时( 当 然, 有 时 也 在 运 行 时) 定 制bean。 这 两 个 月 你 将 要 学 习 怎 样 定 制 你 的beans。

我 们 希 望 我 们 的 beans 不 仅 让 用 户 易 用, 更 重 要 的 是 使 应 用 程 序 的 开 发 者 方 便 的 通 过 改 变 参 数 来 设 计 自 己 的bean。 在11 月 号 的 专 题 文 章 定 制 你 的Java—— 根 据 应 用 剪 裁JavaBeans 里, 我 们 看 到 了 怎 样 定 制JavaBeans。 一 个 简 单 的 命 名 方 案(nameing scheam) 提 供 了 一 个 最 小 化 机 制, 这 个 机 制 使 用 户 可 以 在 一 个 集 成 开 发 环 境(IDE) 或 其 他bean 的 对 象 集 成 环 境-- 如BeanBox 里 定 制bean。 当 要 定 制 一 个bean 时, 这 个 集 成 开 发 环 境(IDE) 确 定 这 个bean 的 类 并 弹 出 一 个 对 话 框, 每 一 个 属 性 都 有 自 己 的 子 编 辑 框。 而 控 制, 替 换 和 扩 展 这 些 编 辑 框 正 是 本 文 要 讨 论 的 问 题。

本 文, 我 们 将 回 顾 一 下 基 础 概 念, 以 便 于 理 解JavaBeans 的 独 特 的 定 制 方 便 性。 你 将 要 了 解 到 实 现Bean 的 不 同 的 步 骤 和 类。 然 后 我 们 将 讲 述 一 个 用BeanInfo 界 面 生 成 的 简 单 构 件(form), 这 个form 讲 明 了 如 何 配 置 一 个bean。 我 们 还 将 写 一 个 很 简 单 的 定 制 属 性 编 辑 器( 它 使 你 方 便 的 编 辑 属 性) 并 把 它 装 在BeanBox 里。 这 个 过 程 中 我 们 将 接 触 到Introspector 类, 所 谓Introspector 类 是 一 种 被 集 成 开 发 环 境(IDE) 或 其 他 bean 集 成 环 境 用 来 分 析 类 文 件 的JavaBeans 类。

注 意: 本 文 中, 我 使 用 的 术 语IDE 指 的 是" 任 何 涉 及 到bean 内 部 的bean 集 成 环 境"。 它 当 然 不 局 限 于IDEs: 指 像BeanBox, 信 息 公 路(information"buses") 等 类 似 于 此 的, 需 要 知 道bean 内 部 情 况 的Beans 浏 览 器,Bean 测 试 器。 我 使 用"IDE" 只 因 为 它 只 需 三 个 字 母, 而 且 在 本 文 中 很 常 用。

定 制 的 步 骤(levels)

由 于bean 越 来 越 复 杂, 属 性( 或 称 存 取 方 法) 越 来 越 多。 更 多 的 属 性 出 现 在 对 话 框 里, 于 是 我 们 用 来 定 制 bean 的 对 话 框 越 便 越 大, 使 用 起 来 很 不 方 便, 容 易 混 乱。

bean 的 使 用 者 不 一 定 很 清 楚 它 的 属 性 的 意 义 以 及 它 们 之 间 的 联 系。 某 些 属 性, 特 别 是 索 引 属 性, 在 没 有 屏 幕 时 很 不 好 理 解。 另 一 些 如 果 在 图 形 状 态 下 编 辑 会 很 容 易 理 解。

JavaBeans 规 范 和JavaBeans 包 解 决 了 这 个 问 题, 原 因 是 它 灵 活, 开 放, 易 扩 展 的 规 定, 分 类 和 界 面。 这 就 使bean 的 开 发 者 可 以 了 解 用 户 将bean 加 入 自 己 的 程 序 中 来 定 制 它 时 的 屏 幕 显 示。

当 统 一 设 计 面 板 和 让IDE 创 制 自 己 的 对 话 框 时, 为 了 写 一 个 使 用 户 可 以 在 全 图 形 用 户 界 面( complete GUI) 下 自 己 配 置 的 bean , 定 制 控 制 分 为 几 步(levels)。

定 制 步 骤(level)1: 使 用 设 制 模 板

如 果 你 已 经 读 过 这 个JavaBeans 系 列 的 上 一 篇 关 于 定 制bean 的 文 章, 你 已 经 知 道 存 取 方 法 可 以 改 变bean 的 内 部 状 态。 你 还 会 记 得 设 制 模 板(design pattern) 是JavaSoft 用 来 表 示 存 取 方 法 的 术 语, 是 根 据"JavaBeans 规 范" 的 命 名 规 则 定 义 的, 所 以 它 们 的 程 序 包 可 以 表 示 出 所 有 的 属 性 和 设 置 方 法。 如 果 你 没 有 读 过 上 述 文 章, 我 来 做 一 个 小 结: 属 性 是 一 个 软 件 对 象 的 内 部 状 态 的 子 集( 这 里 的 软 件 对 象 指 的 是bean)。 属 性 的 存 取 方 法 提 供 了 改 变 一 个bean 的 某 个 外 部 特 性 的 唯 一 方 法。JavaBeans 规 范 中 规 定 每 一 个 属 性 必 需 有 像 这 样 的 存 取 方 法

SomeType getProperty() (getter)

void setProperty(SomeType value) (setter)

如 果JavaBean 遵 守JavaBeans 规 范, 集 成 开 发 环 境 就 可 以 分 析 一 个bean, 找 到 名 字 附 和 上 述 模 式 的 存 取 方 法 并 且 指 出 它 的 属 性 和 设 置 方 法。 当IDE 知 道 属 性 的 名 字, 类 型 和 存 取 方 法 后, 它 立 即 可 以 生 成 一 个 定 制 对 话 框。 如 果 你 对 这 段 不 是 很 理 解, 可 以 参 阅 我 上 面 提 到 的11 月 号 的 关 于"JavaBeans" 的 文 章。

这 样, 你 已 经 学 会 了 定 制 的 最 基 本 的 步 骤 : 设 制 模 板。 这 是IDEs 和 其 他bean 软 件 包 提 供 给 应 用 程 序 开 发 者 定 制 一 个 bean 的 最 基 础 的 方 法。

如 果 只 依 赖 于 设 制 模 板 做 为 定 制 的 界 面, 存 在 着 几 个 问 题。 首 先, 由 于IDE 只 知 道 对 象 的 名 字 和 属 性, 而 不 知 道 属 性 的 意 义, 大 部 分 将 按 照 字 母 顺 序 排 列 或 按 某 种 顺 序 列 表。 你 的 定 制 对 话 框 将 整 齐 但 不 实 用。 对 话 框 也 会 非 常 巨 大。 回 忆 一 下 我 们 在 上 几 篇 文 章 中 开 发 的BarChartBean 程 序。 如 下 图:

BarChartBean 和 它 的 定 制 对 话 框( 属 性 单)

这 是 一 个 简 单 漂 亮 的bean, 但 请 看 一 下 它 的 属 性 表 ! 我 可 以 轻 而 易 举 地 举 出 成 打 的 很" 酷" 的 属 性 加 在 上 面: 旋 转, 立 体 效 果, 色 彩 变 幻 等 等。 那 么, 再 设 想 一 下 用 这 个 方 法 配 置 电 子 制 表 软 件 或 字 处 理 软 件 bean: 毫 不 夸 张 得 说 将 有 成 百 的 属 性 列 一 个 长 长 的 表。

这 里 也 有 很 多 你 并 不 想 列 出 的 属 性。 如, 上 图 中 BarChartBean 右 边 的 对 话 框 里 的 几 个 属 性 象 字 体, 前 景, 背 景, 它 们 与BarChartBean 毫 无 关 系。(BarChartBean 不 使 用 文 字, 并 且 总 处 于 最 大 化。) 因 为 这 些 属 性 继 承 于java.awt.Component 所 以 它 们 列 在 这 里。

BeanBox 尽 力 把 它 所 知 的BarChartBean 的 点 滴 列 给 你, 但 它 超 过 了 你 的 要 求。BarChartBean 出 现 时 我 不 需 要 所 有 这 些 属 性, 它 还 会 把 你 搞 胡 涂。" 背 景" 和" 填 充 色" 有 什 么 区 别 ?( 设 计 者 当 然 知 道, 但 使 用 者 不 一 定 清 楚 ) 看 来 最 好 把 与 用 户 无 关 的, 会 带 来 麻 烦 的 属 性 隐 藏 起 来。

定 制 步 骤(level)2: 提 供BeanInfo 对 象

定 制 的 第 二 步,java.beans.BeanInfo 的 界 面 里 解 决 了 这 些 问 题。BeanInfo 界 面 使 你 的bean 向 每 一 个" 要 求" 的 用 户 描 述 自 己(" 要 求" 这 个 词 我 将 在 后 面 介 绍)。 除 了 显 示 属 性,BeanInfo 界 面 还 可 以 显 示 名 字, 图 标, 属 性 列 表, 方 法, 事 件 等 等。( 我 们 将 在 下 一 段 里 更 深 的 讨 论BeanInfo)。 很 多 属 性 用 简 单 的 设 置 整 数, 颜 色 或 文 件 的 方 法 不 能 很 好 的 表 示。 象 是 常 见 的 枚 举 类 型: 也 许 我 只 想 在 下 拉 列 中 设 几 种 色 彩( 绿 色, 黄 色 等)。 另 外 的 人 也 许 要 在 一 个Tabbean 中 设 置 制 表 符( 如 字 处 理 程 序 中 一 个PageLayout bean 的 子 构 件)。 设 制 模 板 和 BeanInfo 不 能 直 接 控 制 这 些 情 况, 而java.beans.PropertyEditor 的 界 面 功 能 使 程 序 员 能 直 接 在 图 形 界 面 下 设 置 参 数; 换 言 之, 你 可 以 写 属 性 编 辑 器。

定 制 步 骤(level)3: 提 供 定 制 属 性 编 辑 器

定 制 的 第 三 步,java.beans.PropertyEditor 和 java.beans.PropertyEditorSupport, 使 你 能 写 自 己 的 属 性 编 辑 器。 属 性 编 辑 器 是 一 个 单 独 编 辑 具 有 一 定 类 型 的 属 性 的 构 件。 当 你 击 中"Color" 设 置 颜 色 时 , 会 弹 出 BeanBox 里"Color" 属 性 的 标 准 编 辑 器:

使 用ColorEditor 属 性 编 辑 器

你 看 到 的 这 个 对 话 框 是 BeanBox 用 来 编 辑"Color" 属 性 类 的 标 准 属 性 编 辑 框。PropertyEditor 界 面 允 许 你 发 明 新 类 型。

PropertyEditor 界 面 通 过 对 标 签(tags) 的 支 持 使 你 实 现 枚 举 类 型。

某 些 属 性 由 一 个 软 件 构 件 中 的 几 个 实 际 的 属 性 组 成, 可 以 认 为 是" 逻 辑" 属 性。" 逻 辑" 属 性 的 一 个 最 好 的 例 子 是 彩 色 板(color balance), 它 在 一 个 面 上 显 示 各 种 色 彩。 你 可 以 在 这 个 标 准 属 性 列 里 选 择 属 性 如" 红" 或" 黄", 但 不 必 在 应 用 时 列 给 用 户。 显 示 色 彩 板 的 最 好 方 式 大 概 是: 把 图 像 用 当 前 色 彩 显 示, 在 它 周 围 用 thumbnails 表 示 变 化。 用 户 可 以 选 择 最 满 意 的 图 像, 对 话 框 对 这 幅 图 像 再 做 编 辑。(Adobe Photoshop 里 的 对 话 框 类 似 于 此)。

定 制 步 骤(level)4: 提 供 定 制 器

定 制 控 制 的 第 四 步 是java.beans.C

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有