コンポーネントのユーザーは、プロパティを使用してコンポーネントの状態を変更できます。プロパティでは、内部の実装を隠したまま、コンポーネントの変数の値を設定または読み取ることができます。プロパティを作成することにより、基礎のデータ構造を公開することなく、コンポーネントの状態にアクセスできるようになります。
コンポーネントでプロパティを使用すると、次のような利点があります。
プロパティを使用すると、JDeveloperのUIエディタの全機能を利用できます。コンポーネントのユーザーは、コンポーネントの状態をプロパティ値の設定により変更し、その変更の結果をプログラム上でただちに確認できます。デフォルトでは、あるコンポーネントのパブリック・プロパティは、他のコンポーネントでもすべて使用可能ですが、オプションのBeanInfoクラスを使用し、表示するプロパティを指定することにより、コンポーネント・プロパティへの設計時のアクセスを制御できます。
プロパティのアクセッサ・メソッドには、複雑な機能を組み込めます。コンポーネントのユーザーは、setProperty()
またはgetProperty()
メソッドをコールすればよいため、詳細についての知識は必要ありません。簡単な数値に見えるプロパティが、実際にはデータベースでの長い計算や検索を行う場合もあります。コンポーネントのユーザーは、そのような複雑な処理をする必要はありません。
プロパティを設定するかまたは読み込む際、必ずアクセッサ・メソッドによって他のオブジェクトに通知、あるいは他のメソッドがコールされるようにすることができます。アクセッサ・メソッドにより、コンポーネントのあらゆる種類の複雑な動作をカプセル化できます。コンポーネントのユーザーは、メソッドのコール方法を知っていれば十分です。
プロパティには、コンポーネントで定義し、適切な名前を付けたアクセッサ・メソッドを指定することをお薦めします。コンポーネントには、そのコンポーネントに関連付けられたクラス・データ・メンバー(フィールド)を指定する必要はありません。コンポーネントのクラス・データ・メンバーと指定したコンポーネント・プロパティ間には、1対1の関係が成り立たない場合があるためです。たとえば、次のコードでは、shadowColor
というコンポーネント・プロパティを定義しています。
public class MyComponent extends Panel {
private int redValue;
private int greenValue;
private int blueValue;
public int getShadowColor() {
return redValue | greenValue | blueValue;
}
public void setShadowColor(int color) {
redValue = color & 0xff0000; // class data members
greenValue = color & 0x00FF00;
blueValue = color & 0x0000FF;
}
}
MyComponent
にはshadowColor
という実際のクラス・データ・メンバーはありませんが、2つのアクセッサ・メソッド、getShadowColor()
およびsetShadowColor()
のために、このプロパティが正しく定義されています。これらのメソッドでは、3つの変数の書込みと読取りを行い、プロパティの値を計算します。コンポーネント・プロパティで、プロパティと同じ名前の変数を設定することがよくありますが、必ずしもその必要はありません。コンポーネント・プロパティには、そのプロパティを有効にするために、正しく宣言されたプロパティ・アクセッサ・メソッドのみが必要です。