Beans Development Kit (BDK)分析(五) (轉)
四.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物件和事件源的對映。
l 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介面。
l public Wrapper( bean, String beanLabel, String beanName)首先檢查了引數,判斷是否是可顯示的,如果不可顯示,使用OurLabel進行封裝成可見的Component;然後加入當前Panel;最後初始化方法initialize()和載入事件器的方法attachListeners()。
l void initialize()首先再次確保不可見的Bean的不可見性;獲取該Bean的所有事件描述;檢查目標事件向量是否存在,如果不存在則建立新的目標事件向量和屬性目標向量;最後透過目標事件向量獲取屬性目標向量。
l private Vector getWPEIfromWET(Vector wets)該方法的功能就是透過目標事件向量獲取屬性目標向量。具體實現是透過列舉目標事件向量的每一個事件,取出每個事件的WrapperEventTarget,如果WrapperEventTarget的成員變數targetListener是PropertyHookup的一個例項,那麼獲得該PropertyHookup物件,由此得到該物件的和這個屬性相關的事件PropertyHookupTargets向量,然後封裝成WrapperPropertyEventInfo物件的向量集合返回。
l public String getAdderName(String eventSetName)獲取事件集合中新增監聽器方法的名字
l public String getRemoverName(String eventSetName) 獲取事件集合中刪除監聽器方法的名字
l public WrapperEventInfo[] getEventHookupInfo()獲取WrapperEventInfo資訊。首先,它統計了鉤子資訊的總數;然後列舉了eventTargets所有的WrapperEventTarget,然後用此建立了WrapperEventInfo陣列。又列舉了propertyTargets的所有元素,新增新的WrapperEventInfo資料。
l void removeListeners()臨時的刪除所有的事件監聽器。
l void attachListeners()重新加入所有的事件監聽器
l void cleanup()當封裝類被從BeanBox剪下下來的時候
l public void setFrom(boolean b)設定物件是否從序列化中得到
l public Vector getChangedProperties()用於獲取設計時期的屬性變化的向量
l public Vector getChangedProperties()該靜態方法用於對映一個AWT到一個與之相聯絡的封裝物件
l public void paint(Graphics g)重寫了paint方法
l public synchronized void ouseStuff(MouseEvent evt)用於處理在移動或者改變大小的時候其滑鼠的操作
l final BeanBox getBeanBox()獲取BeanBox的例項
l static void showInvisibleBeans(boolean show)設定是否顯示不可見的Bean
l public boolean handleEvent(Event evt)用於支援舊式的事件處理
l private static synchronized void getHashBars(Component c)
WrapperEventInfo.java
事件監聽器的鉤子資訊,用來描述封裝的事件的具體資訊,包括目標Bean,介面卡的類名和事件集名字。在構造中,需要指明目標Bean,介面卡的類名和事件集名字。
WrapperPropertyEventInfo.java
繼承了WrapperEventInfo類,用於當連線到一個具體的屬性,即使用"sunw.beanbox.PropertyHookup"指定為鉤子,"propertyChange"指定為事件集名字。增加了設定者的名字,類性和屬性的名字這三個類成員變數。在建構函式中,需要指明目標Bean,屬性名字和方法。
l 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物件的向量。
l public void attach用來建立一個屬性鉤子,以便於繫結了名字的屬性的改變能夠從源物件轉向呼叫目標物件的設定方法。
l synchronized public void propertyChange(PropertyChangeEvent evt)該方法用於繫結在源物件的屬性發生變化時能夠呼叫。我們已經對映了該屬性對應一系列目標物件,然後只要呼叫每一個目標的setter類方法即可。
內部類PropertyHookupTarget用於傳遞目標資訊。實現了Serializable介面,擁有兩個成員變數,一個是目標物件,一個是記錄setter的Method物件。
l private void writeObject(ObjectOutputStream s)
l private void readObject(ObjectInputStream s)為用於支援序列化的方
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-958615/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Beans Development Kit (BDK)分析(四) (轉)Beandev
- Beans Development Kit (BDK)分析(六) (轉)Beandev
- 【java學習】JDK(Java Development Kit)JavaJDKdev
- Houdini Development Kit ( HDK ) VC小記dev
- ADRV9371 + Arria 10 SoC Development Kitdev
- Game Development Methodology for Small Development Teams (轉)GAMdev
- 深入分析 Fiesta Exploit Kit
- DX: Full Screen GUI Development 2 (轉)GUIdev
- Development log - red & black (1) (轉)dev
- Development log - red & black (2) (轉)dev
- (一)spring beansSpringBean
- 財務分析中的五力分析法(轉載)
- 近五年上午試題分佈分析 (轉)
- go-kit 微服務 日誌分析管理 (ELK + Filebeat)Go微服務
- LRAT-2000-KIT特殊故障的分析方法
- game development -- flowGAMdev
- Spring自動裝配BeansSpringBean
- 玩轉iOS開發:iOS 10 新特性《Siri Kit》iOS
- macOS Development - Auto LayoutMacdev
- office365 developmentdev
- What is strategy development process?dev
- BW: 80% of development costsdev
- Web Development Job in 4Webdev
- Apache JMeter 5.4.1 Build DevelopmentApacheJMeterUIdev
- STM32 Hardware Developmentdev
- PL/SQL development skill testSQLdev
- Java Development Without SpringJavadevSpring
- Java集合框架分析(五)LinkedHashMap分析Java框架HashMap
- 探究 Text Kit 和 Core Text 的前世今生 (Text Kit 篇)
- preact原始碼分析(五)React原始碼
- Flutter框架分析(五)-- 動畫Flutter框架動畫
- php核心分析(五)-zvalPHP
- 上新啦!KIT!
- 上新啦KIT
- 【Spring】Spring原始碼轉Eclipse讀取形式 :spring-beans-groovy ProblemSpring原始碼EclipseBean
- org.springframework.beans.factory.BeanNotOfRequiredTypeException must be of typeSpringFrameworkBeanUIException
- org.springframework.beans簡單解讀SpringFrameworkBean
- 流程重組,五要五不要(轉)