Vous êtes sur la page 1sur 18

APNDICE B )

Crear Java beans


Los Java beans son la respuesta de Sun a los controles ActiveX de Microsoft. Los
beans son componentes de cdigo reutilizables escritos en Java que se pueden usar
en distintos entornos de programacin. De hecho, funcionan de un modo muy similar a
los controles ActiveX, pues contienen propiedades, mtodos y eventos para otros
componentes de cdigo. Utilizando los beans, puede crear sus propios "controles"
Java personalizados, como botones que cambian de color cuando se hace clic sobre
ellos o paneles de cotizaciones de bolsa (stock tickers) que obtienen informacin de
Internet.
Los Java beans estn diseados para ser utilizados en herramientas de
preparacin de aplicaciones, que son entornos de programacin que permiten
configurar beans. Una de tales herramientas, el beanbox, se proporciona con en Sun
Bean Development Kit (BDK, o Kit de desarrollo de beans de Sun), que puede
descargarse desde www.java.sun.com e instalarse.
Utilizaremos BDK para disear y utilizar beans. Los beans permiten al usuario
crear sus propias aplicaciones partiendo de componentes preescritos, aadiendo slo
lo que se necesita, y nada ms.

Sun soporta Java beans en el paquete java.beans. Observe las interfaces de dicho
paquete:

* AppletInitializer-- Inicializa applets y est diseado para funcionar con


java.beans.Beans.instantiate.
* BeanInfoEsta interfaz proporciona informacin explcita sobre los mtodos,
propiedades, eventos, etc. de un bean.
*CustomizerUna clase customizer class facilita una completa GUI predefinida
para personalizar un Java bean.
* DesignModeEsta interfaz est destinada a la implementacin o delegacin
de instancias de java.beans.BeanContext con el fin de determinar si un bean est
diseado mediante la propiedad designTime.
* PropertyChangeListenerAdministra eventos PropertyChange si un bean
cambia una propiedad dependiente.
* PropertyEditorProporciona soporte para GUIs que permiten a los usuarios
editar el valor de una propiedad de un tipo dado.
* VetoableChangeListenerAdministra eventos rechazados cuando un bean
modifica una propiedad de limitacin.
* VisibilityIndica si un bean es visible (en algunas circunstancias, un bean
puede ejecutarse en servidores donde no hay disponible un GUI).

Y stas son las clases en java.beans:


* BeanDescriptorProporciona informacin global sobre un bean, incluyendo
sus clases Java, su nombre, etc.
* BeansProporciona algunos mtodos de control de beans de propsito
general.
* EventSetDescriptorDescribe un grupo de eventos activado por un Java
bean.
*FeatureDescriptorLa
clase
base
para
PropertyDescriptor,
EventSetDescriptor, y MethodDescriptor.
* IndexedPropertyDescriptorDescribe una propiedad que acta como una
seleccin.
* IntrospectorFacilita un modo estndar.
* MethodDescriptorDescribe un mtodo especfico para obtener informacin
acerca de las propiedades, los eventos y los mtodos soportados por un Java bean.
* ParameterDescriptorFacilita informacin de cada uno de los parmetros de
los mtodos, adems de la informacin de bajo nivel proporcionada por la clase
java.lang.reflect.Method.
* PropertyChangeEventBusca eventos PropertyChange ejecutados cuando
un bean cambia una propiedad vinculada.
* PropertyChangeSupportUna clase de utilidad que pueden usar los beans
que soportan propiedades de vinculacin.
* PropertyDescriptorDescribe una propiedad que exporta un Java bean.
*PropertyEditorManagerPuede utilizarse para localizar un editor de
propiedades para cualquier nombre dado.
* PropertyEditorSupportUna clase de soporte que ayuda a configurar editores
de propiedades.
* SimpleBeanInfoUna clase que hace ms fcil a los usuarios proporcionar
datos BeanInfo.
* VetoableChangeSupportUna clase de utilidad que puede usarse por los
beans que soportan propiedades de vinculacin.

A continuacin, veremos cmo crear Java beans, desde los ms sencillos hasta
los que soportan propiedades y mtodos y permiten a los usuarios incrustar otros
controles dentro de ellos.

Disear programas utilizando Java beans


