Personalizzazione
dei Bean
L'aspetto
e il comportamento di un Bean possono essere personalizzati
in fase di composizione all'interno di un Tool grafico
abilitato ai Beans. Esistono due strumenti per personalizzare
un Bean: gli Editor di Proprietà e i Customizer.
Gli Editor di proprietà sono componenti grafici
specializzati nell'editing di un particolare tipo di
proprietà: interi, Stringhe, Files... Ogni Editor
di Proprietà viene associato ad un particolare
tipo Java, e il Tool grafico compone automaticamente
un Property Sheet analizzando le proprietà di
un Bean, e ricorrendo agli Editor più adatti
alla circostanza. In Figura 1 si può vedere un
esempio di property sheet, realizzato dal Bean Box:
ogni riga presenta, accanto al nome della proprietà,
il relativo Editor.
Figura
1 - Un Property Sheet generato in modo automatico
a partire dalle
proprietà di un pulsante Bean
Un
Customizer, d'altra parte, è un pannello di controllo
specializzato per un particolare Bean: in questo caso
è il programmatore a decidere cosa mostrare nel
pannello e in quale maniera. Per questa ragione un Customizer
viene associato, grazie al BeanInfo, ad un particolare
Bean e non può, in linea di massima, essere usato
su Bean differenti.
Come
creare un Editor di Proprietà
Un
Editor di Proprietà deve implementare l'interfaccia
PropertyEditor, o in alternativa, estendere la classe
PropertyEditorSupport che fornisce un'implementazione
standard dei metodi dell'interfaccia. L'interfaccia
PropertyEditor dispone di metodi che premettono di specificare
come una proprietà debba essere rappresentata
in un property sheet. Alcuni Editor consistono in uno
strumento direttamente editabile, altri presentano uno
strumento a scelta multipla, come un ComboBox; altri
ancora, per permettere la modifica, aprono un pannello
separato, come nella proprietà 'font' dell'esempio,
che viene modificata grazie al pannello ausiliario FontEditor.
Figura 2 - Il Property Sheet relativo ad un pulsante
Bean.
Si noti il pannello ausiliario FontEditor
Per
fornire il supporto a queste modalità di editing,
bisogna implementare alcuni metodi di PropertyEditor,
in modo che ritornino valori non nulli.
I valori numerici o String possono implementare il metodo
setAsText(String s), che estrae il valore della proprietà
dalla stringa che costituisce il parametro. Questo sistema
permette di inserire una proprietà con un normale
campo di testo.
Gli
Editor standard per le proprietà Color e Font
usano un pannello separato, e ricorrono al Property
Sheet solamente per mostrare l'impostazione corrente.
Clickando sul valore, viene aperto l'Editor vero e proprio.
Per mostrare il valore corrente della proprietà,
è necessario sovrascrivere il metodo isPaintable()
in modo che restituisca true, e sovrascrivere paintValue
in modo che dipinga la proprietà attuale in un
rettangolo all'interno del Property Sheet.
Per
supportare l'Editor di Proprietà personalizzato,
bisogna sovrascrivere altri due metodi della classe
PropertyEditorSupport: supportsCustomEditor, che in
questo caso deve restituire true, e getCustomEditor,
in modo che restituisca un'istanza dell'Editor.
Registrare
gli Editor
I
PropertyEditor vengono associati alle proprietà
attraverso un'associazione esplicita, all'interno del
metodo getPropertyDescriptors() del BeanInfo, con una
chiamata al metodo setPropertyEditorClass(Class propertyEditorClass)
del PropertyDescriptor corrispondente, come avviene
nel Bean Molecule:
PropertyDescriptor
pd =
new PropertyDescriptor("moleculeName",Molecule.class);
pd.setPropertyEditorClass(MoleculeNameEditor.class);
MoleculePropertyEditor.gif:
Fgura 8 - Il Bean Molecule associa alla proprietà
"moleculeName" di un Editor di Proprietà
personalizzato
In
alternativa si può registrare l'Editor con il
seguente metodo statico:
PropertyEditorManager.registerEditor(Class
targetType,Class editorType)
che
richiede come parametri la classe che specifica il tipo
e quella che specifica l'Editor.
Customizers
Con
un Bean Customizer è possibile fornire un controllo
completo su come configurare ed editare un Bean. Un
Customizer è in pratica una piccola applicazione
specializzata nell'editing di un particolare Bean. Ogni
volta che la configurazione di un Bean richiede modalità
troppo sofisticate per il normale processo di creazione
automatica del Property Sheet.
Le
uniche regole a cui ci si deve attenere per realizzare
un Customizator sono:
-
Un Customizator deve estendere la classe Component,
o una delle sue sottoclassi
- Deve
implementare l'interfaccia java.bean.Customizer
- Deve
implementare un costruttore privo di parametri
Per
associare il Customizer al proprio Bean, bisogna sovrascrivere
il meotodo getBeanDescriptor nella classe BeanInfo,
in modo che restituisca un opportuno BeanDescriptor,
il quale a sua volta dovrà restituire la classe
del Customizer alla chiamata del metodo getCustomizerClass.
Serializzazione
Per
rendere serializzabile una classe Bean è di norma
sufficiente implementare l'interfaccia Serializable,
sfruttando così l'Object Serialization di Java.
L'interfaccia Serializable non contiene metodi: essa
viene usata dal compilatore per marcare le classi che
possono essere serializzate. Esistono solo poche regole
per implementare classi Serializable: anzitutto è
necessario dichiarare un costruttore privo di argomenti,
che verrà chiamato quando l'oggetto verrà
ricostruito a partire da un file .ser; in secondo luogo
una classe serializzabile deve definire al suo interno
solamente attributi serializzabili.
Se
si desidera fare in modo che un particolare attributo
non venga salvato al momento della serializzazione,
si può ricorrere al modificatore transient. La
serializzazione standard, inoltre, non salva lo stato
delle variabili static.
Per
tutti i casi in cui la serializzazione standard non
risultasse applicabile, occorre procedere all'implementazione
dell'interfaccia Externalizable, fornendo, attraverso
i metodi readExternal(ObjectInput in) e writeExternal(ObjectOutput
out), delle istruzioni esplicite su come salvare lo
stato di un oggetto su uno stream e come ripristinarlo
in un secondo tempo.
Conclusioni
Con
questo articolo termina il corso introduttivo alla specifica
Java Beans. A più di cinque anni dalla sua introduzione,
Java Beans ha dimostrato di essere una ottima tecnologia
per lo sviluppo di software componibile a basso costo,
come testimoniano numerose success stories. Chi volesse
approfondire il tema, può trovare un ottimo punto
di partenza nel sito della Sun Microsystem, al linsk
http://java.sun.com/products/javabeans
|