各编译器

   摘 要:人 们 应 该 意 识 到, 用 独 立 于 平 台 的Java 开 发 应 用 程 序 的 时 代 就 要 来 临。 在 此, 我 们 将 检 视 下 面 四 种Java 开 发 工 具 在 可 视 化 的 道 路 上 到 底 走 了 多 远, 尤 其 是 它 们 究 竟 在 多 大 程 度 上 接 近 了与 平 台 无 关GUI 界 面 的 可 视 化 开 发。 我 们 的 比 较 对 象 包 括:Sun Java Workshop 2.0,Borland JBuilder 1.0,IBM Visual Age for Java Enterprise Version 1.0 以 及Symantec Visual Cafe for Java Database Development Edition 2.0。 

1.简 介
         平 台 中 立 性 是Java 的 本 质 特 性, 它 使 得Java 无 与 伦 比 地 适 合 于 以 网 络 为 中 心 的 计 算。 如 果 你 正 在 开 发Java 应 用 程 序, 并 且 希 望 它 能 够 运 行 于 从 网 络 计 算 机 到UNIX 工 作 站 等 几 乎 所 有 的 平 台 之 上, 那 你 就 应 该 将 平 台 中 立 性 奉 为 圣 旨, 时 刻 牢 记 心 中。 

         不 幸 的 是, 很 可 能 你 正 在 使 用Windows 开 发 平 台。 许 多 基 于Windows 的 开 发 工 具 实 际 上 无 助 于 获 得 平 台 中 立 性。 

         那 么 到 底 哪 一 种 工 具 更 适 合 于 开 发 独 立 于 平 台 的 应 用 程 序 呢 ? 当 我 们 谈 论 在 众 多 的Java 虚 拟 机 之 中Java 字 节 代 码 的 兼 容 性 时, 这 个 问 题 变 得 难 于 回 答―― 因 为Java Development Kit(JDK) 仍 然 在 快 速 的 发 展。 不 过, 在 如 今 可 视 化 程 序 设 计 的 时 代, 我 们 可 以 容 易 地 鉴 别 出 哪 一 个 工 具 更 好 的 开 发 了Java 的 平 台 独 立 性。 

         我 们 着 重 测 试 了 这 四 种 工 具 对 开 发 平 台 中 立 的 应 用 程 序 提 供 了 何 种 可 视 化 开 发 方 法。 这 四 种 工 具 是:Sun Java Workshop 2.0,Borland JBuilder 1.0,IBM Visual Age for Java Enterprise Version 1.0 以 及Symantec Visual Cafe for Java Database Development Edition 2.0。 我 们 还 对 各 种 产 品 的 可 视 化 程 序 设 计 特 性 做 了 估 价, 同 时 还 对 比 了 其 可 视 组 件 的 缺 省 调 色 板 宽 度。 

2. 评 测 结 果 排 名 
         我 们 将 各 种 产 品 按 以 下 特 性 从A 到F 作 了 排 名: 

创 建 基 于 网 格 的 表 的 难 易 程 度。( 我 们 还 列 出 了 创 建 测 试 表 所 需 时 间。) 

表 的 可 维 护 性。 

可 视 化 程 序 设 计 特 性。 

缺 省 组 件 调 色 板 宽 度。 
         当 你 试 图 创 建 一 个 基 于gridbag 布 局, 且 具 平 台 中 立 性 的 用 户 接 口 时,Java Workshop 2.0 提 供 的 可 视 工 具 是 最 佳 选 择。 因 为 只 有Java Workshop 围 绕gridbag 布 局 进 行 其 可 视 化 设 计。 

         如 若 你 寻 求 可 视 布 局 的 易 用 性 和 可 适 应 性,JBuilder 是 你 最 好 的 选 择。JBuilder 允 许 你 用 绝 对 坐 标 设 计 布 局, 然 后 几 乎 是 自 动 的 转 化 为gridbag 布 局。 它 使 得 对 这 种gridbag 布 局 的 管 理 轻 而 易 举。 

         Visual Age for Java 和Visual Cafe for Java 是 可 视 化 布 局 这 方 面 的 失 败 者。 如 果 你 想 使 用 它 们 开 发gridbag 的 布 局, 那 么 你 必 须 对gridbag 的 限 制 变 量 做 无 尽 的 设 置。 

         但 是 对 于 可 视 化 的 程 序 设 计 来 说,Visual Age 远 非 其 它 工 具 所 及。 有 了 一 只 鼠 标 和Visual Age 作 文 编 辑 器, 你 几 乎 无 所 不 能。 但 要 化 上 一 定 的 时 间 去 学 习。Visual Cafe for Java 能 够 提 供 大 部 分 类Visual Age 的 可 视 化 程 序 设 计 特 性, 但 其 易 用 性 就 要 强 得 多。 

         Java Workshop 从 可 视 化 程 序 设 计 的 角 度 讲, 略 微 逊 色 于Visual Cafe。 你 可 以 稍 许 领 略 到 它 的 可 视 化 程 序 设 计 特 性, 但 最 好 还 是 自 己 去 书 写。 使 用JBuilder 时, 你 就 根 本 不 必 费 心 去 想 什 么 可 视 化 设 计。 

         对 于 缺 省 调 色 板 的 宽 度, 如 果 没 有 创 建 一 个 大 型 的 应 用 程 序, 很 难 对JBuilder 和Visual Cafe for Java 进 行 比 较。 我 们 尤 为 赞 赏Visual Cafe 调 色 板 所 提 供 的 定 时 器 控 制( 为 触 发 事 件 所 用)。JBuilder 包 含 了 一 些 漂 亮 的 图 表 控 制。Visual 虽 然 是 初 级, 仍 然 提 供 了 较 多 有 用 的Java 类。Java Workshop 在 调 色 板 这 方 面 落 于 人 后。 

         我 们 没 有 对 产 品 所 提 供 的 控 制 进 行 记 数( 你 可 以 任 意 扩 展 调 色 板), 但 我 们 包 括 了 一 些 缺 省 调 色 板 的 图 象, 这 样 你 可 以 对 有 多 少 控 制 可 用 有 一 个 大 致 了 解。 

