Beans Development Kit (BDK)分析(五) (轉)

amyz發表於2007-08-15
Beans Development Kit (BDK)分析(五) (轉)[@more@] 

四.BDK工具類

從Jar的操作到Claoader,從Applet類的製作到Bean的Applet封裝,從類的編譯到輔助資訊的顯示,從Bean的封裝到各種型別的屬性編輯器,從封裝事件資訊到化的各種操作實現。所以我將工具類進行分類以後再進行分析:

1.Jar檔案操作:namespace prefix = o ns = "urn:schemas--com::office" />

  Jar檔案的操作包括:

l  JarAccess.  該類實現了一個簡單的使用jar檔案格式來建立檔案的工具

l  JarEntry.java  用於請求建立jar檔案

l  JarInfo.java  代表一個載入的jar檔案,包含該檔案的資訊

l  JarLoader.java  讀取jar檔案的內容

l  Manifest.java  代表jar檔案的Manifest資訊

2.Applet相關

l  AppletClassGenerator 為Applet自動產生Applet類程式碼

l  AppletGenerator.java 由組合的Beans產生Applet的jar檔案

l  MakeAppDlg.java  要求製作Applet的對話方塊

3.屬性編輯器

l  PropertyCanvas.java  支援在一個Canvas上畫出一個屬性值,有三個成員變數,值得注意的是PropertyEditor的一個物件來實現編輯。在public void mouseClicked(MouseEvent evt)方法中使用了PropertyDialog來獲取新的設定。

l  Propertyor.java  用來支援屬性編輯器的標籤選擇,同樣是使用PropertyEditor的一個物件來實現編輯。

l  PropertyText.java  用來支援屬性編輯器的文字輸入,同樣是使用PropertyEditor的一個物件來實現編輯。

l  PropertyDialog.java  用一般的編輯器來持屬性編輯器。

PropertyHookupManager.java

用來管理屬性之間的鉤子,以便於一個物件上屬性的變化能夠傳遞給和它相關的屬性。它有一個成員變數就是Hashtable的一個例項,用來PropertyHookup物件和事件源的對映。

public synchronized static void attach(Wrapper sourceWrapper,  String propertyName, Method getter,

  Wrapper targetWrapper, Method setter)

從這個方法的引數就可以看到大概的功能。就是將源時間物件的屬性名,方法和目標物件的相應方法相聯絡。在實現過程使用了PropertyHookup來儲存每一對聯絡。

l  PropertyNameDialog.java  屬性對話方塊用來查詢一個給定的源物件的屬性。

4.Bean的封裝

Wrapper.java 

用於跟蹤在設計視窗的每個Bean在BeanBox中的相關狀態,這是BDK的Bean封裝中最重要的類。它繼承了Panel,實現了Serializable, MouseListener, MouseMotionListener介面。

public Wrapper( bean, String beanLabel, String beanName)首先檢查了引數,判斷是否是可顯示的,如果不可顯示,使用OurLabel進行封裝成可見的Component;然後加入當前Panel;最後初始化方法initialize()和載入事件器的方法attachListeners()。

void initialize()首先再次確保不可見的Bean的不可見性;獲取該Bean的所有事件描述;檢查目標事件向量是否存在,如果不存在則建立新的目標事件向量和屬性目標向量;最後透過目標事件向量獲取屬性目標向量。

private Vector getWPEIfromWET(Vector wets)該方法的功能就是透過目標事件向量獲取屬性目標向量。具體實現是透過列舉目標事件向量的每一個事件,取出每個事件的WrapperEventTarget,如果WrapperEventTarget的成員變數targetListener是PropertyHookup的一個例項,那麼獲得該PropertyHookup物件,由此得到該物件的和這個屬性相關的事件PropertyHookupTargets向量,然後封裝成WrapperPropertyEventInfo物件的向量集合返回。

public String getAdderName(String eventSetName)獲取事件集合中新增監聽器方法的名字

public String getRemoverName(String eventSetName) 獲取事件集合中刪除監聽器方法的名字

public WrapperEventInfo[] getEventHookupInfo()獲取WrapperEventInfo資訊。首先,它統計了鉤子資訊的總數;然後列舉了eventTargets所有的WrapperEventTarget,然後用此建立了WrapperEventInfo陣列。又列舉了propertyTargets的所有元素,新增新的WrapperEventInfo資料。

void removeListeners()臨時的刪除所有的事件監聽器。

void attachListeners()重新加入所有的事件監聽器

void cleanup()當封裝類被從BeanBox剪下下來的時候

public void setFrom(boolean b)設定物件是否從序列化中得到

public Vector getChangedProperties()用於獲取設計時期的屬性變化的向量

public Vector getChangedProperties()該靜態方法用於對映一個AWT到一個與之相聯絡的封裝物件

public void paint(Graphics g)重寫了paint方法

public synchronized void ouseStuff(MouseEvent evt)用於處理在移動或者改變大小的時候其滑鼠的操作

final BeanBox getBeanBox()獲取BeanBox的例項

static void showInvisibleBeans(boolean show)設定是否顯示不可見的Bean

public boolean handleEvent(Event evt)用於支援舊式的事件處理

private static synchronized void getHashBars(Component c)

WrapperEventInfo.java

  事件監聽器的鉤子資訊,用來描述封裝的事件的具體資訊,包括目標Bean,介面卡的類名和事件集名字。在構造中,需要指明目標Bean,介面卡的類名和事件集名字。

WrapperPropertyEventInfo.java

繼承了WrapperEventInfo類,用於當連線到一個具體的屬性,即使用"sunw.beanbox.PropertyHookup"指定為鉤子,"propertyChange"指定為事件集名字。增加了設定者的名字,類性和屬性的名字這三個類成員變數。在建構函式中,需要指明目標Bean,屬性名字和方法。

private String initStringFromType(Class[] klass)用於將一個Class物件的陣列轉換為一個類名的字串陣列

HookupManager.java 

管理事件源bean和目標bean的目標方法之間的鉤子,將為每一個鉤子都產生一個類,作為介面卡編譯載入到ClassLoader

l  EventTargetDialog.java  用來為焦點Bean定製事件的對話方塊

l  Report.java  從一個給定的Bean類提取內部資訊的報告

PropertyHookup.java

PropertyHookup類實現了PropertyChangeListener和Serializable介面。它的兩個成員變數一個是源物件,一個是和屬性名字相應的PropertyHookupTargets物件的向量。

public void attach用來建立一個屬性鉤子,以便於繫結了名字的屬性的改變能夠從源物件轉向呼叫目標物件的設定方法。

synchronized public void propertyChange(PropertyChangeEvent evt)該方法用於繫結在源物件的屬性發生變化時能夠呼叫。我們已經對映了該屬性對應一系列目標物件,然後只要呼叫每一個目標的setter類方法即可。

內部類PropertyHookupTarget用於傳遞目標資訊。實現了Serializable介面,擁有兩個成員變數,一個是目標物件,一個是記錄setter的Method物件。

private void writeObject(ObjectOutputStream s)

private void readObject(ObjectInputStream s)為用於支援序列化的方


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-958615/,如需轉載,請註明出處,否則將追究法律責任。

相關文章