Hvis du skal opprette nye komponenter eller bønner som skal brukes i det visuelle redigeringsprogrammet (for eksempel legge til komponenter på paletten), kan du styre virkemåten ved å oppgi en BeanInfo-klasse.
En BeanInfo-klasse implementerer java.beans.BeanInfo og blir brukt av det visuelle redigeringsprogrammet til å bestemme virkemåten til Egenskaper-visningen for bønnen, og om en tilpasser er tilgjengelig. Det visuelle redigeringsprogrammet inkluderer BeanInfo-klasser for felles AWT- og Swing-kontroller.
Fordi BeanInfo-klassen inneholder informasjon som bare kreves under designfasen, ligger den vanligvis i et annet prosjekt enn selve bønneklassen, og den er ikke inkludert når bønnen distribueres. Det visuelle redigeringsprogrammet for Java bruker en rekke regler som gjør at du kan knytte BeanInfo-klasser til Java-bønnene som de beskriver. Du må forstå disse reglene hvis du skal bruke Java-bønner som har BeanInfo-klasser som du vil at det visuelle redigeringsprogrammet skal oppdage. Dette gjelder hvis du for eksempel bruker et tredjepartssett med Java-bønneklasser, eller du har utviklet Java-bønner og BeanInfo-klasser som du bruker.
Hvis du vil lære mer om BeanInfo-klasser, kan du laste ned JavaBeans-spesifikasjonen fra java.sun.com/products/javabeans/docs/.
Klassen java.beans.Introspector brukes til å finne en BeanInfo-klasse for en Java-bønne. Når dette forekommer, kalles det introspeksjon, og det gjøres av det visuelle redigeringsprogrammet første gang en bønne blir brukt. For eksempel vil det første gang en knapp slippes fra paletten, utføres introspeksjon som prøver å finne riktig BeanInfo-klasse. Etter introspeksjon av bønnen, blir resultatene hurtigbufret for å bedre ytelsen. Men hvis det visuelle redigeringsprogrammet oppdager at BeanInfo-klassen kan være endret, og hurtigbufferen er foreldet, vil introspeksjon skje på nytt.
Introspeksjon av en bønne blir gjort ved å kalle opp den statiske metoden getBeanInfo(Class) med bønneklassen som argument. For eksempel:
java.beans.Introspector.getBeanInfo(MyJavaBean.class)
Introspektoren bruker tester for å finne en BeanInfo-klasse for argumentklassen MyJavaBean. Hvis en test er vellykket, slutter introspektoren å lete. Hvis et trinn mislykkes, prøver introspektoren den neste testen for å finne BeanInfo-klassen. Introspektoren bruker følgende logiske tester:
Hvis det blir funnet en BeanInfo-klasse for klassen, returnerer ikke introspektoren den eksplisitt. Den bruker i stedet detaljene til å opprette en midlertidig resultatklasse som implementerer java.beans.BeanInfo.
Det enkleste måten å forstå BeanInfo-banen på, er å tenke på den virtuelle Java-maskinen som blir opprettet for å utføre introspeksjon. Denne virtuelle maskinen får en klassebane som består av følgende oppføringer:
Når den virtuelle maskinen er opprettet, har java.beans.Introspector en liste over pakker der det skal søkes etter BeanInfo-klasser, som er definert med metoden public void setSearchPath(String[]).
Argumentene for denne metoden er:
Hvis bønnen du skriver, arver attributter fra en superklasse, viser ikke en standard BeanInfo de iboende attributtene. Du må eksplisitt vise dem med metoden getAdditionalBeanInfo().
For eksempel:
public BeanInfo[] getAdditionalBeanInfo() { try { // Følgende returnerer alle arvede funksjoner. return new BeanInfo[] { Introspector.getBeanInfo(MyPanel.class.getSuperclass())}; } catch (IntrospectionException e) { return new BeanInfo[0]; }
Hvis et iboende attributt ikke blir vist, vil ikke det visuelle redigeringsprogrammet gjengi det, selv om det er definert i kildekoden.