3. 理 由 和 测 试 方 法
         除 却Java 虚 拟 机 的 特 异 性 之 外, 影 响 平 台 中 立 性 最 为 常 见 的 问 题 是 一 个 工 具 如 何 实 现Java GUI 界 面 的 可 视 化 设 计。 基 于 窗 口 的 工 具 几 乎 无 一 例 外 的 坚 持 所 见 即 所 得(What You See Is What You Get) 的 原 则 来 实 现 可 视 化 设 计。 使 用 这 种 技 术, 将 一 个 按 钮 拖 放 至 表 的 某 一 确 定 位 置, 而 当 你 运 行 应 用 程 序 时, 该 按 钮 就 恰 好 应 该 出 现 在 原 位 置 上。 

         这 对 于Windows 的 开 发 者 来 说 是 再 熟 悉 不 过 了。 但 是 使 用 这 种 方 法, 当 要 把 在 某 平 台 开 发 的 应 用 程 序 用 于 另 一 平 台 时, 经 常 会 发 生 许 多 显 示 上 不 一 致 的 问 题。 在 那 些 事 先 未 曾 协 调 一 致 的 平 台 上, 一 个 外 来 应 用 程 序 的 按 钮 可 能 会 被 一 种 不 同 的 三 维 效 果 显 示, 这 可 能 会 影 响 按 钮 标 签 的 清 晰 度; 或 者 又 可 能 会 自 动 拉 伸 按 钮 边 界, 而 这 又 将 导 致 周 边 的 可 视 控 制 被 覆 盖。 

         3.1 这 个 问 题 应 由gridbag 来 解 决 

         为 解 决 这 个 难 题,Java 提 供 了 所 谓 布 局 管 理 器。 一 个 布 局 管 理 器 按 照 当 前 的 用 户 平 台 重 置 应 用 程 序 的 用 户 界 面, 即 调 整 可 视 控 制 的 尺 寸 和 位 置。 

         Java 包 括 了 一 些 缺 省 的 布 局 管 理 器, 如 卡 片 布 局, 格 子 布 局, 边 界 布 局, 流 布 局 和gridbag 布 局 等。 这 些 布 局 管 理 器 适 用 于 不 同 的 环 境, 由 你 所 设 计 的 界 面 种 类 而 定。 其 中 卡 片, 流 和 边 界 这 三 个 布 局 管 理 器 最 为 易 用, 但 格 子 布 局 在 易 用 性 上 亦 相 差 无 几。 你 也 可 以 将 布 局 设 为 空, 适 用 缺 省 的 所 见 即 所 得 风 格 基 于 坐 标 的 设 计。 或 者 你 还 可 以 自 己 定 制 布 局 管 理 器。 

         在Java 发 行 的 所 有 布 局 管 理 器 之 中,gridbag 布 局 由 于 其 可 适 应 性 而 得 到 最 为 广 泛 的 应 用。 但 许 多 开 发 者 认 为 它 难 于 控 制 和 掌 握。gridbag 布 局 包 括 一 系 列 小 组 件 包, 但 组 件 包 中 每 一 组 件 的 安 排 不 必 遵 从 严 格 的x-y 坐 标 体 系。 

 

图1. 带 有12 个 单 元 格 的gridbag 布 局 

         你 可 以 将 一 个 组 件 拖 放 至 单 一 组 件 包 中, 也 可 以 将 其 放 置 于 若 干 组 件 包 之 上。 

 

