BeanInfoのクラスの役割

Java Beansには、 さらに本格的な開発を行うための便利な概念がいくつか導入されています。 まず BeanInfoについて解説しましょう。
BeanInfo のクラスは名前のとおり Beanに関する情報を管理するためのクラスです。 具体的には Bean自身、 あるいはBeanのプロパティ、メソッド、イベント、の情報を管理する BeanDescriptor, PropetryDescriptor,MethodDescriptor,EventDescriptor などのオブジェクトを提供します。 その他、開発ツールが使用するアイコンの情報なども提供します。 BeanInfo のクラスは必須のクラスというわけではありません。 Bean が Java Beansの規約に 100%従ってプロパティやイベントを定義している のであれば、BeanInfoの情報は不要です。 ただし、何らかの事情で命名規則からはずれたような場合には、 BeanInfoのクラスに記述をする必要が生じます。 またプロパティエディタやカスタマイザを新たに設計した場合には、 BeanInfoのクラスの中にその情報を記述することになります。 Beanの規模が大きくなってきた場合や、 Beanを製品として出荷するような場合には BeanInfo のクラスも併せて 作成しておくべきでしょう。
BeanInfoのクラスの定義の仕方にはルールが定められています。 たとえば PhotoButtonという名前の Beanに対応する BeanInfoのクラス名は PhotoButtonBeanInfoとなります。 BeanInfoのクラスは java.beans.BeanInfoインターフェイスを実装するか、 あるいはそれをある程度実装済みの java.beans.SimpleBeanInfoを継承して 定義する必要があります。最も簡単なサンプルは、たとえば次のようになります。

/** PhotoButton の BeanInfo クラス */

package photobutton;
import java.awt.*;
import java.beans.*;

public class PhotoButtonBeanInfo extends SimpleBeanInfo {

   /** アイコンイメージの指定 */

     public Image getIcon( int iconType ) {

          if( iconType == ICON_COLOR_16x16 )
              return loadImage( "icon16.gif" );
          else if( iconType == ICON_COLOR_32x32 )
              return loadImage( "icon32.gif" );
          else
              return null;
     }
}

上の例では特にプロパティやメソッドに関する新たな情報はつけ加えず、 単にアイコンの画像に関する情報を指定しているだけです。 BeanInfo のクラスのバイトコード、及び必要ならばアイコン用の画像データなど も Beanの Jarアーカイブの内部に一緒に保存しておきます。

jar cvmf photobutton.mani photobutton.jar photobutton/*.class photobutton/*.gif

これで、たとえば開発ツールが Beanを読み込んだ時に、アイコンの画像が自動的に 利用されるようになります。(下図は BeanBoxに読み込んだ時の例)