Tässä osassa on kuvaus joistakin säännöistä, joita voit käyttää, jos kirjoitat graafisessa Java-muokkausohjelmassa käytettäväksi tarkoitettua BeanInfo-luokkaa.
Graafinen Java-muokkausohjelma käyttää BeanInfo-luokassa kuvattuja ominaisuuskuvaajia Ominaisuudet-näkymän määritysluettelon muodostukseen ja määritysten muokkaustapojen määritykseen.
Jos metodi java.beans.PropertyDescriptor on piilotettu, se ei ole käytettävissä Ominaisuudet-tarkastelutoiminnolla. Koodinmuodostustoiminto voi kuitenkin jäsentää piilotettujen ominaisuuksien määritysmetodit, ja ne otetaan käyttöön toiminnassa olevissa bean-komponenteissa.
Kun ominaisuus on piilotettu, sitä käytetään edelleen koodin jäsennyksessä, mutta sitä ei sisällytetä mihinkään muuhun graafisen muokkausohjelman näkymään tai ominaisuuteen. VisualAge for Java on sallinut ominaisuuden poisjätön Ominaisuudet-näkymästä, mutta ominaisuus on vielä muiden toimintojen käytettävissä. Esimerkiksi yhteyksiä voi muodostaa määrittämällä sen suunnitteluajan arvoksi epätosi. Vaikka graafisella Java-muokkausohjelmalla ei ole yhteydenmuodostustoimintoa, suunnitteluaikaominaisuuksien käsite siirretään eteenpäin. Jos haluat määrittää ominaisuuden suunnitteluajan arvon epätodeksi, määritä määritearvo, jonka avain on ivjDesignTimeProperty ja arvo Boolean.FALSE.
Jos BeanInfo-luokkaa kirjoitetaan esimerkiksi MyJavaBean-luokalle, jolla on nimiominaisuus (yleisestä void-määrityksestä setName(String) ja yleisestä metodiparista String getName()), metodin getPropertyDescriptors() voi kirjoittaa seuraavasti:
public PropertyDescriptor[] getPropertyDescriptors() { PropertyDescriptor[] result = new PropertyDescriptor[1]; try{ PropertyDescriptor directionDescriptor = new PropertyDescriptor("direction",MyJavaBean.class); directionDescriptor.setValue("enumerationValues",new Object[]{ "North",new Integer(myclasses.CompassPoint.NORTH),"myclasses.CompassPoint.NORTH", "East",new Integer(myclasses.CompassPoint.EAST),"myclasses.CompassPoint.EAST", "South",new Integer(myclasses.CompassPoint.SOUTH),"myclasses.CompassPoint.SOUTH", "West",new Integer(myclasses.CompassPoint.WEST),"myclasses.CompassPoint.WEST" }); result[0] = directionDescriptor; } catch ( IntrospectionError exc ) { } return result; }
Kun ominaisuus on valittu Ominaisuudet-näkymästä, muokkausohjelma luodaan Arvo-sarakkeeseen, johon voit määrittää uuden arvon. Ominaisuuden muokkausohjelma lasketaan tekemällä ominaisuuden muokkausohjelman kysely java.beans.PropertyDescriptor-metodille. Jos liittyvä ominaisuuden muokkausohjelma löytyy, sitä käytetään. Muussa tapauksessa järjestelmä paikantaa muokkausohjelman, joka on määritetty toimimaan ominaisuustyypin kanssa. Et voi vaikuttaa ennalta määritettyyn tyypille soveltuvien ominaisuuden muokkausohjelmien luetteloon. Jos java.beans.PropertyEditor-metodi löytyy ominaisuuden kuvaajasta tai se on olemassa ominaisuustyypille, Ominaisuudet-näkymä yrittää määrittää luotavan muokkausohjelman tyypin. Käytetyt säännöt ovat seuraavat:
Jokaiselle java.beans.PropertyEditor-metodin metodille public String getJavaInitializationString() on myös määritettävä omat asetuksensa. Tämä palauttaa merkkijonon, jota käytetään Java-lähdekoodissa ominaisuuden kuvaajan set-määritysmetodiin viittaavana argumenttina. Tämän merkkijonon tulee palauttaa arvo, ja kaikkien merkkijonossa viitattujen tyyppien tulee olla täysin tarkennettuja, eivätkä ne saa perustua koostettavassa luokassa oleviin tuotuihin lauseisiin. Jos BeanInfo käyttää JRE-mallipohjaluokkaa java.beans.SimpleBeanInfo, metodi ei ole erillinen, ja se palauttaa perittynä arvon ???. Muista määrittää sen omat määritykset oikein.
Luettelon voi muodostaa käyttämällä metodia public String[] getTags() ominaisuuden kuvaajassa, mutta arvoluettelon voi määrittää helpomminkin. Määritearvo luodaan avaimella enumerationValues. Tämä on arvo, joka on kokoelma kolmenlaisia merkintöjä: luettelossa olevat displayName-merkinnät, itse arvo ja initializationString-merkintä. Oletetaan esimerkiksi, että kutsut ominaisuuden direction, jonka tyyppi on int ja jolle voi määrittää arvot 0, 1, 2 ja 3. Nämä ovat viittauksia staattisiin kenttiin NORTH, EAST, SOUTH ja WEST luokassa myclasses.CompassPoint. Ominaisuuden kuvaajan voi kirjoittaa seuraavasti:
public PropertyDescriptor[] getPropertyDescriptors() { PropertyDescriptor[] result = new PropertyDescriptor[1]; try{ PropertyDescriptor directionDescriptor = new PropertyDescriptor("direction",MyJavaBean.class); directionDescriptor.setValue("enumerationValues",new Object[]{ "North",new Integer(myclasses.CompassPoint.NORTH),"myclasses.CompassPoint.NORTH", "East",new Integer(myclasses.CompassPoint.EAST),"myclasses.CompassPoint.EAST", "South",new Integer(myclasses.CompassPoint.SOUTH),"myclasses.CompassPoint.SOUTH", "West",new Integer(myclasses.CompassPoint.WEST),"myclasses.CompassPoint.WEST" }); result[0] = directionDescriptor; } catch ( IntrospectionError exc ) { } return result; }
Kunkin määrityksen toinen arvo ei ole itsessään staattinen int-kenttä, kuten myclasses.CompoassPoint.NORTH, vaan metodin java.lang.Integer ilmentymä. Tämä johtuu siitä, että alkeistyyppejä ei voi viedä taulukkoon, jonka tyyppi on Object, joten sen sijaan on käytettävä niiden metodia java.lang equivalent.
Java-bean-komponentissa näkyvä tapahtumaluettelo on sen tapahtumakuvaajien ensisijainen metodikuvaaja.
Jos sovitinluokka on saatavilla, se tulee lisätä metodiin java.beans.EventDescriptor nimettynä määritteenä, jolla on avain "eventAdapterClass". Esimerkki:
EventSetDescriptor focusEventSetDescriptor = new EventSetDescriptor( java.awt.Component.class, "focus", java.awt.event.FocusListener.class, new String[] { "focusGained(java.awt.event.FocusEvent)", "focusLost(java.awt.event.FocusEvent)" }, "addFocusListener(java.awt.event.FocusListener)", "removeFocusListener(java.awt.event.FocusListener" ); focusEventSetDescriptor.setValue("eventAdapterClass", "java.awt.event.FocusAdapter");