"Cmo utilizo Java Beans?" quiere saber el programador novato.
"Utilcelos en herramientas de desarrollo de aplicaciones" le recomiendan, "como
la herramienta beanbox que se proporciona con el Bean Development Kit.
"Mustreme cmo" dice el programador novato.
Despus de haber descargado e instalado Bean Development Kit (BDK), puede
trabajar con los beans del beanbox de BDK. Asumiendo que ha instalado BDK en su
ruta de acceso predeterminada (C:\BDK), puede abrir el beanbox con el archivo
run.bat de la ruta C:\BDK\beanbox. Al ejecutar el archivo bat, se abre el beanbox.

En la caja de herramientas (toolbox) puede ver los beans disponibles. Cuando


aade beans a una aplicacin, aparecern en la ventana del beanbox situados junto a
la toolbox. Tambin puede utilizar la ventana Properties (propiedades) para definir las
propiedades que hayan sido diseadas en un bean, y puede utilizar la ventana
Method Tracer para administrar la ejecucin del mtodo. Se puede dibujar un bean en
el beanbox arrastrando el ratn.
Tambin puede conectar los beans de un beanbox, con el fin de crear una nica
aplicacin utilizando varios beans. Por ejemplo, podra conectar un botn al bean
Juggler para que cuando haga clic sobre este botn, el juggler deje de ejecutarse.
Primero, haga clic sobre el bean Button en el beanbox. La ventana Properties
mostrar las propiedades que puede establecer para este bean, incluyendo su etiqueta
(si desea aadir una nueva etiqueta para este botn, puede hacerlo en la ventana
Properties).
Para conseguir que el botn realice una accin cuando haga clic sobre l,
seleccione el elemento de men Edit|Events|action|actionPerformed. Una vez lo haga,
aparece una lnea roja entre la ubicacin del ratn y el botn. Extienda esa lnea hacia
el bean Juggler y haga clic sobre l. As se conecta el botn y el bean Juggler.
Cuando hace clic sobre el bean Juggler, aparece el cuadro de dilogo Event
target, ofreciendo los mtodos disponibles a los que se puede llamar en el bean
Juggler cuando se hace clic sobre el botn. Para este ejemplo, seleccione el mtodo
stopJuggling para que el juggler deje de ejecutarse; despus, haga clic sobre el
botn OK para cerrar el cuadro de dilogo Event Target.

Eso es todo. Ahora, cuando hace clic sobre el botn del beanbox, el juggler dejar
de ejecutarse.
Enhorabuena! Ya ha conectado dos beans, y por lo tanto, ha creado un nuevo
programa.
Cmo puede ejecutar este programa fuera del beanbox? Lea detenidamente la
seccin siguiente.

Crear applets que utilizan Java beans


"De acuerdo" dice el programador novato. "He diseado un applet con varios
beans y ahora quiero crear un archivo JAR que pretendo pueda utilizar quien lo
necesite. Cmo puedo hacerlo?".
"Es muy fcil" respondo.
"Veamos cmo".

Una vez ha diseado un applet utilizando el beanbox, puede usar el elemento


MakeApplet del men File para crear un archivo JAR que contenga su nuevo applet y
todos los bean que necesite. Cuando seleccione este comando de men, se abre el
cuadro de dilogo Make an Applet. En l hay que fijar el nombre de archivo JAR
predeterminado, myApplet.jar, con a clase applet MyApplet. Al hacer clic sobre el botn
OK, se crea el archivo myApplet.jar.
Nota: si desea utilizar cualquiera de los bean que proporciona BDK en un archivo
applet JAR, tendr que compilarlos primero y asegurarse de que el compilador Java
puede localizar sus archivos de clase. Encontrar estos bean en
C:\BDK\demo\sunw\demo. Adems, necesitar compilar el archivo AppletSupport.java
en C:\BDK\beanbox\sunw\beanbox y asegurarse de nuevo de que el compilador Java
localiza los archivos de clase resultantes.
El archivo myApplet.jar puede utilizarse en navegadores Web y en Sun
appletviewer. Observe un ejemplo de pgina HTML que utilizar en myApplet.jar:
<HTML>
<HEAD>
<TITLE>Ejemplo de applet beans</TITLE>
</HEAD>
<BODY>
<APPLET
CODE=MyApplet.class
WIDTH=200
HEIGHT=200>
<PARAM NAME=archive VALUE="myApplet.jar">
</APPLET>
</BODY>
</HTML>