图2. 按 钮 在 左 上 单 元 格 中, 但 是 列 表 箱 占 据 2 行 3 列 

         对 于 在gridbag 布 局 中 的 可 视 组 件, 你 应 该 决 定 是 采 用 固 定 的 显 示 方 式, 还 是 在 用 户 扩 大 或 缩 小 窗 口 时, 采 用 自 适 应 的 方 式 加 以 调 整 显 示。 你 能 够 采 取 措 施 使 得 组 件 在 周 围 环 境 发 生 变 化 时, 尽 可 能 的 保 持 原 来 位 置。 

         这 种 技 术 能 够 决 定 在 窗 口 被 调 整 时, 你 的 组 件 占 有 的 水 平 或 垂 直 空 间 是 否 要 相 应 调 整。 举 例 说 来, 你 可 以 让 列 表 这 样 的 组 件 扩 充 至 适 当 空 间, 而 让 按 钮 等 控 件 保 持 同 样 的 尺 寸。 

         这 种 设 置 称 为gridbag constraints。 在gridbag 中 的 每 一 个 组 件 都 有 自 己 的 一 组gridbag constraint, 这 用 于 确 定 在 布 局 中 组 件 的 行 为。 

         3.2 中 立 区 域 

         虽 然gridbag 难 于 使 用, 但 对 于 设 计 富 有 魅 力 且 具 有 平 台 中 立 性 的 应 用 界 面 来 说, 它 确 是 最 好 的 布 局。 正 因 为 如 此, 我 们 选 择 了gridbag 作 为 测 试 基 准。 我 们 用gridbag 布 局 设 计 了 各 式 各 样 的 表, 并 不 断 调 整; 另 外 还 在 不 同 的 布 局 种 类 之 间 加 以 切 换, 这 一 切 都 是 为 了 检 视 各 种 产 品 如 何 支 持 用 户 维 护 和 修 改 已 有 的 设 计。 

         我 们 创 建 了 一 个 相 对 复 杂 的 表( 含 有12 个 各 种 类 型 的 组 件) 并 对gridbag 的 各 种 设 置 加 以 调 整, 直 至 表 呈 现 了 我 们 预 期 的 效 果。 当 我 们 将 其 应 用 于 不 同 的 平 台 时, 该 表 必 须 保 持 相 当 的 风 格( 我 们 使 用 了Windows NT 和Linux)。 

         表 制 作 完 成 之 后, 你 就 会 掌 握 如 何 利 用gridbag 限 制 设 置, 制 作 你 所 喜 爱 的 表。 

         这 种 表 面 上 的 好 处 却 为 测 试 设 下 了 陷 阱: 我 们 学 会 一 种 产 品 的gridbag 设 置 之 后, 就 会 认 定, 下 一 种 产 品 一 定 会 更 容 易 掌 握 了。 

         为 解 决 这 种 两 难 处 境, 每 次 我 们 都 以 不 同 的 方 式 设 置 和 重 置 组 件, 然 后 再 转 回 重 做, 给 每 种 产 品 多 一 次 机 会。 一 旦 对 某 种 产 品 进 行 了 满 意 的 测 试, 我 们 将 记 录 其 创 建 一 个 诱 人 的 可 视 化 表 的 时 间。 然 后 我 们 对 重 新 设 置 该 表 的 难 度 予 以 估 价。 

         对 于 一 个 可 视 化 设 计 来 说, 不 仅 仅 是 组 件 的 放 置 问 题。 有 些 产 品 允 许 你 可 视 的 调 整 应 用 程 序 的 行 为。 我 们 也 对 这 种 产 品 能 力 加 以 测 试。 最 后, 各 家 厂 商 都 乐 于 提 供 大 量 的 组 件 以 供 用 户 选 择。 幸 运 的 是, 许 多 工 具 允 许 你 向 组 件 板 中 添 加, 因 此, 一 个 较 小 的 组 件 板 并 不 是Java 开 发 环 境 特 别 大 的 缺 点。 

         最 为 重 要 的 是, 我 们 从 可 视 化 应 用 程 序 设 计 的 角 度 发 起 本 次 评 测。 因 此, 评 测 的 范 围 仅 仅 包 括 了 各 家 产 品 一 部 分 的 优 缺 点。 相 应 的, 我 们 没 有 给 各 种 产 品 设 置 底 线 分 数。 关 于 未 参 与 比 较 的 特 性 细 节, 请 见 特 性 列 表。 

4.Java Workshop 2.0 
测 试 结 果  
表 创 建 的 难 易 度 A+  
完 成 表 的 时 间 3 分 钟  
表 的 维 护 B  
可 视 化 程 序 设 计 D  
缺 省 调 色 板 的 宽 度 C  

         4.1 表 创 建 的 难 易 度 

         Java Workshop 是 智 慧 和 愚 蠢 的 一 种 独 特 结 合。 对 于 创 建 平 台 中 立 性 的gridbag 布 局,Java Workshop 2.0 的 成 就 远 非 其 它 开 发 工 具 所 及。 但 是,Java Workshop 那 种 虽 说 无 害 但 却 极 为 蹩 脚 和 恼 人 的 设 计 策 略 常 常 会 掩 盖 其 优 势 所 在。 

         掌 握gridbag 基 于 布 局 的 可 视 化 设 计 要 花 上 一 些 时 间, 但 这 实 际 上 是 物 有 所 值。 花 在 掌 握 学 习 上 的 这 点 儿 时 间, 比 起 将 传 统 的 所 见 即 所 得 风 格 的 设 计 成 果 移 植 到 要 求 较 高 平 台 中 立 性 的 平 台 上 所 遇 到 的 麻 烦 来 说, 还 是 值 得 的。 

         一 旦 你 掌 握 了 这 种 方 法, 设 计 就 变 得 轻 而 易 举 了。 你 可 以 拖 放 组 件, 在 格 子 组 件 包 之 间 轻 易 的 改 变 其 大 小。 通 过 点 击 格 子 之 外 的 某 一 部 分, 你 还 可 以 管 理gridbag 限 制 的 设 置( 比 如 说 重 量 和 填 充 因 子)。 如 果 某 一 时 刻 你 要 检 查 表 在 运 行 时 的 外 观, 可 以 立 刻 转 入 预 显 模 式。 你 还 能 够 改 变 预 显 表 的 尺 寸, 对 其 稍 加 管 理 措 施, 用 以 监 视 其 对 类 似 变 化 的 反 应 情 况。 

 

