首页 > 学院 > 开发设计 > 正文

控制bean定制器的技巧

2019-11-18 12:05:14
字体:
来源:转载
供稿:网友

  概 要:
  集 成 开 发 环 境(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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表