Ez a szakasz olyan szabályokat tartalmaz, melyeket érdemes betartani a Visual Editor for Java környezetbe szánt Java komponensek BeanInfo osztályainak megírásakor.
A Visual Editor for Java a BeanInfo osztály tulajdonságleírói alapján állítja össze a Tulajdonságok nézet bejegyzéseit, illetve állapítja meg ezek szerkesztésének módját.
Ha egy java.beans.PropertyDescriptor rejtett, akkor a hozzá tartozó tulajdonság nem elérhető a Tulajdonságok megjelenítőben. Mindazonáltal a kód előállító a rejtett tulajdonságok beállító metódusait is feldolgozza, így azok bekerülnek az élő komponensbe.
A rejtett tulajdonságokat a kódértelmező felhasználja, de a vizuális szerkesztő többi nézete vagy szolgáltatása számára nem elérhetőek. A VisualAge for Java lehetővé tette egy tulajdonság kizárását a Tulajdonságok nézetből úgy, hogy az továbbra is rendelkezésre álljon a többi funkció számára. Ilyen például a csatlakozás, amely tervezési időben false értékre állítható. Noha a vizuális szerkesztő nem rendelkezik csatlakozási képességgel, a tervezési idejű tulajdonságok elvét átörökíti. Egy tulajdonság tervezési időben hamisra állításához hozzon létre egy ivjDesignTimeProperty jellemzőt Boolean.FALSE értékkel.
Tegyük fel például, hogy a SajatJavaBean osztályhoz készít BeanInfo osztályt, amely a public void setName(String) és public String getName() metóduspáron alapuló name tulajdonsággal rendelkezik. Ekkor a getPropertyDescriptors() metódus lehet a következő:
public PropertyDescriptor[] getPropertyDescriptors() { PropertyDescriptor[] eredmeny = new PropertyDescriptor[1]; try{ PropertyDescriptor iranyLeiro = new PropertyDescriptor("irány",SajatJavaBean.class); iranyLeiro.setValue("enumerationValues",new Object[]{ "Észak",new Integer(sajatosztalyok.IranytuMutat.ESZAK),"sajatosztalyok.IranytuMutat.ESZAK", "Kelet",new Integer(sajatosztalyok.IranytuMutat.KELET),"sajatosztalyok.IranytuMutat.KELET", "Dél",new Integer(sajatosztalyok.IranytuMutat.DEL),"sajatosztalyok.IranytuMutat.DEL", "Nyugat",new Integer(sajatosztalyok.IranytuMutat.NYUGAT),"sajatosztalyok.IranytuMutat.NYUGAT" }); eredmeny[0] = iranyLeiro; } catch ( IntrospectionError exc ) { } return eredmeny; }
Amikor kijelöl egy tulajdonságot a Tulajdonságok nézetben, akkor az Érték oszlopban egy szerkesztő jön létre, amelyben megadhatja az új értéket. A megfelelő tulajdonságszerkesztőt a vizuális szerkesztő a java.beans.PropertyDescriptor alapján kísérli meg meghatározni. Ha talál a tulajdonsághoz tartozó szerkesztőt, akkor azt használja. Ellenkező esetben a tulajdonságtípushoz tartozó alapértelmezett szerkesztőt keresi meg. Az előre meghatározott tulajdonságszerkesztők listáját nem lehet módosítani. Ha a tulajdonságleíró vagy a tulajdonságtípus alapján a java.beans.PropertyEditor meghatározható, akkor a Tulajdonságok nézet megkísérli meghatározni a létrehozandó szerkesztő típusát. A szabályok a következők:
Minden egyes java.beans.PropertyEditor osztálynak specializálni kell a public String getJavaInitializationString() metódusát. Ez visszaadja a Java forráskódban a tulajdonságleíró set metódusának argumentumaként használt karaktersorozatot. Ennek a karaktersorozatnak kell visszaadnia az értéket. A karakterlánc csak teljes képzésű típushivatkozásokat tartalmazhat, és nem hagyatkozhat az összeállítás alatt álló osztály importálási utasításaira. Ha a BeanInfo osztály a java.beans.SimpleBeanInfo JRE sablonosztályt specializálja, akkor a metódus nem absztrakt, és a leszármazott metódus visszatérési értéke '???'. Ne feledje helyesen megvalósítani a specializációt.
A public String[] getTags() metódus meghívásánál egyszerűbb módszer is létezik az értékek listájának összeállítására. Az enumerationValues attribútumérték egy tömb, melynek elemei három bejegyzést tartalmaznak: a listában megjelenő nevet (displayName), magát az értéket, és az initializationString karakterláncot. Tegyük fel például, hogy az irany tulajdonság típusa int, és lehetséges értékei 0,1, 2 és 3. Ezek hivatkozások a sajatosztalyok.IranytuMutat ESZAK, DEL, KELET és NYUGAT statikus mezőire. A tulajdonság a leírója a következő:
public PropertyDescriptor[] getPropertyDescriptors() { PropertyDescriptor[] eredmeny = new PropertyDescriptor[1]; try{ PropertyDescriptor iranyLeiro = new PropertyDescriptor("direction",MyJavaBean.class); iranyLeiro.setValue("enumerationValues",new Object[]{ "Észal",new Integer(sajatosztalyok.IranytuMutat.ESZAK),"sajatosztalyok.IranytuMutat.ESZAK", "Kelet",new Integer(sajatosztalyok.IranytuMutat.KELET),"sajatosztalyok.IranytuMutat.KELET", "Dél",new Integer(sajatosztalyok.IranytuMutat.DEL),"sajatosztalyok.IranytuMutat.DEL", "Nyugat",new Integer(sajatosztalyok.IranytuMutat.NYUGAT),"sajatosztalyok.IranytuMutat.NYUGAT" }); eredmeny[0] = iranyLeiro; } catch ( IntrospectionError exc ) { } return eredmeny; }
A bejegyzésekben a második érték nem maga a statikus int mező (például sajatosztalyok.IranytuMutat.NYUGAT), hanem egy java.lang.Integer példány. Ez azért van így, mert primitív típusok nem tárolhatók Object típusú tömbben, ezért a java.lang megfelelőjüket kell használni.
A Java komponenshez megjelenített események az eseményleíróihoz rendelt metódus leírók.
Ha elérhető illesztőosztály, akkor megnevezett attribútumként "eventAdapterClass" kulccsal adja hozzá a java.beans.EventDescriptor-hoz, például:
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");