图3 Sun Java Workshop 2.0 

         Java Workshop 中 存 在 几 点 小 毛 病。 例 如, 当 设 计 一 个 表 时, 你 只 有 下 拉 一 个 复 合 盒 子, 才 能 在 设 计 和 预 显 两 种 模 式 间 切 换。 这 使 本 可 以 用 一 次 点 击 解 决 的 问 题 必 须 要 求 两 次 点 击。 有 好 多 的 一 次 点 击 方 案 可 供 选 择( 如 按 钮、 检 取 框、 两 个 互 斥 按 钮、 常 用 的 二 值 开 关) 是 如 此 优 于 这 种 方 法, 以 至 于 人 们 不 得 不 承 认,Sun 在 软 件 风 格 上, 还 有 一 段 路 要 走。 

         就 连 把 组 件 从 一 处 移 往 另 一 处 这 样 简 单 的 问 题 都 变 得 较 为 复 杂。 你 必 须 在 组 件 包 中 特 定 的 位 置 点 击 并 拖 动, 而 该 位 置 有 可 能 并 不 在 组 件 所 在 处。 

         并 没 有 规 定 要 求 你 必 须 使 用gridbag 布 局 去 编 制 应 用 程 序 的 每 一 片 段, 但 是Java Workshop 的 每 一 可 视 对 象 迟 早 要 终 结 于gridbag 布 局。 

         例 如, 你 可 以 创 建 流 布 局 面 板。 但 是 不 能 将 组 件 直 接 从 组 件 板 中 拖 放 至 其 中。 你 必 须 为 流 布 局 面 板 打 开 一 个 设 置 对 话 框, 然 后 插 入 一 些 东 西。 这 些 东 西 是-- 你 猜 到 的――gridbag 布 局 面 板。 这 样, 你 才 能 创 建 每 一 个 带 有 若 干 组 件 的gridbag 布 局 面 板。 

         最 后, 你 似 乎 得 到 了 一 个 仅 仅 带 有 组 件 的 面 板, 但 实 际 上, 每 一 个 组 件 都 有 其 自 己 的gridbag。 我 们 无 法 对 这 种 方 法 挑 出 毛 病( 实 际 上, 这 还 有 可 能 加 速 开 发), 但 这 种 想 法 却 令 人 难 以 苟 同。 

         4.2 表 的 维 护 

         尽 管 你 可 以 在 所 设 计 的 格 子 中 添 加 单 一 行 或 列, 却 不 能 做 同 样 的 删 除。 点 击 一 下 格 子 中 行 列 相 交 的 部 分, 行 列 一 同 被 选 中, 于 是 当 你 按 下 删 除 键 时, 行 列 一 同 被 删 除。 

 

图4. 在Java WorkShop gridbag 布 局 中, 点 击 一 下, 行 列 一 同 被 选 中 

         在 你 要 删 除 单 一 行 时, 必 须 加 上 一 列, 选 中 预 删 除 行 和 新 添 加 列 的 交 点, 然 后 一 同 删 除。 虽 然 这 并 不 是 十 分 困 难, 这 种 用 户 界 面 实 在 有 些 蹩 脚。 

         Java Workshop 在 许 多 重 要 方 面 被 淘 汰 出 局, 与 其 它 产 品 相 比 有 许 多 另 人 头 疼 之 处( 真 不 只 他 们 究 竟 在 想 什 么), 但 它 毕 竟 使 用 户 从gridbag 布 局 的 无 聊 细 节 中 抽 出 身 来, 并 且 成 就 非 凡。 其 它 任 何 一 种 产 品 在 这 方 面 连 边 儿 都 没 有 摸 到。 

         4.3 可 视 化 程 序 设 计 

         Java Workshop 的 可 视 化 程 序 设 计 特 性 还 是 十 分 初 级 的。 例 如, 你 可 以 指 定 点 击 按 钮 时 的 一 系 列 动 作, 但 这 些 动 作 只 能 是 最 原 始 的( 如" 隐 藏 列 表"), 其 它 的 必 须 自 己 编 写。 

         你 可 以 对 操 作 加 以 存 储 可 重 定 序。 你 还 可 以 指 定 触 发 操 作 的 动 作 的 过 滤 器。 例 如, 你 可 视 化 定 义 一 种 操 作 之 时, 可 以 指 定 仅 当 某 一GUI 按 钮 和Shift 键 被 按 下 才 能 触 发 该 操 作。 

         Java Workshop 的 模 板 代 码 含 有 大 量 的 注 释, 这 些 注 释 极 为 有 用。 

         Java Workshop 2.0 自 身 就 是 用Java 书 写 的。 好 象 是 为 了 表 明Java 的 不 成 熟 性, 在 使 用 该 产 品 时, 我 们 遇 到 了 一 些 空 指 针 引 起 异 常。 同 时, 似 乎 是 为 了 证 明 其 健 壮 性, 这 些 异 常 从 未 中 断 我 们 的 工 作。 我 们 只 是 简 单 的 关 掉 了 错 误 对 话 框, 继 续 工 作。 

         4.4 缺 省 调 色 板 的 宽 度 

 

图5. 缺 省 调 色 板 提 供 一 切 用 户 所 需 功 能 

         Java Workshop 在 缺 省 调 色 板 宽 度 这 一 项 上 排 在 了 最 后。 它 提 供 的 宽 度 最 为 短 小, 虽 然 你 能 够 获 得 大 部 分 应 用 程 序 所 需, 但 除 此 之 外 几 乎 一 无 所 有。 

 