Ahora ya sabe cmo utilizar Java beans en applets.

Crear un Java bean


Ahora, el programador novato aparece y dice:
"Ya he utilizado Java beans, pero ahora quiero crear mis propios bean".
A lo que le responde "Bueno, no es muy difcil, pero lleva un poco de trabajo".
"S? vamos a comprobarlo!".
Crearemos un sencillo Java bean para ver cmo funciona. Este bean se limitar a
cambiar para mostrarse en color rojo, y mostrar una cuenta del nmero de veces que
se ha hecho clic sobre l.

Situaremos este bean en los directorios de demostracin de BDK, de modo que


hay que crear un directorio llamado bean (C:\BDK\demo\sunw\demo\bean) y
guardaremos los archivos de clase de ese bean en ese directorio. Ejecute el cdigo,
bean.java, indicando que este bean forma parte de un paquete llamado
sunw.demo.bean:

package sunw.demo.bean;
import java.awt.*;
import java.awt.event.*;
.
.
.

Mientras permanece activa la clase actual del bean, utilice la clase Canvas para
dibujar el propio bean (tambin puede usar otras clases, como la clase Panel). El resto
del cdigo es bastane sencillo y se utiliza de manera ordinaria; se aade un
controlador de ratn para registrar los clic del ratn, y se define el tamao del lienzo ( y
por lo tanto, en tamao del bean):

package sunw.demo.bean;
import java.awt.*;
import java.awt.event.*;
public class bean extends Canvas
{
int count;
public bean()
{
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent me) {
clicked();
}
});
count = 0;
setSize(200, 100);
}
.
.
.
}

Finalmente, es necesario implementar el mtodo que administra los clic del ratn,
y dibujar el bean, incluyendo el registro de clics, en el mtodo paint:
package sunw.demo.bean;
import java.awt.*;
import java.awt.event.*;
public class bean extends Canvas
{
int count;
public bean()
{
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent me) {
clicked();
}
});
count = 0;
setSize(200, 100);
}
public void clicked()
{
count++;
repaint();
}
public void paint(Graphics g)
{
Dimension dimension = getSize();
int height = dimension.height;
int width = dimension.width;
g.setColor(new Color(255, 0, 0));
g.fillRect(0, 0, --width, --height);
g.setColor(new Color(0, 0, 0));
g.drawString("Click count = " + count, 50, 50);
}
}

Crear un archivo de manifiesto bean


El programador novato sigue queriendo aprender:
"De acuerdo, he escrito el cdigo para mi nuevo Java bean, pero ahora qu?".
Sonres y dices: "Tienes que empaquetar el bean en un archivo JAR y especificar
que se trata de un bean del archivo de manifiesto del archivo JAR".
"Cuntame ms!" dice el programador novato.

Para convertir un bean en lo que es, debe almacenar los archivos de clase a
utilizar en el archivo JAR, y utilizar un manifiesto para especificar qu clases son
beans. Para ver cmo funciona esto, utilizaremos el bean desarrollado en la seccin
anterior y crearemos un archivo de manifiesto, bean.mft. Situaremos este archivo de
manifiesto en C:\BDK\demo para crear de un modo ms sencillo el archivo JAR (ver la
seccin siguiente).
Para especificar que una clase de un archivo JAR es un Java bean, tiene que
pasar sus atributos Java-Bean a True. El archivo de clase se encuentra en el paquete
sunw.demo.bean, lo que significa que se almacenar en el archivo JAR como
sunw/demo/bean/bean (al igual que UNIX, los archivos JAR utilizan barras inclinadas
como separaciones de directorio). Para especificar que este archivo de clase es un
bean, observe cmo queda el archivo de manifiesto, bean.mft:

Name: sunw/demo/bean/bean.class
Java-Bean: True
En la seccin siguiente crear el archivo JAR para este bean.

Crear un archivo Jar para bean


Ahora, el programador novato dice:
"De acuerdo, ya tengo los archivos de clase para mi nuevo bean, y el archivo de
manifiesto que deseo utilizar. Ahora qu?";
A lo que le contestas "Ahora, ya ests preparado para utilizar una herramienta
jar".
A continuacin, crear el archivo JAR para el bean que ha venido desarrollando
en las dos secciones anteriores. Primero, compile bean.java, que crear dos archivos
de
clase:
bean.class
y
bean$1.class.
Copie
esos
archivos
a
C:\BDK\demo\sunw\demo\bean. A continuacin, site el archivo de manifiesto
desarrollado en la seccin anterior, bean.mft, en C:\BDK\demo. Ya est listo.
Asegrese que se encuentra en el directorio C:\BDK\demo y utilice la herramienta jar
de este modo:

C:\BDK\demo>jar cfm ..\jars\bean.jar bean.mft sunw\demo\bean\*.class


Esto sirve para crear el Nuevo archivo JAR para este bean, bean.jar, y lo
almacena en el directorio C:\BDK\demo\jars, que es donde el beanbox lo buscar. As
es como se instala un bean (situando su archivo JAR en ese directorio).

Utilizar un nuevo bean


Hasta aqu se ha desarrollado un nuevo Java bean y se ha instalado en el
directorio C:\BDK\demo\jars. Cuando abra el beanbox, ver este bean en la lista
toolbox.
Este nuevo Java bean es un buen comienzo, pero ahora podra intentar algo ms,
como aadirle otros controles Java.

Aadir controles a los bean


"No pretendo reinventar la rueda", dice el programador novato.
"Qu quieres decir?" insistimos.
"Bueno, si quiero aadir un botn a mi nuevo Java bean, por qu tengo que
dibujarlo y desarrollarlo por m mismo? Por qu no puedo usar simplemente un botn
Java estndar?
"S que puedes..."
Puede aadir controles Java como botones a sus bean (slo tiene que asegurarse
en relacionar su bean en una clase que sea un contenedor, como la clase Panel).
Vea un ejemplo en el que se ha aadido un botn a un bean para que ste
muestre el nmero de veces que se ha hecho clic sobre l. Comience ubicando este
bean, que en este ejemplo llamaremos botn, a la clase Panel y adalo al paquete
sunw.demo.button (lo que significa que guardar sus archivos de clase en
C:\BDK\demo\sunw\button). Observe cmo crear el panel, modificar su tamao y
aadir un botn:

