Pokud vytváříte nové komponenty nebo objekty bean k použití v rámci vizuálního editoru (například přidávání komponent do palety), můžete řídit jejich chování dodáním třídy BeanInfo.
Třída BeanInfo implementuje java.beans.BeanInfo a používá ji vizuální editor k určování chování pohledu vlastností pro objekt bean a dostupnosti správy vlastního nastavení. Vizuální editor obsahuje třídy BeanInfo pro společné obslužné prvky AWT a Swing.
Protože třída BeanInfo obsahuje informace potřebné pouze v době návrhu, je obvykle uchovávána v jiném projektu, než samotná třída bean a není zahrnuta při zavedení objektu. Vizuální editor pro Javu používá řadu pravidel, která umožňují přidružení tříd BeanInfo k objektům Java beans, které popisují. Pokud používáte objekty Java beans s třídami BeanInfo, které má vizuální editor zjišťovat, je třeba, abyste těmto pravidlům porozuměli. Například pokud používáte sadu tříd Java bean od jiného dodavatele, nebo pokud jste vyvinuli objekty Java beans a třídy BeanInfo, které používáte.
Chcete-li se dozvědět více o třídách BeanInfo, máte možnost stáhnout specifikaci JavaBeans z java.sun.com/products/javabeans/docs/.
Třída java.beans.Introspector se používá pro vyhledání třídy BeanInfo pro objekt Java bean. Doba, kdy k tomu dochází, se označuje jako introspekce a realizuje se pomocí vizuálního editoru při prvním použití objektu bean. Například pokud je tlačítko poprvé vypuštěno z palety, dojde k introspekci, která se pokusí vyhledat správnou třídu BeanInfo. Po introspekci objektu bean jsou výsledky uloženy do mezipaměti, aby napomáhaly lepšímu výkonu. Avšak pokud vizuální editor zjistí, že třída BeanInfo mohla být změněna a mezipaměť je stará, introspekce proběhne znovu.
Introspekce objektu bean se provádí voláním statické metody getBeanInfo(Class) se třídou bean jako argumentem. Například:
java.beans.Introspector.getBeanInfo(MyJavaBean.class)
Introspektor používá testy k vyhledání třídy BeanInfo pro třídu argumentu MyJavaBean. Pokud je některý z testů úspěšný, introspektor ukončí vyhledávání. Pokud některý krok selže, introspektor zkouší následující test na vyhledání třídy BeanInfo. Introspektor používá následující logické testy:
Pokud je nalezena třída BeanInfo pro danou třídu, introspektor ji explicitně nevrací. Namísto toho používá její podrobnosti k vytvoření dočasné třídy výsledků, která implementuje java.beans.BeanInfo.
Nejlepším způsobem, jak porozumět cestě BeanInfo, je zvážit Java Virtual Machine, který se vytváří pro provádění introspekce. Tomuto virtuálnímu stroji je poskytnuta cesta ke třídě, která je tvořena následujícími položkami:
Po vytvoření virtuálního stroje má java.beans.Introspector vlastní seznam balíčků pro vyhledávání tříd BeanInfo nastavených pomocí metody public void setSearchPath(String[]).
Argumenty k této metodě jsou následující:
Pokud objekt bean, který zapisujete, dědí atributy od supertřídy, výchozí BeanInfo neodkryje inherentní atributy. Je nutno je explicitně odkrýt pomocí metody getAdditionalBeanInfo().
Například:
public BeanInfo[] getAdditionalBeanInfo() {
try {
// Následující vrátí všechny děděné funkce.
return new BeanInfo[] {
Introspector.getBeanInfo(MyPanel.class.getSuperclass())};
} catch (IntrospectionException e) {
return new BeanInfo[0];
}
Pokud inherentní atribut není odkryt, vizuální editor jej nevykreslí, ani když je nastaven ve zdrojovém kódu.