5.JBuilder 1.0
测 试 结 果  
表 创 建 的 难 易 度 A  
完 成 表 的 时 间 8 分 钟  
表 的 维 护 B  
可 视 化 程 序 设 计 E  
缺 省 调 色 板 的 宽 度 A  

         5.1 表 创 建 的 难 易 度 

         JBuilder 提 供 了 一 种 独 特 的 方 法, 使 得 你 可 以 用 一 些 工 具 创 建 平 台 中 立 的GUI。 在 表 面 上,JBuilder 似 乎 很 象Visual Cafe 或 是Visual Age for Java。 它 缺 省 使 用 一 种 称 为XYLayout 东 西。 这 种 特 性 允 许 你 用 所 见 即 所 得 的 方 式 放 置 组 件。 

         但 事 实 上 并 非 如 此。JBuilder 与 其 它 所 见 即 所 得 的 设 计 者 不 同, 它 在 所 见 即 所 得 和gridbag 布 局 之 间 建 立 连 接。JBuilder 允 许 你 用XYLayout 在 表 中 处 置 组 件, 然 后 在 保 持 原 设 计 风 格 的 基 础 上 转 换 为gridbag 布 局。 当 你 用 任 何 一 种 产 品 把 空 布 局 转 换 为gridbag 时, 这 些 组 件 就 会 莫 名 其 妙 的 出 现 在 不 同 位 置, 并 呈 现 不 同 的 缺 省 尺 寸。 

 

图6. Borland JBuilder 1.0 

         当 你 要 把 用 所 见 即 所 得 创 建 的 表 转 换 为gridbag 布 局 时,JBuilder 可 以 很 好 的 对gridbag 限 制 做 出 适 当 的 估 计, 但 是 其 转 换 工 作 却 并 不 令 人 十 分 满 意。 它 主 要 就 是 依 靠gridbag 的 限 制, 力 图 完 成 一 张 正 确 的 表, 对 于 你 改 变 窗 口 尺 寸 时 表 的 行 为 来 说, 情 况 犹 为 如 此。 

         5.2 表 的 可 维 护 性 

         幸 运 的 是, 在JBuilder 中 调 整gridbag 的 限 制 十 分 容 易。 你 可 以 随 时 弹 出gridbag 限 制 对 话 框。 更 为 甚 者, 在 组 件 上 右 击 鼠 标, 你 就 可 以 获 得 若 干 项gridbag 限 制 参 数, 如 垂 直 或 水 平 重 量 和 填 充 因 子; 或 者 你 还 可 以 直 接 进 到gridbag 限 制 属 性 对 话 框。 虽 然 并 不 象Java Workshop 那 样 清 晰 简 单,JBuilder 仍 然 可 以 在 活 动 的gridbag 布 局 中 移 动 组 件, 重 置 其 大 小。 

 

图7. Jbuilder 将gridbag constraint 放 在 一 个 单 一 对 话 框 

         如 若 使 用XYLayout-gridbag 技 术 设 计 表, 我 们 对 你 有 一 些 小 的 建 议: 计 划 在 先。 如 果 已 经 调 好 了 已 有 表 的gridbag 布 局, 随 便 在 其 中 添 加 控 制 就 不 太 容 易 了。 你 不 仅 需 要 调 整 新 控 制 的gridbag 限 制, 可 能 你 还 得 对 其 周 围 的 控 制 做 相 应 的 调 整。 

 

图8. 一 个 组 件 集 

         某 些 情 况 下, 转 到XYLayout 去 添 加 一 两 个 组 件 会 变 得 相 对 容 易 一 些。 但 每 次 从gridbag 转 到XYLayout 得 的 时 候,JBuilder 就 会 忘 记 所 有 你 在gridbag 布 局 中 对 其 限 制 所 做 的 种 种 调 整。 这 样 就 导 致 了 大 量 的 重 复 设 置 工 作。 

         在 这 里,Java Workshop "gridbag-only" 方 法 的 严 格 性 体 现 了 一 定 优 势。 尽 管 有 时 会 在Java Workshop 中 遇 到 小 问 题, 但 其 在gridbag 布 局 中 添 加 任 意 行 列 的 方 法 有 其 优 点, 它 使 得 在 保 护 已 有 的 工 作 成 果 的 基 础 上, 添 加 控 制 变 得 十 分 容 易。 

         5.3 可 视 化 程 序 设 计 

         JBuilder 提 供 了 称 为Interaction Wizard 的 可 视 化 编 程 工 具。 其 思 想 是 使 的 组 件 间 简 单 的 交 互 自 动 化, 例 如, 当 按 下 按 钮 时, 把 标 签 设 成"blue"。 

         不 幸 的 是,Interaction Wizard 毫 无 用 处。 它 不 仅 十 分 愚 笨, 并 缺 少 高 级 程 序 员 所 需 的 可 适 应 性。 我 们 尝 试 在 按 钮 按 下 时, 将 来 自 于 编 辑 控 制 中 的 文 本 添 入 选 择 列 表, 但Interaction Wizard 无 法 处 理 两 个 以 上 控 制。 我 们 没 有 轻 易 放 弃。 接 着 尝 试 但 按 钮 按 下 时 在 列 表 中 添 加 静 态 条 目, 依 然 无 能 为 力。Interaction Wizard 仅 仅 支 持 关 于 列 表 的 四 种 选 择, 而 添 加 条 目 不 在 其 中。 

         将 光 标 放 置 于 你 自 己 代 码 的 某 一 类 之 上, 右 击 鼠 标, 选 择"Browse symbol at cursor" 就 可 以 跳 至 类 浏 览 器。 虽 然 这 不 无 用 处, 但 我 们 更 为 偏 爱Visual Cafe 的 做 法- 将 类 库 引 用 显 示 给 你。Borland 的 产 品 名 不 虚 传, 其 类 库 引 用 表 现 出 色( 有 些 时 候 强 于Visual Cafe), 尽 管 有 时 你 要 手 工 搜 寻。 

         JBuilder 的 一 个 小 错 误( 仅 在 一 次 测 试 中 发 生) 使 我 们 吃 惊 不 小, 当 我 们 重 新 调 入 工 程 时, 它 把 应 用 程 序 的 面 板 压 缩 成 小 方 块 儿。 幸 运 的 是, 我 们 有 解 决 办 法, 那 就 是 将 面 板 拉 伸 为 原 来 尺 寸, 所 有 的 组 件 就 会 恢 复 原 位( 这 也 体 现 了gridbag 布 局 管 理 器 的 优 越 性)。 

         JBuilder 会 偶 尔 拒 绝 调 入。 它 在 绘 制 完 初 始 菜 单 和 工 具 条 之 后 挂 起。 发 生 这 种 情 况 之 后, 我 们 能 够 将 应 用 程 序 成 功 的 杀 死 并 重 启。 

         5.4 缺 省 调 色 板 宽 度 

         

         Borland JBuilder 是 提 供 了 最 为 广 泛 的 缺 省 调 色 板 的 产 品 之 一。 

