このセクションでは、Visual Editor for Java で使用する予定の Java Bean 用 BeanInfo クラスを作成する場合に採用可能な規則について説明します。
Visual Editor for Java は、BeanInfo クラスで記述されているプロパティー記述子を使用して、「プロパティー」ビュー内のエントリーの編集方法に加えて、そのエントリーのリストを設定します。
java.beans.PropertyDescriptor が非表示の場合、プロパティー・ビューアーで使用することはできません。 しかし、非表示プロパティーの set メソッドはコード生成プログラムで構文解析され、ライブ Bean に適用されます。
プロパティーは、表示されていなくてもコード構文解析で使用されますが、他の Visual Editor のビューやフィーチャーに組み込まれることはありません。 VisualAge for Java では、プロパティーを「プロパティー」ビューから除外し、他の機能については有効にしておくことが可能でした。 例えば、設計時を「偽」に指定することによって接続します。 Visual Editor for Java には接続機能がありませんが、設計時プロパティーの概念は引き継がれます。設計時プロパティーを「偽」にするには、ivjDesignTimeProperty のキーと Boolean.FALSE. の値を使用して属性値を設定する必要があります。
例えば、(public void setName(String) と public String getName() メソッドのペアからの) name プロパティーを持つクラス MyJavaBean 用に BeanInfo クラスを作成する場合、 getPropertyDescriptors() メソッドを次のように記述できます。
public PropertyDescriptor[] getPropertyDescriptors() {
PropertyDescriptor[] result = new PropertyDescriptor[1];
try{
PropertyDescriptor directionDescriptor = new
PropertyDescriptor("direction",MyJavaBean.class);
directionDescriptor.setValue("enumerationValues",new
Object[]{
"North",new
Integer(myclasses.CompassPoint.NORTH),"myclasses.CompassPoint.NORTH",
"East",new
Integer(myclasses.CompassPoint.EAST),"myclasses.CompassPoint.EAST",
"South",new
Integer(myclasses.CompassPoint.SOUTH),"myclasses.CompassPoint.SOUTH",
"West",new
Integer(myclasses.CompassPoint.WEST),"myclasses.CompassPoint.WEST"
});
result[0] = directionDescriptor;
} catch ( IntrospectionError exc ) {
}
return result;
}
「プロパティー」ビューでプロパティーが選択されると、「値」列にエディターが作成され、 新しい値を指定できます。 プロパティーのエディターを計算するために、java.beans.PropertyDescriptor がプロパティー・エディターを持っているかどうか照会されます。 関連プロパティー・エディターが見つかると、それが使用されます。見つからない場合は、プロパティー・タイプで使用できるように定義されているエディターを見つけます。タイプの事前定義プロパティー・エディターのリストに手を加えることはできません。 プロパティー記述子に java.beans.PropertyEditor があるか、またはプロパティー・タイプに定義されている場合、「プロパティー」ビューは作成するエディターのタイプの判別を試みます。 使用される規則は、次のとおりです。
すべての java.beans.PropertyEditor について、 public String getJavaInitializationString() メソッドも指定する必要があります。これにより、プロパティー記述子の set メソッドへの引数として Java ソース・コードで使用されるストリングが戻されます。このストリングは値を戻し、ストリングで参照されるいずれのタイプも完全修飾されていなければならず、さらに作成されるクラスのいずれのインポート・ステートメントにも依存しません。BeanInfo が java.beans.SimpleBeanInfo テンプレート JRE クラスを特殊化する場合、メソッドは抽象でないため、継承では「???」を戻します。 したがって、特殊化は正しく行う必要があります。
リストを入手するために、 プロパティー記述子の public String[] getTags() メソッドを使用することだけでなく、値のリストの指定を簡単にする方法もあります。 属性値は、enumerationValues というキー、 リスト内にある displayName の 3 対のエントリーの配列である値、値自体、および initializationString で作成されます。例えば、int 型になる direction と呼ばれるプロパティーを考えてみます。このプロパティーには 0、1、2、および 3 という値が割り当てられます。これらは、myclasses.CompassPoint クラスで NORTH、EAST、SOUTH、WEST static フィールドを参照します。プロパティー記述子は、次のように作成できます。
public PropertyDescriptor[] getPropertyDescriptors() {
PropertyDescriptor[] result = new PropertyDescriptor[1];
try{
PropertyDescriptor directionDescriptor
= new PropertyDescriptor("direction",MyJavaBean.class);
directionDescriptor.setValue("enumerationValues",new
Object[]{
"North",new
Integer(myclasses.CompassPoint.NORTH),"myclasses.CompassPoint.NORTH",
"East",new
Integer(myclasses.CompassPoint.EAST),"myclasses.CompassPoint.EAST",
"South",new
Integer(myclasses.CompassPoint.SOUTH),"myclasses.CompassPoint.SOUTH",
"West",new
Integer(myclasses.CompassPoint.WEST),"myclasses.CompassPoint.WEST"
});
result[0] = directionDescriptor;
} catch ( IntrospectionError exc ) {
}
return result;
}
各エントリーの 2 番目の値は、int 静的フィールド 自体 (例えば myclasses.CompoassPoint.NORTH) ではなく、java.lang.Integer のインスタンスです。これは、Object 型の配列にプリミティブ型を入れることができないためです。そのため、それぞれの java.lang 等価 を使用する必要があります。
Java Bean に表示されるイベント・リストは、そのイベント記述子に関する優先メソッド記述子です。
アダプター・クラスが使用可能な場合は、 このリストは、「eventAdapterClass」キーを持つ名前付き属性として、java.beans.EventDescriptor に追加する必要があります。以下はその例です。
EventSetDescriptor focusEventSetDescriptor = new EventSetDescriptor(
java.awt.Component.class,
"focus",
java.awt.event.FocusListener.class,
new String[] { "focusGained(java.awt.event.FocusEvent)", "focusLost(java.awt.event.FocusEvent)" },
"addFocusListener(java.awt.event.FocusListener)",
"removeFocusListener(java.awt.event.FocusListener"
);
focusEventSetDescriptor.setValue("eventAdapterClass", "java.awt.event.FocusAdapter");