[???] / [Java FAQ] / [S133]
S132: Beans

[S132 Q-01]
Back
JavaBeans って何ですか? [S132 A-01] Java 言語を使って作成したソフトウエアコンポーネントの総称です。 JavaBeans の仕様に従って作成したコンポーネントを IDE (統合開発環境) 等のツールに インポートすることによって、部品を組み合わせる感覚でソフトウエアを作成することが できます。
[S132 Q-02]
Back
なぜ JavaBeans のようなコンポーネントが必要なのですか? [S132 A-02] 決まりきった処理や GUI を IDE 等のツールを使ってビジュアル的に組み立てるようにするためです。 Java 自体が既にオブジェクト指向言語であり、再利用可能なコードを書くことは可能で すし、テキストエディタでソースコードをガリガリ書くことが苦にならない人はクラスラ イブラリの方が融通が利いて使い易いことは確かです。しかし近年の傾向としては IDE (統合開発環境)等のツールを利用して、決まりきった処理や GUI は部品を組み合せるだ けで作成したいというニーズも高まっています。JavaBeans はこのような決まりきった処 理や GUI を IDE 等のツールを使ってビジュアルに組み立てられるようにするためのもの であり、存在価値は十分にあります。
[S132 Q-03]
Back
JavaBeans はどのように作成するのですか? [S132 A-03] 以下の条件を満たすように作成します。 JavaBeans はアプレットやサーブレットのように Applet クラスや Servlet クラスとい ったスーパークラスを継承して作成するのではありません。 以下の3つの条件を満たしているクラスであれば JavaBeans として扱うことができます。 1. public 宣言されているクラスであること。 2. デフォルトコンストラクタ(引数を持たないコンストラクタ)があること。 3. java.io.Serializable インタフェースを implements していること。
[S132 Q-04]
Back
JavaBeans の API はどのような機能を提供しているのですか? [S132 A-04] 大部分はコンポーネントがどのような機能(インタフェース)を持っているかを IDE (統合開発環境) 等に開示するための機能を提供するものです。 例えば IDE は java.beans.Introspector クラスを使用して、コンポーネントが持ってい るプロパティやイベントなどの情報 (BeanInfo) を取り出すことができます。コンポーネ ントの開発者はコンポーネントごとに BeanInfo クラスを作成することで、プロパティの 値を変更するための専用のエディタ(プロパティエディタ)やコンポーネントの動作等を簡 単に設定させるためのウイザード(カスタマイザ)等の機能を IDE に追加することもでき ます。
[S132 Q-05]
Back
BDK(JavaBeans Development Kit)とは何ですか? [S132 A-05] JavaBeans コンポーネントのテストツールである BeanBox とデモプログラムが含まれる開発キットです。 JavaBeans の API とドキュメントは v1.1以降の JDK に含まれているため、BDK は必ず しもダウンロードする必要はありません。
[S132 Q-06]
Back
JavaBeansのプロパティって何ですか、どのように定義するのですか? [S132 A-06] プロパティとはコンポーネントの外観(見た目)や動作を決定するための値です。 例えばコンポーネントが表示する文字列のフォントや色などがそれにあたります。 set/get/is で始まる名称のメソッドを作成することでプロパティを定義したことになり、 set/get/is に続く文字列がプロパティ名として扱われます。例えば setFont メソッドと getFont メソッドが存在する場合、setFont は Font プロパティに値を設定するメソッド (Setter メソッド)、getFont は Font プロパティの値を取得するメソッド (Getter メソ ッド)として扱われます。
[S132 Q-07]
Back
プロパティを定義する際に注意することはありますか? [S132 A-07] 以下の2つに注意しましょう。 1. Setter メソッドで設定する値のデータ型と Getter メソッドで取得する値データ型は 同じでなければなりません。同じでない場合の動作は保証されていません。 2. プロパティの値が boolean 型の場合の Getter メソッド名は get ではなく is で始 まるようにと規定されています。
[S132 Q-08]
Back
Bound プロパティって何ですか? [S132 A-08] 値が変更されたことを他のコンポーネントにイベントで通知する機能を持っている プロパティを Bound プロパティと呼びます。 コンポーネントを組み合せてプログラムを作成する場合、他のコンポーネントのプロパテ ィの値が変更されたかどうかを知りたいケースが発生します。例えば、グリッドコンポー ネント(表)とグラフコンポーネントを組み合せた場合、表の値が変更されるとグラフの表 示も自動的に変更したい場合などです。このように値が変更されたことを他のコンポーネ ントにイベントで通知する機能を持っているプロパティを Bound プロパティと呼びます。 Bound プロパティは値の変更を PropertyChangeEvent で PropertyChangeListener に通 知します。
[S132 Q-09]
Back
Constrained プロパティって何ですか? [S132 A-09] 値が変更される直前にそれを通知する機能を持っているプロパティを Constrained プロパティと呼びます。 他のコンポーネントのプロパティ値が変更されたどうかではなく、これから変更されよう としているかどうかを事前に検知して、必要であれば値の変更を拒否したいケースも考え られます。このように値が変更される直前にそれを通知する機能を持っているプロパティ を Constrained プロパティと呼びます。Constrained プロパティは値が変更されようと していることを PropertyChangeEvent で VetoableChangeListener に通知します。 値の変更を拒否したい場合、VetoableChangeListener は PropertyVeto-Exception を発 生させます。PropertyVetoException が発生した場合、Constrained プロパティは値の変 更を行わないことになっています。
[S132 Q-10]
Back
プロパティエディタって何ですか? [S132 A-10] IDE (統合開発環境)がコンポーネントのプロパティ値を編集するために表示するエディタです。 プロパティのデータ型が文字列や数値といった基本的な型である場合は IDE が提供する 標準的なプロパティエディタに編集を任せることができますが、独自のデータ型である場 合は、コンポーネントと共に専用のプロパティエディタを作成して提供する必要がありま す。また基本的な型であっても、設定できる値を制限したい場合等は候補値を一覧から選 ばせるようなプロパティエディタを提供した方が便利です。 プロパティエディタは java.beans.PropertyEditor インタフェースを実装して作成し、 BeanInfo を使って公開します。
[S132 Q-11]
Back
カスタマイザって何ですか? [S132 A-11] コンポーネント専用のウィザード機能を提供するための機能です。 コンポーネントによっては、複数のプロパティ間に依存関係が生じる可能性があります。 例えばあるプロパティの値がαの場合は別のプロパティの値はβでなければならない等で す。このような場合は関連する複数のプロパティに設定可能な値の組み合わせを一覧から 選べるようになっていると便利です。カスタマイザはこのようなコンポーネント専用のウ ィザード機能を提供するための機能です。 カスタマイザは java.beans.Customizer インタフェースを実装して作成し、BeanInfo を 使って公開します。
[S132 Q-12]
Back
プロパティエディタやカスタマイザはどの IDE からも利用できますか? [S132 A-12] これは各 IDE (統合開発環境)の JavaBeans サポートレベルによって異なります。 JavaBeans サポートを名乗っている IDE は JavaBeans の仕様書に記述されているすべて の機能が利用可能であってほしいところですが、現状ではカスタマイザを呼び出せないも のもあるようです。
[S132 Q-13]
Back
BeanInfo は必ず作成しなければなりませんか? [S132 A-13] いいえ、必須ではありません。 コンポーネントが BeanInfo を提供していない場合、java.beans.Introspector クラスは コンポーネントのクラスを解析して BeanInfo を自動的に作成してくれます。ただしプロ パティエディタやカスタマイザの情報までは作成してくれないため、プロパティエディタ やカスタマイザを提供する場合は BeanInfo を作成する必要があります。また set/get/is で始まるメソッドのうち、プロパティとして扱わせたくないものがある場合 も BeanInfo を作成することで解決できます。
[S132 Q-14]
Back
BeanInfo はどのように作成するのですか? [S132 A-14] java.beans.BeanInfo インタフェースを実装して作成します。 ・getBeanDescriptor メソッドではコンポーネント名称やカスタマイザのクラス名を保持 する BeanDescriptor オブジェクトを返却します。 ・getEventSetDescriptors メソッドではコンポーネントが通知するイベントの情報を保 持する EventSetDescriptor オブジェクトを配列で返却します。 ・getPropertyDescriptors メソッドではコンポーネントが公開するメソッドの情報を保 持する PropertyDescriptor オブジェクトを配列で返却します。プロパティエディタの 情報は PropertyDescriptor オブジェクトに含まれます。 ・getMethodDescriptors メソッドではコンポーネントが公開するメソッドの情報を保持 する MethodDescriptor オブジェクトを配列で返却します。 ・getAdditionalBeanInfo メソッドではコンポーネントの内部で使用しているコンポーネ ントがあれば、その BeanInfo オブジェクトを配列で返却します。 ・getIcon メソッドでは IDE (統合開発環境)上に表示するアイコンを Image オブジェク トで返却します。 ・getDefaultEventIndex メソッドでは getEventSetDescriptors メソッドが返却するイ ベント情報の配列の中で最も代表的なイベントのインデクス番号を返却します。 ・getDefaultPropertyIndex メソッドでは getPropertyDescriptors メソッドが返却する プロパティ情報の配列の中で最も代表的なプロパティのインデクス番号を返却します。 なお、作成する BeanInfo のクラス名は「コンポーネントのクラス名+ BeanInfo 」 である必要があります。例えばコンポーネントのクラス名が "SampleBean" の場合は "SampleBeanBeanInfo" になります。
[S132 Q-15]
Back
作成したコンポーネントはどのように配布するのですか? [S132 A-15] jar コマンドを使用して、コンポーネントに関連するすべてのクラスとリソース ファイルを JAR ファイルにまとめて配布します。

Back
contributor: Mamo
コメントの送り先:Java FAQ BBS