6.Visual Age for Java Enterprise Version 1.0
表3  测 试 结 果  
表 创 建 的 难 易 度 C+  
完 成 表 的 时 间 15 分 钟  
表 的 维 护 C  
可 视 化 程 序 设 计 A+  
缺 省 调 色 板 的 宽 度 C  

         6.1 表 创 建 的 难 易 度 

         IBM Visual Age for Java 在 进 行 可 视 化 设 计 时 显 得 莫 名 其 妙。 它 尽 力 让 人 相 信, 你 正 在gridbag 布 局 中 用 可 视 化 的 方 法 安 置 组 件。 但 我 们 了 解 了 真 相: 最 初 向gridbag 布 局 拖 入 的 几 个 组 件 几 乎 均 以 随 机 方 式 安 置, 这 在 观 感 上 带 来 混 乱。 但 是, 当 你 把 一 个 组 件 沿 表 四 周 拖 动 时, 一 系 列 暂 时 的 格 线 将 出 现 在 上 面。 格 子 对 于 安 排 组 件 顺 序 来 说 是 有 用 的, 但 是 我 们 实 在 无 法 看 出 那 些 暂 时 显 现 的 格 线 与 我 们 要 进 行 的 工 作 有 什 么 一 致 性 的 联 系。 

 

图9. IBM Visual Age Java 1.0 

         我 们 得 出 的 结 论 是: 使 用gridbag 设 计 表 的 最 佳 方 式, 要 在 开 始 时 将 组 件 随 意 的 拖 放 在 表 中, 然 后 在 针 对 每 一 个 组 件 设 置gridbag 限 制。 表 将 反 应 你 对gridbag 限 制 所 做 的 改 动, 这 样 在 你 调 整 限 制 对 话 框 中 的 设 置 时, 就 能 够 看 到 结 果。 

         象JBuilder 一 样,Visual Age for Java 将 所 有gridbag 限 制 设 置 集 于 单 一 对 话 框 中。 奇 怪 的 是, 你 无 法 改 变 该 框 的 大 小, 只 能 通 过 滚 动 条 看 到 所 有gridbag 限 制。 

 

图10. 滚 动 条 

         6.2 表 的 可 维 护 性 

         尽 管 测 试 结 果 是 基 于gridbag 的, 但 我 们 仍 然 注 意 到,Visual Age for Java 以 一 种 混 合 的 结 果 处 理 其 它 布 局。 我 们 能 在 格 子 布 局 中 挪 动 组 件, 该 工 具 不 让 你 选 择 格 子 限 制- 它 简 单 的 给 我 们 一 个 空 白 的 对 话 框。 但 我 们 还 是 可 以 轻 易 的 可 视 组 建 和 修 改 边 界 布 局。 

         为 了 维 护 我 们 最 为 关 注 的gridbag 布 局, 你 必 须 在 做 出 改 变 时 编 辑 限 制 设 置。 

         6.3 可 视 化 程 序 设 计 

         Visual Age for Java 是 可 视 化 程 序 设 计 无 可 争 议 的 佼 佼 者。 不 需 书 写 一 行 代 码, 你 就 可 以 为 应 用 程 序 创 建 和 添 加 非 常 复 杂 的 行 为。 但 是 对Visual Composition 编 辑 器 有 一 个 限 制, 那 就 是 你 必 须 学 会 从 侧 面 或 是 倒 过 来 想 问 题。( 可 以 这 样 说: 对 于 那 些 认 为HP 的 逆 波 兰 表 示 计 算 器 好 用 的 人 来 说,Visual Age 的 设 计 者 的 思 想 一 定 易 于 接 受。) 

         为 了 帮 助 你 理 解 我 们 的 意 思, 我 们 举 一 例 子。 设 想 有 一 个 包 含 三 个 组 件 的 表: 一 个 文 本 域、 一 个 按 钮 和 一 个 列 表。 你 想 让 你 的 应 用 程 序 从 文 本 控 制 接 收 正 文, 将 其 添 加 至 列 表 之 中。 通 过 表 中 组 件 之 间 的 种 种 可 视 连 接, 你 可 以 达 到 目 的。 

         首 先, 在 表 中 按 钮 上 右 击 鼠 标。 弹 出 一 个 上 下 文 相 关 的 菜 单。 选 择 其 中 的"Connect", 然 后 从 子 菜 单 中 选 择"Action Performed"。"Action Performed" 在 这 里 是 按 钮 的 缺 省 动 作- 即, 某 人 对 它 进 行 点 击。 现 在 将 出 现 一 条 从 鼠 标 至 按 钮 的 扩 展 线。 你 应 该 把 这 条 线 连 接 至 某 一 组 件( 这 条 线 表 示 右 击 鼠 标 动 作)。 

         下 面 是 可 视 化 编 辑 器 令 人 不 解 之 处。 合 乎 情 理 的 想, 应 该 以 如 下 方 式 完 成 该 任 务: 

         1. 点 击 鼠 标。 
         2. 从 文 本 域 取 得 文 本。 
         3. 将 正 文 作 为 新 条 目 加 入 列 表。 

         你 可 能 认 为 因 为 下 一 步 是 获 得 正 文, 所 以 应 该 将 按 钮 动 作 连 至 文 本 域。 不 是 的。 你 必 须 点 击 目 标 对 象( 列 表 框)。 在Visual Composition 编 辑 器 中, 最 终 接 受 按 钮 动 作 的 是 列 表 框。 它 目 前 并 不 关 心 正 文 域。 

         到 此, 你 将 看 到 一 个 箭 头 将 按 钮 域 列 表 相 连。 为 了 完 成 工 作, 必 须 在 文 本 域 右 击 鼠 标。 从 菜 单 中 选 择"Connect", 然 后 从 子 菜 单 中 选 择"text"。 一 条 从 鼠 标 到 文 本 域 的 扩 展 线 再 次 显 现, 你 应 该 再 把 它 连 到 某 个 地 方。 

         但 是 这 次 连 至 何 处 呢 ? 是 按 钮 还 是 列 表 ? 令 人 吃 惊 的 是 两 者 都 不 是。 你 必 须 把 这 条 线 连 到 将 按 钮 与 列 表 连 接 至 一 起 的 箭 头 上。 这 种 结 果 就 向 下 图 所 示 那 样。 

 

