寫bean類的準則

寫 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 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章