Si vous créez des composants ou des beans pour les utiliser dans l'éditeur visuel (par exemple, en ajoutant des composants à la palette), vous pouvez contrôler leur comportement en fournissant une classe BeanInfo.
Une classe BeanInfo class implémente java.beans.BeanInfo et permet à l'éditeur visuel de déterminer le comportement de la vue Propriétés du bean et d'indiquer si un module de personnalisation est disponible. L'éditeur visuel inclut des classes BeanInfo pour les contrôles AWT et Swing courants.
Comme la classe BeanInfo contient des informations utilisées uniquement lors de la conception, elle est généralement stockée dans un projet différent de celui de la classe du bean et n'est pas incluse lorsque le bean est déployé. L'éditeur visuel Java utilise un certain nombre de règles pour vous permettre d'associer les classes BeanInfo aux beans Java qu'elles décrivent. Vous devez maîtriser ces règles si vous utilisez des beans Java associés à des classes BeanInfo que l'éditeur visuel doit détecter. C'est le cas, par exemple, si vous utilisez un ensemble de classes de beans Java provenant d'un tiers ou que vous avez développé les beans Java et les classes BeanInfo que vous utilisez.
Pour mieux connaître les classes BeanInfo, vous pouvez télécharger la spécification JavaBeans sur le site java.sun.com/products/javabeans/docs/.
La classe java.beans.Introspector est utilisée pour localiser la classe BeanInfo d'un bean Java. La phase pendant laquelle cette opération est effectuée s'appelle l'introspection et est exécutée par l'éditeur visuel la première fois qu'un bean est utilisé. Par exemple, lorsque vous faites glisser un bouton pour la première fois à partir de la palette, une introspection est effectuée pour tenter de localiser la classe BeanInfo appropriée. Une fois l'introspection du bean terminée, les résultats sont placés en mémoire cache pour optimiser les performances. Toutefois, lorsque l'éditeur visuel détecte que la classe BeanInfo a été modifiée et que la mémoire cache est obsolète, l'introspection est à nouveau exécutée.
L'introspection d'un bean est effectuée en appelant la méthode statique getBeanInfo(Class) avec la classe bean sous forme d'argument. Exemple :
java.beans.Introspector.getBeanInfo(MyJavaBean.class)
Le programme d'introspection utilise la logique suivante pour localiser une classe BeanInfo de la classe d'argument MyJavaBean. Si le test est concluant, le programme d'introspection cesse la recherche. Si une étape du test échoue, le programme d'introspection passe au test suivant pour rechercher la classe BeanInfo. Il utilise les tests logiques suivants :
Si une classe BeanInfo est détectée pour la classe, Le programme d'introspection ne la renvoie pas explicitement. A la place, il utilise les informations associées pour créer une classe de résultat temporaire qui implémente java.beans.BeanInfo.
Le meilleur moyen de comprendre le chemin BeanInfo est de prendre en compte la machine virtuelle Java créée pour effectuer l'introspection. La machine virtuelle dispose d'un chemin de classe composé des entrées suivantes :
Après avoir créé la machine virtuelle java.beans.Introspector définit sa liste de packages à utiliser pour la recherche de classes BeanInfo avec la méthode public void setSearchPath(String[]).
Les arguments associés à cette méthode sont les suivants :
Si le bean que vous écrivez hérite des attributs d'une superclasse, l'élément BeanInfo par défaut n'expose pas les attributs inhérents. Vous devez les exposer explicitement avec la méthode getAdditionalBeanInfo().
Exemple :
public BeanInfo[] getAdditionalBeanInfo() {
try {
// Renvoie tous les dispositifs hérités.
return new BeanInfo[] {
Introspector.getBeanInfo(MyPanel.class.getSuperclass())};
} catch (IntrospectionException e) {
return new BeanInfo[0];
}
Si un attribut inhérent n'est pas exposé, l'éditeur visuel ne le prend pas en compte, même s'il n'est pas défini dans le code source.