BeanInfo 類別和內部檢查

如果您正在建立可在視覺化編輯器中使用的新元件或 Bean(比方說,將元件新增至選用區中),則可以提供 BeanInfo 類別來控制它們的行為。

BeanInfo 類別可實作 java.beans.BeanInfo,且可以讓視覺化編輯器用來判定 Bean 的「內容」視圖的行為,並且判斷是否有自訂程式可用。視覺化編輯器含有共用 AWT 和 Swing 控制項的 BeanInfo 類別。

由於 BeanInfo 類別所含的資訊,只限設計時期所必需,因此它通常會保存在與 Bean 類別本身不同的專案中,且部署 Bean 時也不會將它併入。Java 視覺化編輯器使用了許多規則,讓您建立 BeanInfo 類別與其描述之 Java Bean 的關聯性。如果您正在使用的 Java Bean, 具有您希望視覺化編輯器可以偵測的 BeanInfo 類別,就必須了解這些規則。比方說,如果您是使用協力廠商的 Java Bean 類別集,或者如果您已經開發了目前所用的 Java Bean 和 BeanInfo 類別。

如果要取得 BeanInfo 類別的詳細資訊,可以從以下網站下載 JavaBeans 規格:java.sun.com/products/javabeans/docs/.

背景

類別 java.beans.Introspector 可用來尋找 Java Bean。我們將這項作業發生的時間稱為內部檢查,它是由視覺化編輯器在第一次使用某個 Bean 時所執行。例如,當您第一次從選用區放置按鈕時,就會進行內部檢查,找出正確的 BeanInfo 類別。內部檢查過 Bean 後,會快取其結果以提升效能。不過,當視覺化編輯器偵測到 BeanInfo 類別可能已經變更,而且快取記憶體已經作廢時,就會再次進行內部檢查。

您可以把 Bean 類別作為引數來呼叫 getBeanInfo(Class) static 方法,以執行 Bean 的內部檢查。例如:

java.beans.Introspector.getBeanInfo(MyJavaBean.class)

內部檢查器會使用下述邏輯,找出引數類別 MyJavaBean 的 BeanInfo 類別。其中包括一連串依序執行的步驟,只要有任何步驟順利執行之後,內部檢查器就會停止尋找。如果有任何步驟失敗了,下一個步驟便會以不同的方法,找出 Beaninfo。

如果找到該類別的 BeanInfo 類別,內部檢查器不會明確傳回它。而是使用其詳細資料來建立實作 java.beans.BeanInfo 的暫時結果類別。

BeanInfo 搜尋路徑

了解 BeanInfo 路徑最好的方法,就是考量建立來執行內部檢查的 Java 虛擬機器。這個虛擬機器具有由以下項目組成的類別路徑:

建立虛擬機器之後,java.beans.Introspector 會讓其套件清單,以方法 public void setSearchPath(String[]) 搜尋 BeanInfo 類別集。

這個方法的引數為:

BeanInfo 與固有屬性

如果您撰寫的 Bean 從 Super 類別繼承屬性,則預設 BeanInfo 將不會顯現固有屬性。您必須使用 getAdditionalBeanInfo() 方法來明確顯現它們。

例如:

public BeanInfo[] getAdditionalBeanInfo() {
try {                 
         // 下列將傳回所有繼承的特性。               
         return new BeanInfo[] { 
Introspector.getBeanInfo(MyPanel.class.getSuperclass())};  
} catch (IntrospectionException e) {            
return new BeanInfo[0];            
} 

如果沒有顯現某個固有屬性,視覺化編輯器便不會展現它,即使它已設定在程式碼中也一樣。

母主題: 延伸 Java 視覺化編輯器

相關作業
控制外掛程式開發人員的 BeanInfo 資訊
指定 BeanInfo 類別的位置

(C) Copyright IBM Corporation 1999, 2004. All Rights Reserved.