package oreilly.beans.yesno; import java.beans.*; import java.lang.reflect.*; import java.awt.*; /** BeanInfo-luokka YesNoDialog-komponenttia varten */ public class YesNoDialogBeanInfo extends SimpleBeanInfo { /** Palauttaa komponenttia vastaavan kuvakkeen. Argumenttia pitäisi * kyllä tutkia, jotta nähtäisiin, minkä kokoinen kuvake halutaan. * Koska tarjolla on kuitenkin vain yhdenlainen kuvake, palautetaan se * ja annetaan komponenttikäsittelytyökalun tulla toimeen sen kanssa. */ public Image getIcon(int kind) { return loadImage("YesNoDialogIcon.gif"); } /** Palautetaan komponenttia itseään kuvaileva olio. Olio sisältää * mukautusluokan komponenttiluokkaa varten. Olioon voisi liittää * myös kuvausmerkkijonon. */ public BeanDescriptor getBeanDescriptor() { return new BeanDescriptor(YesNoDialog.class, YesNoDialogCustomizer.class); } /** Tämä on apurutiini PropertyDescriptor-olioiden luomista varten */ public static PropertyDescriptor property(String name, String description) throws IntrospectionException { PropertyDescriptor p = new PropertyDescriptor(name, YesNoDialog.class); p.setShortDescription(description); return p; } /** Tämä metodi palauttaa taulukollisen PropertyDescriptor-olioita, jotka * kertovat lisätietoja komponentin tukemista ominaisuuksista. * Kun annetaan tällaisia erikseen ominaisuuksia kuvailevia olioita, * saadaan kustakin ominaisuudesta annettua lyhyt ohjeteksti. Näitä * ohjetekstejä ei saada komponentinkäsittelyohjelman käyttöön vain * tutkimalla komponentin rakennetta. Samalla voidaan myös rekisteröidä * itse tehdyt ominaisuuseditorit komponentin kahdelle ominaisuudelle. */ public PropertyDescriptor[] getPropertyDescriptors() { try { PropertyDescriptor[] props = { property("title", "The string that appears in the dialog title bar"), property("message", "The string that appears in the dialog body"), property("yesLabel", "The label for the ‘Yes’ button, if any"), property("noLabel", "The label for the ‘No’ button, if any"), property("cancelLabel", "The label for the ‘Cancel’ button, if any"), property("alignment", "The alignment of the message text"), property("font", "The font to use for message and buttons"), property("background", "The background color for the dialog"), property("foreground", "The text color for message and buttons") }; props[1].setPropertyEditorClass(YesNoDialogMessageEditor.class); props[5].setPropertyEditorClass(YesNoDialogAlignmentEditor.class); return props; } catch (IntrospectionException e) {return super.getPropertyDescriptors();} } /** message-ominaisuutta muutetaan useimmin. Tehdään siitä oletusominaisuus */ public int getDefaultPropertyIndex() { return 1; } /** Tämä on apumetodi MethodDescriptors-olioiden luomista varten. * Huomaa, että metodissa oletetaan, että kyse on sellaisista metodeista, * joille ei anneta argumentteja */ public static MethodDescriptor method(String name, String description) throws NoSuchMethodException, SecurityException { Method m = YesNoDialog.class.getMethod(name, new Class[] {}); MethodDescriptor md = new MethodDescriptor(m); md.setShortDescription(description); return md; } /** Tämä metodi palauttaa taulukollisen metodikuvausolioita, jotka kattavat * komponentin tukemat metodit. Tällä tavalla pystytään tarjomaan * hyödyllisiä kuvausmerkkijonoja mutta sen lisäksi kun tehdään näin, * voidaan suodattaa pois komponentin perimät sellaiset metodit - kuten * wait() ja notify() -joita ei haluta näyttää komponenttien * käsittelyohjelmalle. */ public MethodDescriptor[] getMethodDescriptors() { try { MethodDescriptor[] methods = { method("display", "Pop up the dialog; make it visible") }; return methods; } catch (Exception e) { return super.getMethodDescriptors(); } } }