package sunw.demo.button;
import java.awt.*;
import java.awt.event.*;
public class button extends Panel implements ActionListener
{
int count;
Button button1;
public button()
{
count = 0;
setSize(200, 100);
button1 = new Button("Click me");
button1.addActionListener(this);
add(button1);
}

Se trata de activar el botn incrementando el contador de clics, rediseando el


bean para que muestre el contador y creando el mtodo paint:

package sunw.demo.button;
import java.awt.*;
import java.awt.event.*;
public class button extends Panel implements ActionListener
{
int count;
Button button1;
public button()
{
count = 0;
setSize(200, 100);
button1 = new Button("Click me");
button1.addActionListener(this);
add(button1);
}
public void actionPerformed(ActionEvent e)
{
count++;
repaint();
}
public void paint(Graphics g)
{
Dimension dimension = getSize();
int height = dimension.height;
int w = d.width;
g.setColor(new Color(255, 0, 0));
g.fillRect(0, 0, w-1, h-1);
g.setColor(new Color(0, 0, 0));
g.drawString("Click count = " + count, 50, 50);
}
}

Como puede ver, es bastante sencillo aadir controles Java a un bean.

Asignar propiedades a un bean


"Observo que se pueden ajustar las propiedades de un bean en el beanbox desde
la ventana Properties" dice el programador novato.
"As es" le respondes.
Las propiedades de un bean le permiten configurarlo, ajustar su tamao, color y
cualquier otro aspecto del bean ajustable mediante las propiedades. Existe un
procedimiento formal que debera seguirse para informar a la programacin Java de
las propiedades de los beans: implementarla interfaz BeanInfo. Los campos de esta
interfaz se muestran en la tabla B.1 , y sus mtodos en la tabla B.2.
Tabla B.1 . Campos de la interfaz BeanInfo
Campo
static int ICON_COLOR_16x16

Hace esto
Indica un icono en color de 16 x 16.

static int ICON_COLOR_32x32

Indica un icono en color de 32 x 32.

static int ICON_MONO_16x16

Indica un icono monocromo de 16 x 16.

static int ICON_MONO_32x32

Indica un icono monocromo de 32 x 32

Tabla B.2 . Mtodos de la interfaz BeanInfo


Mtodo
BeanInfo[ ] getAdditionalBeanInfo( )

Hace esto
Devuelve una coleccin arbitraria de otros
objetos BeanInfo.

BeanDescriptor getBeanDescriptor( )

Devuelve el BeanDescriptor del bean.

int getDefaultEventIndex( )

Obtiene el evento predeterminado. Un bean


puede tener un evento predeterminado que
ser el que se utilice con ms asiduidad.

int getDefaultPropertyIndex( )

Obtiene el ndice de la propiedad


predeterminada. Un bean puede tener una
propiedad predeterminada que ser la ms
utilizada para las actualizaciones.

EventSetDescriptor[
getEventSetDescriptors( )
Image getIcon(int iconKind)

] Obtiene EventSetDescriptors del bean.


Devuelve un objeto de imagen que puede
utilizarse para representar al bean en
cuadros de herramientas, barras de
herramientas, etc.

MethodDescriptor[ ] getMethodDescriptors( Obtiene MethodDescriptors del bean.


)
PropertyDescriptor[
getPropertyDescriptors( )

] Genera PropertyDescriptors del bean.

De hecho, la mayora de los beans no implementan la interfaz BeanInfo


directamente. En su lugar, extienden la clase SimpleBeanInfo, que implementa
BeanInfo. Este es el rbol de herencia de SimpleBeanInfo:
java.lang.Object
|____java.beans. SimpleBeanInfo
Encontrar el constructor de la clase SimpleBeanInfo en la tabla B.3. y sus
mtodos en la B.4.
Para describir una propiedad, utilice la clase PropertyDescriptor, derivada de la
clase FeatureDescriptor. Este es el rbol de herencia de la clase FeatureDescriptor:
java.lang.Object
|____java.beans. FeatureDescriptor
Encontrar el constructor de la clase FeatureDescriptor en la tabla B.5. y sus
mtodos en la B.6.
Tabla B.3. Constructor de la clase SimpleBeanInfo
Constructor
SimpleBeanInfo( )

Descripcin
Construye un objeto BeanInfo.

Tabla B.4 . Mtodos de la clase SimpleBeanInfo


Mtodo
BeanInfo[ ] getAdditionalBeanInfo( )

Descripcin
Implementado para indicar que n hay otros
objetos BeanInfo relevantes.

BeanDescriptor getBeanDescriptor( )

Implementado para indicar que no existe


descriptor.

int getDefaultEventIndex( )

Implementado para ocultar la existencia de


un evento predeterminado.

int getDefaultPropertyIndex( )

Implementado para ocultar la existencia de


una propiedad predeterminada.

EventSetDescriptor[
getEventSetDescriptors( )
Image getIcon(int iconKind)

] Implementado para ocultar la existencia de


conjuntos de eventos.
Implementado para negar que no existen
iconos disponibles.

MethodDescriptor[ ] getMethodDescriptors( Implementado para negar la existencia de


)
mtodos.
PropertyDescriptor[
getPropertyDescriptors( )
Image loadImage(String resourceName)

] Implementado para negar la existencia de


propiedades.
Mtodo usado para ayudar en la carga de
imagines de iconos.

Tabla B. 5 . Constructor de la clase FeatureDescriptor


Constructor
FeatureDescriptor( )

Descripcin
Construye un FeatureDescriptor.

Tabla B. 6 . Mtodos de la clase FeatureDescriptor


Mtodo
Enumeration attributeNames( )

Descripcin
Obtiene un detalle de los
predeterminados de este atributo.

String getDisplayName( )

Visualiza el nombre personalizado de este


atributo.

String getName( )

Devuelve el nombre programtico de este


elemento.

String getShortDescription( )

Obtiene la
elemento.

Object getValue(String attributeName)

Recupera un nombre de atributo mediante


esta utilidad.

boolean isExpert( )

Devuelve el valor True en elementos


pensados par usuarios expertos.

boolean isHidden( )

Devuelve el valor True en elementos


pensados para ser usados como una
herramienta.

boolean isPreferred( )

Devuelve el valor True en elementos


particularmente
importantes
para ser
presentados a otros usuarios.

void setDisplayName(String displayName)

Define el nombre visualizado y localizado de


este elemento.

void setExpert(boolean expert)

Define a un elemento como "de uso por


expertos".

void setHidden(boolean hidden)

Define a un elemento como "de uso slo


como herramienta".

void setName(String name)

Establece el nombre de este elemento.

void setPreferred(boolean preferred)

Marca elementos especialmente importantes


para mostrrselos a otros usuarios.

void setShortDescription(String text)

Se puede asociar una breve cadena a modo


de descripcin.

descripcin

breve

void setValue(String attributeName, Object Se puede asociar un atributo.


value)

nombres

de

este

Este es el rbol de herencia de la clase PropertyDescriptor:


java.lang.Object
|____java.beans.FeatureDescriptor
|____java.beans.PropertyDescriptor
Encontrar los constructores de la clase PropertyDescriptor en la tabla B.7. y
sus mtodos en la tabla B. 8.

Tabla B. 7 . Constructores de la clase PropertyDescriptor


Constructor
Descripcin
PropertyDescriptor(String propertyName, Construye un PropertyDescriptor.
Class beanClass)
PropertyDescriptor(String propertyName, Toma el nombre de una propiedad sencilla
Class beanClass, String getterName, adems de nombres de mtodo para leer y
String setterName)
escribir la propiedad.
PropertyDescriptor(String propertyName, Toma el nombre de una propiedad sencilla
Method getter, Method setter)
adems de objetos Method para leer y
escribir la propiedad.
Tabla B. 8 . Mtodos de la clase PropertyDescriptor
Mtodo
Class getPropertyEditorClass( )

Descripcin
Genera una clase PropertyEditor explcita
que ha sido registrada para esta propiedad.

Class getPropertyType( )

Obtiene el objeto Class de la propiedad.

Method getReadMethod( )

Obtiene el mtodo que debera utilizarse


para leer el valor de la propiedad.

Method getWriteMethod( )

Obtiene el mtodo que debera utilizarse


para escribir el valor de la propiedad.

boolean isBound( )

Actualiza las propiedades que activen el


evento PropertyChange.

boolean isConstrained( )

Intenta actualizar las propiedades


activen el evento VetoableChange.

que

void setBound(boolean bound)

Intenta actualizar las propiedades


activen el evento PropertyChange.

que

void setConstrained(boolean constrained)

Intenta actualizar las propiedades


activen el evento VetoableChange.

que

void
setPropertyEditorClass(Class Normalmente, PropertyEditors ser
propertyEditorClass)
localizado mediante
PropertyEditorManager.

void setReadMethod(Method getter)

Establece el mtodo que debera utilizarse


para leer el valor de la propiedad.

void setWriteMethod(Method setter)

Establece el mtodo que debera utilizarse


para escribir el valor de la propiedad.

Ahora, eche un vistazo a un ejemplo donde se implementa una propiedad en un


Java bean. En este caso, se aadir una propiedad llamada filled a la operacin de
registro de clics del ratn desarrollada anteriormente. Se trata de una propiedad
booleana que, cuando est definida en True, asegura que el bean ser rellenado de
color. A este nuevo bean le llamaremos Bean2.
Para mantener un registro de la nueva propiedad filled, aadir una variable
privada booleana de dicho nombre a la clase Bean2:

package sunw.demo.bean2;
import java.awt.*;
import java.awt.event.*;
public class Bean2 extends Canvas
{
private boolean filled;
.
.
.

Inicialice esta propiedad al valor False cuando cree el bean:

package sunw.demo.bean2;
import java.awt.*;
import java.awt.event.*;
public class Bean2 extends Canvas
{
private boolean filled;
int count;
public Bean2()
{
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent me)
{
clicked();
}

});
count = 0;
filled = false;
setSize(200, 100);
}
.
.
.
}