图11. 在 Visual Age for Java 中 连 接 组 件 和 动 作 

         如 果 你 认 为 以 上 的 过 程 很 是 惑 人, 试 用 刚 才 的 思 路 重 新 设 想 一 个 更 为 复 杂 的 问 题: 有 一 个 复 杂 的 表 带 有 指 向 各 处 的 箭 头。 上 面 的 方 法 看 似 蹩 脚, 确 能 够 非 常 出 色 的 解 决 这 个 问 题。 如 果 你 肯 费 心 仔 细 思 考, 它 可 以 相 当 轻 易 的 完 成 组 件 之 间 的 交 互。 

         你 还 可 以 在 对 象 之 间 建 立 多 种 连 接。 与 定 义 动 作 的 次 序 无 关, 你 可 以 可 视 化 的 控 制 动 作 的 顺 序。 在 下 面 的 图 中, 你 会 看 到 一 张 表, 按 下 其 中 一 个 按 钮 会 顺 序 引 发 三 个 动 作: 

         1. 文 本 域 中 的 内 容 添 入 列 表。 
         2. 文 本 域 被 清 空。 
         3. 输 入 焦 点 返 回 文 本 域。 

         

 

图12. Visual Age for Java 中 较 为 复 杂 的 组 件 系 列 

         下 面 的 图 示 示 出 最 终 应 用 程 序 概 貌。 

 

图13. 网 络 测 试 应 用 程 序 在Vist 中 增 加 条 目 

         6.4 缺 省 调 色 板 的 宽 度 

         在 缺 省 调 色 板 宽 度 这 一 项 上,IBM 略 显 寒 酸, 但 在 企 业 版 中 大 为 改 观。 另 外, 创 建 和 向 调 色 板 中 添 加 自 制 控 制 十 分 容 易。Visual Age 还 提 供 了 许 多 有 用 的 可 选Java 类。 

 

图14. 继 承 对 象 与 可 视 化 编 程 协 作 

         我 们 对 调 色 板 中 的 对 象 工 厂 和 通 用 对 象 颇 为 欣 赏。 基 于 下 面 的 原 因, 我 们 认 为 它 们 本 质 上 是 用 于 复 杂 的 可 视 化 程 序 设 计 的。 在"To-Do list" 例 子 的 第 一 个 图 中, 你 或 许 已 经 注 意 到 一 个 称 为Object1 的 组 件。 你 可 以 将 其 设 置 成 任 何 一 种 对 象。 在 我 们 的 例 子 中 将 其 设 成 了Java String 对 象。 

         为 什 么 呢 ? 我 们 描 述 例 子 时, 当 用 户 点 击 按 钮, 程 序 将 正 文 添 加 如 列 表。 然 后 将 正 文 域 内 容 设 置 为Object1。 因 为Object1 是 空 字 符 串, 该 动 作 将 清 空 正 文 域。 

7.Visual Cafe for Java Datebase Development Edition 2.0
         

表4  测 试 结 果  
表 创 建 的 难 易 度 C  
完 成 表 的 时 间 15 分 钟  
表 的 维 护 C-  
可 视 化 程 序 设 计 B-  
缺 省 调 色 板 的 宽 度 A  

         7.1 表 创 建 的 难 易 度 

         不 论 是 专 业 版 还 是Database Development Edition,Symantec Visual Cafe for Java 都 是 极 为 强 大 的 产 品。 从 整 体 上 讲, 它 确 有 资 格 与 其 它 产 品 相 互 竞 争。 不 幸 的 是, 它 的 可 视 化 设 计 与 程 序 设 计 能 力 却 是 其 最 为 薄 弱 之 处, 而 这 两 点 是 我 们 关 注 的 焦 点。 

 

