Visual Editor 内で使用する新規コンポーネントまたは Bean を作成する (例えば、コンポーネントをパレットに追加する) 場合は、BeanInfo クラスを提供してそれらの振る舞いを制御できます。
BeanInfo クラスには java.beans.BeanInfo が実装され、Visual Editor は これを使用して、Bean に対する「プロパティー」ビューの振る舞いやカスタマイザーが使用可能であるかどうかを判別します。 Visual Editor には、共通 AWT および Swing 制御の BeanInfo クラスが組み込まれています。
BeanInfo クラスは設計時のみに必要な情報を持っているため、 通常 Bean クラス自身とは異なるプロジェクトに保持され、Bean が配置される時にはその情報は含まれません。 Visual Editor for Java で使用される数々の規則により、ユーザーは BeanInfo クラスとそのクラスによって記述される Java beans とを関連付けることができます。 Visual Editor で検出可能な BeanInfo クラスを所有する Java Bean を使用している場合には、 これらの規則を理解する必要があります。例えば、サード・パーティー製の Java Bean クラス一式を使用している場合、または、現在使用している Java Bean および BeanInfo クラスを自分で開発した場合などです。
BeanInfo クラスについて詳しく知るために、java.sun.com/products/javabeans/docs/ から JavaBeans 仕様をダウンロードできます。
java.beans.Introspector クラスを使用して、Java Bean の BeanInfo クラスを配置します。これが起こることを introspection といい、最初に Bean が使用された Visual Editor によって行われます。例えば、ボタンが最初にパレットからドロップされると、 イントロスペクションは正しい BeanInfo クラスを見つけようとします。 Bean をイントロスペクトすると、その結果はパフォーマンスを良くするためにキャッシュされます。ただし、BeanInfo クラスが変更されている可能性があり、キャッシュが不整合であることを Visual Editor が検出すると、イントロスペクションが再度実行されます。
Bean のイントロスペクションは、Bean クラスを引数として getBeanInfo(Class) 静的メソッドを呼び出して行われます。以下に例を示します。
java.beans.Introspector.getBeanInfo(MyJavaBean.class)
イントロスペクターは、テストを使用して、引数 MyJavaBean クラス の BeanInfo クラスを見つけます。テストが成功すると、イントロスペクターは検出を停止します。ステップが失敗すると、イントロスペクターは次のテストを行なって BeanInfo クラスを見つけようとします。イントロスペクターは、以下の論理テストを使用します。
クラスで BeanInfo クラスが見つかった場合は、イントロスペクターはそれを明示的には戻しません。 その代わりに、イントロスペクターは詳細情報を使用して、java.beans.BeanInfo を実装する一時的な結果クラスを作成します。
BeanInfo パスを知るには、イントロスペクションの実行のために作成される Java 仮想マシンを考慮することが最良の方法です。 この仮想マシンには、以下のエントリーで構成されるクラスパスが与えられます。
この仮想マシンが作成されていると、java.beans.Introspector には、public void setSearchPath(String[]) メソッドで BeanInfo クラスを検索するためのパッケージ・リストがあります。
以下はこのメソッドへの引数です。
作成する Bean がスーパー・クラスから属性を継承する場合、デフォルトの BeanInfo は継承属性を公開しません。 この場合は getAdditionalBeanInfo() メソッドを使用して、明示的に公開します。
以下に例を示します。
public BeanInfo[] getAdditionalBeanInfo() {
try {
// The following will return all inherited features.
return new BeanInfo[] {
Introspector.getBeanInfo(MyPanel.class.getSuperclass())};
} catch (IntrospectionException e) {
return new BeanInfo[0];
}
継承属性が公開されない場合、Visual Editor は、ソース・コードに設定されている場合であっても、その属性を提供しません。