Al implementar una propiedad, Java buscar dos mtodos: getPropertyName y


setPropertyName, donde PropertyName es el nombre de la propiedad. El mtodo
get devuelve el valor actual de la propiedad, que puede ser de cualquier tipo
soportado, mientras el mtodo set toma un argumento de ese tipo, al quie se supne
vamos a vincular dicha propiedad. As es como se implementan los mtodos gtfilled y
setfilled:

package sunw.demo.bean2;
import java.awt.*;
import java.awt.event.*;
public class Bean2 extends Canvas
{
private boolean filled;
int count;
public Bean2()
{
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent me)
{
clicked();
}
});
count = 0;
filled = false;
setSize(200, 100);
}
public void clicked()
{
count++;
repaint();
}

public boolean getfilled()


{
return filled;
}
public void setfilled(boolean flag)
{
this.filled = flag;
repaint();
}
.
.
.
}

Y lo que queda es activar la propiedad filled. Si est en True, el bean debera


rellenarse de color, de modo que este es el cdigo a aadir al mtodo paint:

public void paint(Graphics g)


{
Dimension dimension = getSize();
int height = dimension.height;
int width = dimension.width;
if(filled){
g.setColor(new Color(255, 0, 0));
g.fillRect(0, 0, --width, --height);
}
g.setColor(new Color(0, 0, 0));
g.drawString("Click count = " + count, 50, 50);
}

