如果您正在建立可在視覺化編輯器中使用的新元件或 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 路徑最好的方法,就是考量建立來執行內部檢查的 Java 虛擬機器。這個虛擬機器具有由以下項目組成的類別路徑:
建立虛擬機器之後,java.beans.Introspector 會讓其套件清單,以方法 public void setSearchPath(String[]) 搜尋 BeanInfo 類別集。
這個方法的引數為:
如果您撰寫的 Bean 從 Super 類別繼承屬性,則預設 BeanInfo 將不會顯現固有屬性。您必須使用 getAdditionalBeanInfo() 方法來明確顯現它們。
例如:
public BeanInfo[] getAdditionalBeanInfo() { try { // 下列將傳回所有繼承的特性。 return new BeanInfo[] { Introspector.getBeanInfo(MyPanel.class.getSuperclass())}; } catch (IntrospectionException e) { return new BeanInfo[0]; }
如果沒有顯現某個固有屬性,視覺化編輯器便不會展現它,即使它已設定在程式碼中也一樣。
JRE 類別的 BeanInfo 類別
JRE 所含類別的 Java Bean,被視為 Java 視覺化編輯器的組件。它們會定義位於工作台內的類別(如 javax.swing.JButton 或 javax.swing.JFrame)的行為。撰寫視覺化編輯器的 BeanInfo 類別的要訣
本節將說明當您撰寫要在 Java 視覺化編輯器中使用之 Java Bean 的 BeanInfo 類別時,可以使用的一些規則。控制外掛程式開發人員的 BeanInfo 資訊
您可以利用新增外掛程式 Manifest 檔中的項目,來控制 BeanInfo 類別如何與類別路徑變數相關聯。
母主題: 延伸 Java 視覺化編輯器