引言 Sun所指定的JavaBean規範很大程度上是為IDE準備的 它讓IDE能夠以可視化的方式設置JavaBean的屬性。如果在IDE中開發一個可視化的應用程式,則需要通過屬性設置的方式對組成應用的各種組件進行定製,IDE通過屬性編輯器讓開發人員使用可視化的方式設置組件的屬性。 一般的IDE都支持 ...
引言
Sun所指定的JavaBean規範很大程度上是為IDE準備的--它讓IDE能夠以可視化的方式設置JavaBean的屬性。如果在IDE中開發一個可視化的應用程式,則需要通過屬性設置的方式對組成應用的各種組件進行定製,IDE通過屬性編輯器讓開發人員使用可視化的方式設置組件的屬性。
一般的IDE都支持JavaBean規範所定義的屬性編輯器,當組件開發商發佈一個組件時,它往往將組件對應的屬性編輯器捆綁發行,這樣的開發者就可以在IDE環境下方便地利用屬性編輯器對組件進行定製工作。
JavaBean規範通過java.beans.PropertyEditor定義設置JavaBean屬性地方法,通過BeanInfo描述了JavaBean的哪些屬性是可定製的,此外還描述了可定製屬性與PropertyEditor的對應關係。
BeanInfo與JavaBean之間的對應關係通過二者之間的命名規範確立d對應JavaBean的BeanInfo採用如下的命名規範:< Bean >BeanInfo。
JavaBean規範提供了一個管理預設屬性編輯器的管理器PropertyDitorManager,該管理器內保存著一些常見類型的屬性編輯器。一般來說,如果某個JavaBean的常見類型屬性沒有通過BeanInfo顯式指定屬性編輯器,那麼IDE將自動使用PropertyEditorManager中註冊的對應預設屬性編輯器。
PropertyEditor
PropertyEditor是屬性編輯器的介面,它規定了將外部設置值轉換為內部JavaBean屬性值的轉換介面方法。PropertyEditor主要的介面方法說明如下:
- Object getValue():返回屬性的當前值,基本類型被封裝對應的封裝類實例。
- void setValue(Object newValue):設置屬性的值,基本類型以封裝類傳入。
- String getAsText():將屬性對象用一個字元串表示,以便外部的屬性編輯器能夠可視化的方式顯示。預設返回null,表示該屬性不能以字元串表示。
- void setAsText(String text):用一個字元串去更新屬性的內佈置,這個字元串一般從外部屬性編輯器傳入。
- String[] getTags():返回表示有效屬性值的字元串數組(如boolean屬性對應的有效Tag為true和false),以便屬性編輯器能以下拉框的方式顯示出來。預設返回null,表示屬性沒有匹配的字元值有限集合。
String getJavaInitializationString:為屬性提供一個表示初始值的字元串,屬性編輯器以此值作為屬性的預設值。
PropertyEditor接方法是內部屬性值和外部設置值的溝通橋梁。此外,可以很容易發現該介面的很多方法是專為IDE中的可視化屬性編輯器提供的。Java為PropertyEditor提供了一個方便類PropertyEditorSupport,該類直線了PropertyEditor並提供了預設實現。一般情況下,用戶可以通過擴展這個方便類設計自己的屬性編輯器。
BeanInfo
BeanInfo主要描述了JavaBean的哪些屬性惡意編輯及對對應的屬性編輯器,每個屬性對應一個屬性描述器PropertyDescrptor。PropertyDescriptor的構造函數有兩個入參:PropertyDescriptor(String propertyName,Class beanClass),其中propertyName為屬性名,beanClass為JavaBean對應對應的Class。此外,PropertyDescriptor還有一個setPropertyDeitorClass(Class propertyEditorClass)方法,用於為JavaBean屬性指定編輯器。BeanInfo介面最重要的方法就是PropertyDescriptor[] getPropertyDescriptors(),該方法返回JavaBean的屬性描述器數組。
BeanInfo介面有一個常用的實現類SimpleBeanInfo,一般情況下,可以通過擴展SimpleBeanInfo實現自己的功能。