top
Loading...
寫bean類的準則
http://www.netqu.com 中華技術網會員 Wuxuehui 發布

寫 bean 的最好方法是遵循 Sun Microsystems 的 JavaBean 規范。您可以在 www.javasoft.com 上獲得更多關于 JavaBean 的信息。

一般的 bean 需求
特性
操作
事件
提示和竅門


一般要求
首先,您必須有一個不帶有參數的公用構造器。此構造器也應該通過調用各個特性的設置方法來設置特性的缺省值,例如:

public Fireworks()
{
setAutoStart(true);
setBackground(Color.black);
setSpeed(10);
setRadius(40);
.
.
.
}

如果 bean 是一個從 java.awt.Component 類繼承而來的可視 bean,您就應該為 bean 定義一個缺省的首選大小,例如:

public Dimension getPreferredSize()
{
return (new Dimension(radius*3, radius*3));
}

public Dimension getMinimumSize()
{
return getPreferredSize();
}

特性
對于您需要的每個特性,您應該有一個帶有匹配公用 getter 和 setter 方法的專用實例變量,例如:

private int speed;
.
.
.
public int getSpeed()
{
return speed;
}

public void setSpeed(int s)
{
speed = s;
}

此 get 和 set 方法必須有與實例變量相同的名稱,但是第一個字母要大寫并以 get 和 set 開頭。

由于連接而在任何時候更改它們的特性時,確認 Bean 在運行時行為正確也是很重要的。如果特性的更改影響到 Bean 的可視外觀,您應該以此特性設置的方法來調用

repaint();。


同樣,如果特性的更改影響到 bean 的大小和位置,您需要確認獲得驗證的事物。我們建議編寫您自己的 validateAll 方法,如下所示:

private void validateAll()
{
if (isValid())
{
Component self = this;
self.invalidate();
Component myParent = self.getParent();
if (myParent != null)
{
myParent.invalidate();
self = myParent;
}
self.validate();
}
}

然后以此特性設置的方法調用

validateAll();。

bean 類將無法進行關于調用特性設置方法命令的假設。您應該寫 bean 以便可以初始構造它,然后在不引起錯誤的同時在任何命令中設置其特性。

操作
對于每個您需要的操作,您應該有一個公用方法,例如:

public void start()
{
if(thread==null)
{
thread=new Thread(this);
thread.start();
}
}

您為操作寫的方法應該在無須期待用戶創建連接或設置很多特性的情況下獨立操作。 例如,如果您寫了一個音頻 Bean,您希望通過播放操作處理打開聲音的所有步驟、完成您需要的所有設置并播放聲音。同樣,即使聲音未播放,停止操作也應起作用。

事件
對于您需要的每個事件或事件設置,您應該定義事件和偵聽器類。對于此例,查看 FireworksEvent.java 源文件以及 Fireworks.java 文件。此事件類的源應該如同這樣:

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;
}
}

您應該為此事件設置中的每個事件定義一個公用靜態結束事件標識符,例如在此例子中的 EXPLODED。

對于偵聽器類的源,查看 FireworksListener.java 源文件:

import java.util.*;

public interface FireworksListener extends EventListener
{
public abstract void exploded(FireworksEvent e);
}

您應該為此事件設置中的每個事件定義一個公用抽象方法,例如在此例子中的 exploded。 而且,偵聽器類必須擴展 EventListener ,以使 JAR 向導能夠找到它。

然后,如果由 bean 類播送事件,它必須跟蹤偵聽事件的對象。要這樣做,您需要定義偵聽器實例變量以及 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 類需要以正確的次數將事件實際播送到所有的偵聽器。要這樣做,您需要定義 processEvent 方法并以適當的次數調用它,例如:

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));
}

提示和竅門
如果您要創建產品級 Bean,請記住先做八件事:

使 bean 越小越好,但要注意當前的瀏覽器是否支持小 bean
bean 或許導致工具滯后,繼而導致瀏覽器滯后,最終導致 JDK 自身滯后。如果您必須使用切邊的類,或者 bean 的性質要求 bean 較大,則您應該考慮將您的 bean 作為一個插件, 并在一個自包含 jar 中發送它,或者如有可能,使它具有自己的小安裝過程。您將失去某些小 bean 的優勢:

Web 管理員必須多執行一個步驟:提醒用戶在瀏覽 Web 頁面之前必須先下載和安裝您的 jar 或安裝程序
網上沖浪者也必須多執行一個步驟:在瀏覽 Web 頁面之前先下載和安裝您的 jar 或安裝程序。

使您的 bean 可翻譯
將所有的翻譯文本,包括名稱和 bean 的簡短描述及其特征,分隔成 .properties 文件。JAR 向導會為您做這些。

您需要記住并自己完成的兩件事是:特性編輯器和定制器。定制器、對話框特性編輯器或選擇特性編輯器中的所有術語,例如高、中、低,也必須為翻譯而分隔。

理想情況下,您也可以實際翻譯 bean 并在 Bean 的 jar 中提供各種語言的 .properties 文件。 然而,如果您至少提供了本地語言 .properties 文件,則第三方可為您翻譯 bean。

在文件清單中為 bean 指定 Depends-On: 標記
將 Bean 的 jar 中的所有文件標識為“運行時需要 vs. 只在編輯時需要”。在運行時需要的所有文件將列示在 jar 清單文件的依賴于:標簽后。JAR 向導的發布標簽使這個操作很簡單,并使您獲得清單文件權。

如果您不指定依賴于:標簽,工具將假設所有文件都是在運行時需要。這對于下載性能(例如不必要地下載特性編輯器和其它只在編輯時需要的文件)是很不好的。

賦予您的 bean 一個明確的首選大小
bean 將實現 getPreferredSize 方法,以便當首次用可能未定義的關鍵字特性構造時,它的表現良好。 如果在第一次放入時,bean 是 0 x 0 象素,那么用戶可能會混淆。 當更改關鍵字特性時,首選大小也應正常工作。例如,如果 bean 有一個在垂直和水平方位間轉換的特性,則首選大小應被寫入以相應地調整自身。

為 bean 指定缺省特性
利用 JavaBean 規范中的缺省特性部分,它將使您的 bean 在某些工具中易于使用。 JAR 向導使這個操作變得簡單并為您獲得 BeanInfo 權。

為 bean 及其特性指定簡要的非技術名稱和簡短描述
尋找簡要的非技術名來代替冗長的技術術語。例如,用 sum interval 代替 accumulatorInterval。還請注意,特性名的首選項以小寫表示并在字與字間留有空格,這對于用戶將更友好。

縮小用戶可見的特性范圍
為 bean 提供一個明確的 BeanInfo 以便不將每個實例變量都顯示為 bean 的特性,而且不將每個方法顯示為 Bean 的操作。 JAR 向導使這個操作變得簡單并為您獲得 BeanInfo 權。

為 bean 指定大圖標和小圖標
最后,為 Bean 提供大的(32x32)和小的(16x16)彩色圖標。而且,確保圖標有一個不同于灰色的透明背景。盡管很少使用,您也應養成提供黑色和白色圖標的習慣。JAR 向導的調色板 標簽使這個操作變得簡單,并使您獲得 BeanInfo 權

北斗有巢氏 有巢氏北斗