Ahora es necesario crear una nueva clase, Bean2BeanInfo, que devolver


informacin sobre esta nueva propiedad del bean. Esta clase estar en el mismo
paquete que el propio bean, pero est basada en la clase SimpleBeanInfo:

package sunw.demo.bean2;
import java.beans.*;
public class Bean2BeanInfo extends SimpleBeanInfo
{
.
.
.
}

Para que Java reconozca las propiedades, implemente el mtodo


getPropertyDescriptors, que devuelve una cadena de objetos PropertyDescriptor.
Cada objeto PropertyDescriptor contiene el nombre de una propiedad y apunta hacia
la clase que soporta dicha propiedad. As es como crearemos un objeto
PropertyDescriptor para la propiedad filled:
package sunw.demo.bean2;
import java.beans.*;
public class Bean2BeanInfo extends SimpleBeanInfo
{
public PropertyDescriptor[] getPropertyDescriptors()
{
try {
PropertyDescriptor filled = new
PropertyDescriptor("filled", Bean2.class);
.
.
.
}
catch(Exception e) {}
return null;
}
}

sta es la nica propiedad de Bean2, de modo que aadimos el nuevo objeto


PropertyDescriptor a una secuencia de este modo:

package sunw.demo.bean2;
import java.beans.*;
public class Bean2BeanInfo extends SimpleBeanInfo
{
public PropertyDescriptor[] getPropertyDescriptors()
{
try {
PropertyDescriptor filled = new
PropertyDescriptor("filled", Bean2.class);
PropertyDescriptor propertydescriptor[] = {filled};
return propertydescriptor;
}
catch(Exception e) {}
return null;
}
}

Una vez compilada esta nueva clase, (Bean2BeanInfo.java), se sita


Bean2BeanInfo.class en C:\BDK\demo\sunw\demo\bean2, junto con las clases que se
creqron al compilar Bean2.java. Ahora es necesario un nuevo archivo de manifiesto
que incluya la clase Bean2BeanInfo. Este es el aspecto de bean2.mft:

Name: sunw/demo/bean2/Bean2BeanInfo.class
Name: sunw/demo/bean2/Bean2.class
Java-Bean: True

A continuacin, site este nuevo manifiesto en C:\BDK\demo. Finalmente, as es


como se ha creado el nuevo archivo Bean2.jar y se ha instalado:
C:\BDK\demo>jar cfm ..\jars\bean2.jar bean2.mft sunw\demo\bean2\*.class
Ahora, al iniciar el beanbox y aadir un Nuevo Bean2 al beanbox, la nueva
propiedad filled aparecer en la ventana Properties. Si activa el valor True para filled,
el bean ser rellenado de color.

Asignar un icono a un bean


Es posible que haya observado que algunos beans muestran iconos en el beanbox.
Puede aadir sus propios iconos a los beans (todo lo que tiene que hacer es agregar
un mtodo getIcon a la clase BeanInfo). Observe cmo implementar este mtodo y de
qu manera administrar todas las posibilidades (iconos monocromo o en color, y de
16x16 32x32 pxels):

public java.awt.Image getIcon(int iconKind)


{
if (iconKind == BeanInfo.ICON_MONO_16x16 ||
iconKind == BeanInfo.ICON_COLOR_16x16 ) {
java.awt.Image image = loadImage("Icon16.gif");
return image;
}
if (iconKind == BeanInfo.ICON_MONO_32x32 ||
iconKind == BeanInfo.ICON_COLOR_32x32 ) {
java.awt.Image image = loadImage("Icon32.gif");
return image;
}
return null;
}

Vous aimerez peut-être aussi