图15. Visual Cafe for Java Database Development Edition 2.0 

         当 你 要 把 一 张 表 转 化 为gridbag 布 局 时, 完 全 不 必 费 心 于 其 中 各 组 件 的 精 确 坐 标 定 位。 这 些 组 件 将 根 本 不 会 考 虑 你 的 意 愿, 自 行 重 置 并 改 变 大 小。 

         象Visual Age for Java 一 样,Visual Cafe for Java 不 允 许 你 可 视 的 在gridbag 布 局 中 放 置 组 件。 你 必 须 首 先 置 其 位 置 于 度 外, 将 组 件 随 意 拖 放 至 表 之 上 , 然 后 在 手 工 调 整 每 一 组 件 的gridbag 限 制。 仍 然 类 似 于Visual Age for Java, 你 所 做 的 改 变 即 刻 显 示 在 表 中, 这 样 至 少 你 可 以 得 到 手 工 修 改 的 及 时 可 视 反 馈。 

         gridbag 限 制 的 设 置 反 应 在 整 体 组 件 属 性 窗 口, 这 不 同 于Visual Age for Java 和JBuilder。 这 通 常 并 非 难 题, 但 是 我 们 发 现 与 其 它 产 品 相 比, 我 们 总 是 更 频 于 寻 找 各 种 设 置。 

         7.2 表 的 可 维 护 性 

 

图16. gridbag constraints 与 所 有 其 他 组 件 特 性 共 享 一 个 窗 口 

         只 要 你 对 基 于gridbag 的 表 做 出 修 改, 就 必 须 编 辑 组 件 的 各 种gridbag 限 制, 这 样 才 能 使 修 改 生 效。 其 不 便 之 处 于Visual Age for Java 相 同。 

         使 用 格 子 布 局, 无 法 沿 表 移 动 组 件, 但 是 我 们 发 现, 改 变 工 程 窗 口 中 组 件 的 边 界 后, 就 可 以 重 置 组 件。 象Visual Age for Java 那 样, 用 边 界 布 局 可 直 接 在 表 中 安 置 组 件。 但 其 结 果 有 些 惑 人。Visual Age for Java 在 用 边 界 布 局 时 会 给 组 件 以 合 适 的 限 制。 而Visual Cafe 并 非 如 此。 它 只 简 单 的 以 绝 对 坐 标 放 置 组 件。 

         7.3 可 视 化 程 序 设 计 

         Visual Cafe 提 供 一 个 类 似 于Borland JBuilder 的 交 互 式 专 家, 但 却 没 有 类 似 的 缺 点。 它 并 不 象Visual Age for Java 那 样 是 一 个 面 向 复 杂 和 强 可 展 性 强 可 视 化 程 序 设 计 的 工 具, 但 用 它 你 仍 可 以 做 许 多 工 作, 而 且 极 少 依 赖 于 键 盘。Visual Cafe 的 可 视 化 程 序 设 计 方 法 有 一 个 优 点, 那 就 是 不 象Visual Age for Java 那 样 难 于 学 习。 

 

图17. Visual Cafe 的 调 色 板 中 的 功 能 

         在 组 件 上 右 击 鼠 标 并 从 菜 单 中 选 择 适 当 的 项, 你 就 可 以 访 问 交 互 式 的 专 家。 用Visual Cafe for Java 可 视 化 的 方 法, 我 们 轻 易 的 创 建 了"To-Do list" 例 程。 利 用 专 家 可 以 自 动 创 建 交 互 动 作 的 代 码。 

         对 任 意 控 制 均 可 创 建 多 中 交 互。 但 是 不 象Visual Age for Java 保 持 每 一 选 择 可 视, 如 果 要 重 置 各 种 动 作 的 顺 序, 你 必 须 手 工 编 辑 代 码。 

         从 源 代 码 编 辑 器 的 下 拉 列 表 中, 你 可 以 选 择 一 个 组 件, 然 后 从 另 一 个 下 拉 列 表 中 选 择 一 个 事 件 或 方 法。 这 种 处 理 将 你 即 刻 带 到 处 理 该 事 件 或 方 法 的 代 码 处。 

         如 果 你 将 光 标 放 置 在 自 己 代 码 的 类 关 键 字 上( 如 类 定 义GridBagLayout) 并 且 按 下 帮 助 键(F1),Visual Cafe 将 显 示 类 定 义, 以 及 一 系 列 属 性 和 方 法。 从 那 里, 你 可 以 到 达 帮 助 区 域, 帮 助 将 告 诉 你 如 何 使 用 类 和 方 法。 

         我 们 所 遇 到 的Visual Cafe 最 为 恼 人 之 处 在 于, 它 经 常 莫 名 其 妙 的 启 动( 我 们 不 敢 十 分 肯 定, 但 这 也 许 与 若 干Netscape Communicator 同 时 启 动 有 关)。 我 们 怀 疑 这 可 能 并 非Visual Cafe 的 问 题, 而 是 在Windows NT 中 启 动 过 多 应 用 程 序 的 恶 果, 这 也 许 你 曾 经 体 会 过。 

         7.4 缺 省 调 色 板 的 宽 度 

         Visual Cafe for Java 提 供 了 较 大 的 缺 省 调 色 板 宽 度, 这 一 点 给 我 们 留 下 了 深 刻 的 印 象。  

你可能感兴趣的:(每天学习一点点)