熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

控制bean定制器的技巧

2022-06-13   來源: Java核心技術 

  概 要
  集 成 開 發 環 境(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 信 息 公 路(informationbuses) 等 類 似 於 此 的 需 要 知 道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 不 使 用 文 字 並 且 總 處 於 最 大 化) 因 為 這 些 屬 性 繼 承 於javaawtComponent 所 以 它 們 列 在 這 裡
  
  BeanBox 盡 力 把 它 所 知 的BarChartBean 的 點 滴 列 給 你 但 它 超 過 了 你 的 要 求BarChartBean 出 現 時 我 不 需 要 所 有 這 些 屬 性 它 還 會 把 你 搞 胡 塗 背 景 填 充 色 有 什 麼 區 別 ?( 設 計 者 當 然 知 道 但 使 用 者 不 一 定 清 楚 ) 看 來 最 好 把 與 用 戶 無 關 的 會 帶 來 麻 煩 的 屬 性 隱 藏 起 來
  
  定 制 步 驟(level) 提 供BeanInfo 對 象
  定 制 的 第 二 步javabeansBeanInfo 的 界 面 裡 解 決 了 這 些 問 題BeanInfo 界 面 使 你 的bean 向 每 一 個 要 求 的 用 戶 描 述 自 己( 要 求 這 個 詞 我 將 在 後 面 介 紹) 除 了 顯 示 屬 性BeanInfo 界 面 還 可 以 顯 示 名 字 圖 標 屬 性 列 表 方 法 事 件 等 等( 我 們 將 在 下 一 段 裡 更 深 的 討 論BeanInfo) 很 多 屬 性 用 簡 單 的 設 置 整 數 顏 色 或 文 件 的 方 法 不 能 很 好 的 表 示 象 是 常 見 的 枚 舉 類 型 也 許 我 只 想 在 下 拉 列 中 設 幾 種 色 彩( 綠 色 黃 色 等) 另 外 的 人 也 許 要 在 一 個Tabbean 中 設 置 制 表 符( 如 字 處 理 程 序 中 一 個PageLayout bean 的 子 構 件) 設 制 模 板 和 BeanInfo 不 能 直 接 控 制 這 些 情 況 而javabeansPropertyEditor 的 界 面 功 能 使 程 序 員 能 直 接 在 圖 形 界 面 下 設 置 參 數 換 言 之 你 可 以 寫 屬 性 編 輯 器
  
  定 制 步 驟(level) 提 供 定 制 屬 性 編 輯 器
  定 制 的 第 三 步javabeansPropertyEditor 和 javabeansPropertyEditorSupport 使 你 能 寫 自 己 的 屬 性 編 輯 器 屬 性 編 輯 器 是 一 個 單 獨 編 輯 具 有 一 定 類 型 的 屬 性 的 構 件 當 你 擊 中Color 設 置 顏 色 時 會 彈 出 BeanBox 裡Color 屬 性 的 標 准 編 輯 器
  
  使 用ColorEditor 屬 性 編 輯 器
  
  你 看 到 的 這 個 對 話 框 是 BeanBox 用 來 編 輯Color 屬 性 類 的 標 准 屬 性 編 輯 框PropertyEditor 界 面 允 許 你 發 明 新 類 型
  
  PropertyEditor 界 面 通 過 對 標 簽(tags) 的 支 持 使 你 實 現 枚 舉 類 型
  
  某 些 屬 性 由 一 個 軟 件 構 件 中 的 幾 個 實 際 的 屬 性 組 成 可 以 認 為 是 邏 輯 屬 性 邏 輯 屬 性 的 一 個 最 好 的 例 子 是 彩 色 板(color balance) 它 在 一 個 面 上 顯 示 各 種 色 彩 你 可 以 在 這 個 標 准 屬 性 列 裡 選 擇 屬 性 如 但 不 必 在 應 用 時 列 給 用 戶 顯 示 色 彩 板 的 最 好 方 式 大 概 是 把 圖 像 用 當 前 色 彩 顯 示 在 它 周 圍 用 thumbnails 表 示 變 化 用 戶 可 以 選 擇 最 滿 意 的 圖 像 對 話 框 對 這 幅 圖 像 再 做 編 輯(Adobe PhotoShop 裡 的 對 話 框 類 似 於 此)
  
  定 制 步 驟(level) 提 供 定 制 器
  定 制 控 制 的 第 四 步 是javabeansC
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25672.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.