概 要 集 成 開 發 環 境(IDEs) 可 以
解 剖
一 個bean 類 的 文 件 並 且 生 成 一 個 帶 參 數 的 對 話 框
開 發 者 可 以 利 用 它 來 定 制 自 己 的bean
但 是 這 些
標 准 的
定 制 對 話 框 留 下 了 很 多 參 數 以 滿 足 它 的 適 應 性
靈 活 性 和 美 學 目 的
本 文 論 述 的 是 怎 樣 在 設 計 時( 當 然
有 時 也 在 運 行 時) 定 制bean
這 兩 個 月 你 將 要 學 習 怎 樣 定 制 你 的beans
我 們 希 望 我 們 的 beans 不 僅 讓 用 戶 易 用
更 重 要 的 是 使 應 用 程 序 的 開 發 者 方 便 的 通 過 改 變 參 數 來 設 計 自 己 的bean
在
月 號 的 專 題 文 章 定 制 你 的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)
使 用 設 制 模 板
如 果 你 已 經 讀 過 這 個JavaBeans 系 列 的 上 一 篇 關 於 定 制bean 的 文 章
你 已 經 知 道 存 取 方 法 可 以 改 變bean 的 內 部 狀 態
你 還 會 記 得 設 制 模 板(design pattern) 是JavaSoft 用 來 表 示 存 取 方 法 的 術 語
是 根 據
JavaBeans 規 范
的 命 名 規 則 定 義 的
所 以 它 們 的 程 序 包 可 以 表 示 出 所 有 的 屬 性 和 設 置 方 法
如 果 你 沒 有 讀 過 上 述 文 章
我 來 做 一 個 小 結
屬 性 是 一 個 軟 件 對 象 的 內 部 狀 態 的 子 集( 這 裡 的 軟 件 對 象 指 的 是bean)
屬 性 的 存 取 方 法 提 供 了 改 變 一 個bean 的 某 個 外 部 特 性 的 唯 一 方 法
JavaBeans 規 范 中 規 定 每 一 個 屬 性 必 需 有 像 這 樣 的 存 取 方 法
SomeType getProperty() (getter)
void setProperty(SomeType value) (setter)
如 果JavaBean 遵 守JavaBeans 規 范
集 成 開 發 環 境 就 可 以 分 析 一 個bean
找 到 名 字 附 和 上 述 模 式 的 存 取 方 法 並 且 指 出 它 的 屬 性 和 設 置 方 法
當IDE 知 道 屬 性 的 名 字
類 型 和 存 取 方 法 後
它 立 即 可 以 生 成 一 個 定 制 對 話 框
如 果 你 對 這 段 不 是 很 理 解
可 以 參 閱 我 上 面 提 到 的
月 號 的 關 於
JavaBeans
的 文 章
這 樣
你 已 經 學 會 了 定 制 的 最 基 本 的 步 驟
設 制 模 板
這 是IDEs 和 其 他bean 軟 件 包 提 供 給 應 用 程 序 開 發 者 定 制 一 個 bean 的 最 基 礎 的 方 法
如 果 只 依 賴 於 設 制 模 板 做 為 定 制 的 界 面
存 在 著 幾 個 問 題
首 先
由 於IDE 只 知 道 對 象 的 名 字 和 屬 性
而 不 知 道 屬 性 的 意 義
大 部 分 將 按 照 字 母 順 序 排 列 或 按 某 種 順 序 列 表
你 的 定 制 對 話 框 將 整 齊 但 不 實 用
對 話 框 也 會 非 常 巨 大
回 憶 一 下 我 們 在 上 幾 篇 文 章 中 開 發 的BarChartBean 程 序
如 下 圖
BarChartBean 和 它 的 定 制 對 話 框( 屬 性 單)
這 是 一 個 簡 單 漂 亮 的bean
但 請 看 一 下 它 的 屬 性 表 ! 我 可 以 輕 而 易 舉 地 舉 出 成 打 的 很
酷
的 屬 性 加 在 上 面
旋 轉
立 體 效 果
色 彩 變 幻 等 等
那 麼
再 設 想 一 下 用 這 個 方 法 配 置 電 子 制 表 軟 件 或 字 處 理 軟 件 bean
毫 不 誇 張 得 說 將 有 成 百 的 屬 性 列 一 個 長 長 的 表
這 裡 也 有 很 多 你 並 不 想 列 出 的 屬 性
如
上 圖 中 BarChartBean 右 邊 的 對 話 框 裡 的 幾 個 屬 性 象 字 體
前 景
背 景
它 們 與BarChartBean 毫 無 關 系
(BarChartBean 不 使 用 文 字
並 且 總 處 於 最 大 化
) 因 為 這 些 屬 性 繼 承 於java
awt
Component 所 以 它 們 列 在 這 裡
BeanBox 盡 力 把 它 所 知 的BarChartBean 的 點 滴 列 給 你
但 它 超 過 了 你 的 要 求
BarChartBean 出 現 時 我 不 需 要 所 有 這 些 屬 性
它 還 會 把 你 搞 胡 塗
背 景
和
填 充 色
有 什 麼 區 別 ?( 設 計 者 當 然 知 道
但 使 用 者 不 一 定 清 楚 ) 看 來 最 好 把 與 用 戶 無 關 的
會 帶 來 麻 煩 的 屬 性 隱 藏 起 來
定 制 步 驟(level)
提 供BeanInfo 對 象
定 制 的 第 二 步
java
beans
BeanInfo 的 界 面 裡 解 決 了 這 些 問 題
BeanInfo 界 面 使 你 的bean 向 每 一 個
要 求
的 用 戶 描 述 自 己(
要 求
這 個 詞 我 將 在 後 面 介 紹)
除 了 顯 示 屬 性
BeanInfo 界 面 還 可 以 顯 示 名 字
圖 標
屬 性 列 表
方 法
事 件 等 等
( 我 們 將 在 下 一 段 裡 更 深 的 討 論BeanInfo)
很 多 屬 性 用 簡 單 的 設 置 整 數
顏 色 或 文 件 的 方 法 不 能 很 好 的 表 示
象 是 常 見 的 枚 舉 類 型
也 許 我 只 想 在 下 拉 列 中 設 幾 種 色 彩( 綠 色
黃 色 等)
另 外 的 人 也 許 要 在 一 個Tabbean 中 設 置 制 表 符( 如 字 處 理 程 序 中 一 個PageLayout bean 的 子 構 件)
設 制 模 板 和 BeanInfo 不 能 直 接 控 制 這 些 情 況
而java
beans
PropertyEditor 的 界 面 功 能 使 程 序 員 能 直 接 在 圖 形 界 面 下 設 置 參 數
換 言 之
你 可 以 寫 屬 性 編 輯 器
定 制 步 驟(level)
提 供 定 制 屬 性 編 輯 器
定 制 的 第 三 步
java
beans
PropertyEditor 和 java
beans
PropertyEditorSupport
使 你 能 寫 自 己 的 屬 性 編 輯 器
屬 性 編 輯 器 是 一 個 單 獨 編 輯 具 有 一 定 類 型 的 屬 性 的 構 件
當 你 擊 中
Color
設 置 顏 色 時
會 彈 出 BeanBox 裡
Color
屬 性 的 標 准 編 輯 器
使 用ColorEditor 屬 性 編 輯 器
你 看 到 的 這 個 對 話 框 是 BeanBox 用 來 編 輯
Color
屬 性 類 的 標 准 屬 性 編 輯 框
PropertyEditor 界 面 允 許 你 發 明 新 類 型
PropertyEditor 界 面 通 過 對 標 簽(tags) 的 支 持 使 你 實 現 枚 舉 類 型
某 些 屬 性 由 一 個 軟 件 構 件 中 的 幾 個 實 際 的 屬 性 組 成
可 以 認 為 是
邏 輯
屬 性
邏 輯
屬 性 的 一 個 最 好 的 例 子 是 彩 色 板(color balance)
它 在 一 個 面 上 顯 示 各 種 色 彩
你 可 以 在 這 個 標 准 屬 性 列 裡 選 擇 屬 性 如
紅
或
黃
但 不 必 在 應 用 時 列 給 用 戶
顯 示 色 彩 板 的 最 好 方 式 大 概 是
把 圖 像 用 當 前 色 彩 顯 示
在 它 周 圍 用 thumbnails 表 示 變 化
用 戶 可 以 選 擇 最 滿 意 的 圖 像
對 話 框 對 這 幅 圖 像 再 做 編 輯
(Adobe PhotoShop 裡 的 對 話 框 類 似 於 此)
定 制 步 驟(level)
提 供 定 制 器
定 制 控 制 的 第 四 步 是java
beans
C
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25672.html