http://www.netqu.com 中華技術(shù)網(wǎng)會(huì)員 Wuxuehui 發(fā)布
寫 bean 的方法是遵循 Sun Microsystems 的 JavaBean 規(guī)范。您可以在 www.javasoft.com 上獲得更多關(guān)于 JavaBean 的信息。
一般的 bean 需求 特性 操作 事件 提示和竅門
一般要求 首先,您必須有一個(gè)不帶有參數(shù)的公用構(gòu)造器。此構(gòu)造器也應(yīng)該通過(guò)調(diào)用各個(gè)特性的設(shè)置方法來(lái)設(shè)置特性的缺省值,例如:
public Fireworks() { setAutoStart(true); setBackground(Color.black); setSpeed(10); setRadius(40); . . . }
如果 bean 是一個(gè)從 java.awt.Component 類繼承而來(lái)的可視 bean,您應(yīng)該為 bean 定義一個(gè)缺省的大小,例如:
public Dimension getPreferredSize() { return (new Dimension(radius*3, radius*3)); }
public Dimension getMinimumSize() { return getPreferredSize(); }
特性 對(duì)于您需要的每個(gè)特性,您應(yīng)該有一個(gè)帶有匹配公用 getter 和 setter 方法的專用實(shí)例變量,例如:
private int speed; . . . public int getSpeed() { return speed; }
public void setSpeed(int s) { speed = s; }
此 get 和 set 方法必須有與實(shí)例變量相同的名稱,但是個(gè)字母要大寫并以 get 和 set 開頭。
由于連接而在任何時(shí)候更改它們的特性時(shí),確認(rèn) Bean 在運(yùn)行時(shí)行為正確也是很重要的。如果特性的更改影響到 Bean 的可視外觀,您應(yīng)該以此特性設(shè)置的方法來(lái)調(diào)用
repaint();。
同樣,如果特性的更改影響到 bean 的大小和位置,您需要確認(rèn)獲得驗(yàn)證的事物。我們建議編寫您自己的 validateAll 方法,如下所示:
private void validateAll() { if (isValid()) { Component self = this; self.invalidate(); Component myParent = self.getParent(); if (myParent != null) { myParent.invalidate(); self = myParent; } self.validate(); } }
然后以此特性設(shè)置的方法調(diào)用
validateAll();。
bean 類將無(wú)法進(jìn)行關(guān)于調(diào)用特性設(shè)置方法命令的假設(shè)。您應(yīng)該寫 bean 以便可以初始構(gòu)造它,然后在不引起錯(cuò)誤的同時(shí)在任何命令中設(shè)置其特性。
操作 對(duì)于每個(gè)您需要的操作,您應(yīng)該有一個(gè)公用方法,例如:
public void start() { if(thread==null) { thread=new Thread(this); thread.start(); } }
您為操作寫的方法應(yīng)該在無(wú)須期待用戶創(chuàng)建連接或設(shè)置很多特性的情況下獨(dú)立操作。 例如,如果您寫了一個(gè)音頻 Bean,您希望通過(guò)播放操作處理打開聲音的所有步驟、完成您需要的所有設(shè)置并播放聲音。同樣,即使聲音未播放,停止操作也應(yīng)起作用。
事件 對(duì)于您需要的每個(gè)事件或事件設(shè)置,您應(yīng)該定義事件和偵聽器類。對(duì)于此例,查看 FireworksEvent.java 源文件以及 Fireworks.java 文件。此事件類的源應(yīng)該如同這樣:
import java.awt.*; import java.util.*;
public class FireworksEvent extends EventObject { public static final int EXPLODED = 1;
int id = 0;
public FireworksEvent(Component source, int id) { super(source); this.id = id; }
public int getID() { return id; } }
您應(yīng)該為此事件設(shè)置中的每個(gè)事件定義一個(gè)公用靜態(tài)結(jié)束事件標(biāo)識(shí)符,例如在此例子中的 EXPLODED。
對(duì)于偵聽器類的源,查看 FireworksListener.java 源文件:
import java.util.*;
public interface FireworksListener extends EventListener { public abstract void exploded(FireworksEvent e); }
您應(yīng)該為此事件設(shè)置中的每個(gè)事件定義一個(gè)公用抽象方法,例如在此例子中的 exploded。 而且,偵聽器類必須擴(kuò)展 EventListener ,以使 JAR 向?qū)軌蛘业剿?
然后,如果由 bean 類播送事件,它必須跟蹤偵聽事件的對(duì)象。要這樣做,您需要定義偵聽器實(shí)例變量以及 addListener 和 removeListener 方法。返回 Fireworks.java 源,例如,您將查看到:
private Vector listeners = new Vector(); . . . public void addFireworksListener(FireworksListener f) { listeners.addElement(f); }
public void removeFireworksListener(FireworksListener f) { listeners.removeElement(f); }
,bean 類需要以正確的次數(shù)將事件實(shí)際播送到所有的偵聽器。要這樣做,您需要定義 processEvent 方法并以適當(dāng)?shù)拇螖?shù)調(diào)用它,例如:
public void processFireworksEvent(FireworksEvent e) { for (Enumeration enum = listeners.elements(); enum.hasMoreElements(); ) ((FireworksListener)enum.nextElement()).exploded(e); }
public void run() { . . . processFireworksEvent(new FireworksEvent(this, FireworksEvent.EXPLODED)); }
提示和竅門 如果您要?jiǎng)?chuàng)建產(chǎn)品級(jí) Bean,請(qǐng)記住先做八件事:
使 bean 越小越好,但要注意當(dāng)前的瀏覽器是否支持小 bean bean 或許導(dǎo)致工具滯后,繼而導(dǎo)致瀏覽器滯后,最終導(dǎo)致 JDK 自身滯后。如果您必須使用切邊的類,或者 bean 的性質(zhì)要求 bean 較大,則您應(yīng)該考慮將您的 bean 作為一個(gè)插件, 并在一個(gè)自包含 jar 中發(fā)送它,或者如有可能,使它具有自己的小安裝過(guò)程。您將失去某些小 bean 的優(yōu)勢(shì):
Web 管理員必須多執(zhí)行一個(gè)步驟:提醒用戶在瀏覽 Web 頁(yè)面之前必須先下載和安裝您的 jar 或安裝程序 網(wǎng)上沖浪者也必須多執(zhí)行一個(gè)步驟:在瀏覽 Web 頁(yè)面之前先下載和安裝您的 jar 或安裝程序。
使您的 bean 可翻譯 將所有的翻譯文本,包括名稱和 bean 的簡(jiǎn)短描述及其特征,分隔成 .properties 文件。JAR 向?qū)?huì)為您做這些。
您需要記住并自己完成的兩件事是:特性編輯器和定制器。定制器、對(duì)話框特性編輯器或選擇特性編輯器中的所有術(shù)語(yǔ),例如高、中、低,也必須為翻譯而分隔。
理想情況下,您也可以實(shí)際翻譯 bean 并在 Bean 的 jar 中提供各種語(yǔ)言的 .properties 文件。 然而,如果您至少提供了本地語(yǔ)言 .properties 文件,則第三方可為您翻譯 bean。
在文件清單中為 bean 指定 Depends-On: 標(biāo)記 將 Bean 的 jar 中的所有文件標(biāo)識(shí)為“運(yùn)行時(shí)需要 vs. 只在編輯時(shí)需要”。在運(yùn)行時(shí)需要的所有文件將列示在 jar 清單文件的依賴于:標(biāo)簽后。JAR 向?qū)У陌l(fā)布標(biāo)簽使這個(gè)操作很簡(jiǎn)單,并使您獲得清單文件權(quán)。
如果您不指定依賴于:標(biāo)簽,工具將假設(shè)所有文件都是在運(yùn)行時(shí)需要。這對(duì)于下載性能(例如不必要地下載特性編輯器和其它只在編輯時(shí)需要的文件)是很不好的。
賦予您的 bean 一個(gè)明確的大小 bean 將實(shí)現(xiàn) getPreferredSize 方法,以便當(dāng)首次用可能未定義的關(guān)鍵字特性構(gòu)造時(shí),它的表現(xiàn)良好。 如果在次放入時(shí),bean 是 0 x 0 象素,那么用戶可能會(huì)混淆。 當(dāng)更改關(guān)鍵字特性時(shí),大小也應(yīng)正常工作。例如,如果 bean 有一個(gè)在垂直和水平方位間轉(zhuǎn)換的特性,則大小應(yīng)被寫入以相應(yīng)地調(diào)整自身。
為 bean 指定缺省特性 利用 JavaBean 規(guī)范中的缺省特性部分,它將使您的 bean 在某些工具中易于使用。 JAR 向?qū)惯@個(gè)操作變得簡(jiǎn)單并為您獲得 BeanInfo 權(quán)。
為 bean 及其特性指定簡(jiǎn)要的非技術(shù)名稱和簡(jiǎn)短描述 尋找簡(jiǎn)要的非技術(shù)名來(lái)代替冗長(zhǎng)的技術(shù)術(shù)語(yǔ)。例如,用 sum interval 代替 accumulatorInterval。還請(qǐng)注意,特性名的項(xiàng)以小寫表示并在字與字間留有空格,這對(duì)于用戶將更友好。
縮小用戶可見(jiàn)的特性范圍 為 bean 提供一個(gè)明確的 BeanInfo 以便不將每個(gè)實(shí)例變量都顯示為 bean 的特性,而且不將每個(gè)方法顯示為 Bean 的操作。 JAR 向?qū)惯@個(gè)操作變得簡(jiǎn)單并為您獲得 BeanInfo 權(quán)。
為 bean 指定大圖標(biāo)和小圖標(biāo) ,為 Bean 提供大的(32x32)和小的(16x16)彩色圖標(biāo)。而且,確保圖標(biāo)有一個(gè)不同于灰色的透明背景。盡管很少使用,您也應(yīng)養(yǎng)成提供黑色和白色圖標(biāo)的習(xí)慣。JAR 向?qū)У恼{(diào)色板 標(biāo)簽使這個(gè)操作變得簡(jiǎn)單,并使您獲得 BeanInfo 權(quán)
來(lái)源:http://edu.chinaz.com