BeanInfo-luokat ja itsekuvaavuus

Jos luot uusia komponentteja tai bean-komponentteja, joita käytetään graafisessa muokkausohjelmassa (esimerkiksi kun komponentteja lisätään valikoimaan), voit ohjata niiden toimintaa määrittämällä BeanInfo-luokan.

BeanInfo-luokan toteutuksessa käytetään java.beans.BeanInfo-koodia, jota graafinen muokkausohjelma käyttää bean-komponentin ominaisuusnäkymän toiminnan määrittämiseen ja mukautusohjelman käytettävyyden selvittämiseen. Graafisessa muokkausohjelmassa on yleisten AWT- ja Swing-ohjaustiedostojen BeanInfo-luokat.

Koska BeanInfo-luokka sisältää tietoja, joita tarvitaan vain suunnitteluvaiheessa, sitä säilytetään yleensä jossakin muussa projektissa kuin missä itse bean-luokka on, eikä sitä sisällytetä mukaan, kun bean-komponentti otetaan käyttöön. Graafinen Java-muokkausohjelma käyttää useita sääntöjä, joiden avulla BeanInfo-luokat voi liittää niitä kuvaaviin Java-bean-komponentteihin. Nämä säännöt on osattava, jos käytät Java-bean-komponentteja, joilla on graafisen muokkausohjelman havaittavaksi tarkoitettuja BeanInfo-luokkia. Voit esimerkiksi käyttää kolmannen osapuolen Java-bean-luokkajoukkoa tai kehittää käytettävät Java-bean-komponentit ja BeanInfo-luokat itse.

Jos haluat lisätietoja BeanInfo-luokista, voit ladata JavaBeans-määrityksen osoitteesta java.sun.com/products/javabeans/docs/.

Taustatietoja

Luokkaa java.beans.Introspector käytetään Java-bean-komponentin BeanInfo-luokan paikannukseen. Tätä tapahtumaa kutsutaan itsekuvaavuudeksi, ja graafinen muokkausohjelma toteuttaa sen, kun bean-komponenttia käytetään ensimmäisen kerran. Kun esimerkiksi painike pudotetaan ensimmäisen kerran valikoimaan, järjestelmässä ilmenee itsekuvaavuus, joka yrittää paikantaa oikean BeanInfo-luokan. Kun bean-komponentin itsekuvaavuus on valmis, tulokset siirretään välimuistiin suoritustehon parantamiseksi. Jos graafinen muokkausohjelma kuitenkin havaitsee, että BeanInfo-luokka on saattanut muuttua ja että välimuisti on vanhentunut, itsekuvaavuus toteutetaan uudelleen.

Bean-komponentin itsekuvaavuus toteutetaan kutsumalla staattinen getBeanInfo(Class)-metodi bean-luokka argumenttina. Esimerkki:

java.beans.Introspector.getBeanInfo(MyJavaBean.class)

Itsekuvaavuuden laatija paikantaa MyJavaBean-argumenttiluokan BeanInfo-luokan testeillä. Jos jokin testeistä onnistuu, itsekuvaavuuden laatija lopettaa paikannuksen. Jos jokin vaihe epäonnistuu, itsekuvaavuuden laatija kokeilee seuraavaa testiä BeanInfo-luokan paikannukseen. Itsekuvaavuuden laatija käyttää seuraavia loogisia testejä:

Jos luokalle ei löydy BeanInfo-luokkaa, itsekuvaavuuden laatija ei palauta sitä erikseen. Sen sijaan laatija käyttää tietojaan ja laatii väliaikaisen tulosluokan, joka toteuttaa java.beans.BeanInfo-koodin.

BeanInfo-hakupolku

Paras tapa hahmottaa BeanInfo-polku on perehtyä itsekuvaavuuden laadintaan luotavan Java-näennäiskoneen toimintaan. Tälle näennäiskoneelle annetaan luokkapolku, joka koostuu seuraavista merkinnöistä:

Koska java.beans.Introspector on luonut näennäiskoneen, sillä on luettelo paketeista, joista se voi hakea public void setSearchPath(String[]) -metodilla määritettyjä BeanInfo-luokkia.

Tämän metodin argumentit ovat seuraavat:

BeanInfo ja perityt ominaisuudet

Jos parhaillaan kirjoitettava bean-komponentti perii ominaisuuksia yliluokalta, perityt ominaisuudet eivät näy BeanInfo-oletusluokassa. Ne on altistettava erikseen getAdditionalBeanInfo()-metodilla.

Esimerkki:

public BeanInfo[] getAdditionalBeanInfo() {
try {                 
         // Seuraava palauttaa kaikki perityt ominaisuudet.                 
         return new BeanInfo[] { 
Introspector.getBeanInfo(MyPanel.class.getSuperclass())};  
} catch (IntrospectionException e) {            
return new BeanInfo[0];            
} 

Jos peritty ominaisuus ei näy, graafinen muokkausohjelma ei muodosta sitä, vaikka se olisi määritetty lähdekoodissa.

(C) Copyright IBM Corporation 1999, 2004. All rights reserved.