Als u nieuwe componenten of beans maakt voor gebruik in de Visual Editor (bijvoorbeeld componenten toevoegen aan het palet) kunt u het gedrag besturen door een BeanInfo-klasse te leveren.
Een BeanInfo-klasse implementeert java.beans.BeanInfo en wordt gebruikt door de Visual Editor om vast te stellen wat het gedrag is van de view Eigenschappen van de bean en of een aanpasprogramma beschikbaar is. De Visual Editor bevat BeanInfo-klassen voor algemene AWT- en Swing-besturingsfuncties.
Omdat de BeanInfo-klasse informatie bevat die alleen vereist is op het moment van ontwerpen, wordt deze gewoonlijk in een ander project bewaard dan de beanklasse zelf en niet opgenomen bij het in gebruik nemen van de bean. Voor de Visual Editor wordt een aantal regels gebruikt waarmee u de BeanInfo-klassen kunt koppelen aan de Java-beans die door de klassen worden beschreven. Het is belangrijk dat u deze regels begrijpt als u Java-beans gebruikt met BeanInfo-klassen waarvan u wenst dat deze door de Visual Editor worden herkend. Dit geldt bijvoorbeeld wanneer u een externe set van Java-beanklassen gebruikt of als u Java-beans en BeanInfo-klassen hebt ontwikkeld die u gebruikt.
Als u meer informatie wilt over BeanInfo-klassen, kunt u de JavaBeans-specificatie downloaden vanaf java.sun.com/products/javabeans/docs/.
De klasse java.beans.Introspector wordt gebruikt om een BeanInfo-klasse voor een Java-bean op te zoeken. Het tijdstip dat dit gebeurt, wordt introspection genoemd en dit wordt de eerste keer dat een bean wordt gebruikt, uitgevoerd door de Visual Editor. Bijvoorbeeld wanneer een knop de eerste keer wordt neergezet vanaf een palet, vindt de introspectie plaats om te proberen de juiste BeanInfo-klasse op te zoeken. Nadat de bean is gecontroleerd, worden de resultaten in cache geplaatst ter wille van de prestatie. Wanneer echter de Visual Editor vaststelt dat de BeanInfo-klasse mogelijk is gewijzigd en de cache verouderd is, vindt de controle opnieuw plaats.
De controle van een bean wordt uitgevoerd door de statische methode getBeanInfo(Class) aan te roepen met de bean-klasse als argument. Voorbeeld:
java.beans.Introspector.getBeanInfo(MyJavaBean.class)
Door de introspector worden testen gebruikt om een BeanInfo-klasse te vinden voor de argumentklasse MyJavaBean. Als een test is geslaagd, stopt de introspector met zoeken. Als een van de stappen mislukt, wordt de volgende test door de introspector geprobeerd om de BeanInfo-klasse te zoeken. De volgende logische testen worden door de introspector gebruikt:
Als een BeanInfo-klasse voor de klasse wordt gevonden, wordt deze door de introspector niet expliciet teruggezonden. In plaats hiervan worden de details gebruikt voor het maken van een tijdelijke resultaatklasse die java.beans.BeanInfo implementeert.
U kunt het BeanInfo-pad het beste leren begrijpen door de Java-VM te bekijken die is gemaakt voor het uitvoeren van introspectie. Deze virtuele machine heeft een klassenpad dat uit de volgende items bestaat:
Nadat de Virtual Machine is gemaakt, heeft java.beans.Introspector een lijst met pakketten waarin wordt gezocht naar de BeanInfo-klassen die zijn ingesteld met behulp van de public void setSearchPath(String[])-methode.
De argumenten voor deze methode zijn:
Als de bean die u schrijft kenmerken overneemt uit een superklasse, exposeert de standaard BeanInfo de inherente kenmerken niet. U moet deze expliciet exposeren met behulp van de methode getAdditionalBeanInfo().
Voorbeeld:
public BeanInfo[] getAdditionalBeanInfo() { try { // Met het volgende worden alle overgenomen features teruggezonden. return new BeanInfo[] { Introspector.getBeanInfo(MyPanel.class.getSuperclass())}; } catch (IntrospectionException e) { return new BeanInfo[0]; }
Als een inherent kenmerk niet wordt geëxposeerd, genereert de Visual Editor dit niet, zelfs niet als dit is ingesteld in de broncode.