Download Programación en Java2 - Universidad de La Serena
Document related concepts
no text concepts found
Transcript
Prof. Dr. Eric Jeltsch F. Programación en Java2 Cap 16:JavaBeans Capitulo 16. JavaBeans La idea es ahora utilizar las componentes de Java, la pregunta que surge entonces es como poder tener un almacén de recursos que sea capaz de responder a estos requerimientos. En parte esta inquietud la soluciona JavaBeans que es una herramienta en el contexto de ensamblaje de componentes de software o en el desarrollo de software basados en componentes. La idea es reutilizar los componentes de software de Java, a menudo estos son componentes GUI que están visibles, en resumen es el modelo de componentes de software que empezara VisualBasic y Delphi, que son modelos que se centran en el uso de los componentes y contenedores. Para entender mejor estos términos digamos que los componentes son entidades de software especializadas que pueden ser reproducidas, personalizadas e insertadas en aplicaciones y applets, y los contenedores son simplemente componentes que contienen otros componentes, estos últimos se usan como estructura para organizar los componentes de una manera visual, estas herramientas de desarrollo visual permiten arrastrar y soltar, cambiar de tamaño y colocar los componentes en un contenedor. Los componentes y contenedores de JavaBeans son similares en gran medida a las clases Component y Container de l AWT. En resumen estas capacidades ofrecen a los programadores de software la posibilidad de reutilñizar al máximo los componentes de software a la hora de crear o mejorar el existente. La idea en este capítulo es saber como utilizar el BDK(herramientas de desarrollo de JavaBeans)para crear nuestros propios componentes o mejorar algunos otros. Para ello deberá descargar el BDK1.1 desde http://www.java.sun.com/beans/index.html . BeanBox El BDK proporciona varios ejemplos de componentes de software de Java, lecciones y documentos de apoyo, pero lo más importante es la herramienta BeanBox, que se puede usar para mostrar, personalizar y probar los componentes de software que se vayan desarrollando. Además BDK, sirve como una herramienta primitiva de desarrollo visual. Para ver como trabaja vayamos a la distribución BDK1.1 que contiene una serie de archivos, se supone que Ud. habrá podido instalarlo de la forma que lo recomienda la distribución. 1 Area de Computación , Universidad de La Serena Prof. Dr. Eric Jeltsch F. Programación en Java2 Cap 16:JavaBeans El archivo se ve de esta manera, en donde beanbox tiene un archivo ejecutable Al ingresar al directorio \beanbox podrá ver los siguientes archivos, si Ud. nota existe un archivo ejecutable llamado run. 2 Area de Computación , Universidad de La Serena Prof. Dr. Eric Jeltsch F. Programación en Java2 Cap 16:JavaBeans Al ejecutarlo podra ver que se despliegan 4 interfaces gráficas asociada a distintos eventos, que luego explicaremos. 3 Area de Computación , Universidad de La Serena Prof. Dr. Eric Jeltsch F. Programación en Java2 Cap 16:JavaBeans La ventana ToolBox contiene una lista de los componentes de software de Java que están a su disposición, estos componentes se pueden usar para construir otros componentes más complejos, aplicaciones de Java o applets. Las herramientas de desarrollo visual de software, como BeanBox, permiten que los componentes de software estén visualmente organizados colocándolos en la posición deseada. Si Ud. pulsa Juggler de la ventana ToolBox y luego pulse en el BeanBox; el componente Juggler se depositará en el BeanBox, haciéndo malabares. Observar que la Properties Juggler se actualiza para mostrar las propiedades del componente Juggler. Puede personalizar éste componente cambiando sus propiedades, por ejemplo note como disminuye la intensidad de los malabares para cuando animationRate es 500. Ahora con el fin de formar un componente propio añadiremos un par de botones al BeanBox, para ello seleccionamos un componente OurButton del ToolBox y lo colocamos en BeanBox, como se muestra, generando un botón con label press. Utilicemos ahora la hoja de propiedades para cambiar su etiqueta a comenzar 4 Area de Computación , Universidad de La Serena Prof. Dr. Eric Jeltsch F. Programación en Java2 Cap 16:JavaBeans Si cambia la propiedad label press a label comenzar, Ud. verá en BeanBox el botón con el nuevo rótulo. Ahora cree un segundo botón, llamado terminar, haciéndo el mismo procedimiento anterior, con la diferencia que ahora en las Properties le alteramos los colores. 5 Area de Computación , Universidad de La Serena Prof. Dr. Eric Jeltsch F. Programación en Java2 Cap 16:JavaBeans Ahora veremos como hacer efectivo que estos botones habiliten al malabarista a comenzar y terminar el malabarismo según presionemos el botón correspondiente. Para hacerlo necesitamos conectar un manipulador de eventos, se recuerdan de actionPerformed(), bien este será el manipulador de evento del botón comenzar al método startJuggling() del componente Juggler y el manipulador de eventos del botón terminar al método stopJuggling() del componente Juggler. 6 Area de Computación , Universidad de La Serena Prof. Dr. Eric Jeltsch F. Programación en Java2 Cap 16:JavaBeans Tras de haber escogido el boton comenzar, y luego ir a Edit | Events | action | actionPerformed de la barra de menú de BeanBox, como se muestra en la figura anterior, le aparece una línea roja que procede del botón comenzar, esta línea representa una conexión lógica desde el manipulador de eventos actionPerformed() del botón comenzar. Pulse el componente Juggler para cerrar la conexión. Al hacerlo aparecerá el EventTargetDialog box que se ve así Este cuadro de diálogo lista los métodos de interfaz del componente Juggler. Seleccione startJuggling, pues al hacerlo estará conectando la pulsación del botón comenzar al método startJuggling() a través del manipulador de eventos actionPerformed() del componente de botón comenzar. El cuadro EventTargetDialog le informa que está compilando una clase de adaptador, el BeanBox crea una clase especial, que se denomina clase adaptador, para conectar la pulsación del botón con el método startJuggling() del Juggler, éste debe compilar esta clase y agregarla al BeanBox que está corriendo para admitir esta conexión. Analogamente lo podrá hacer con el botón terminar, pero esta vez deberá conectarlo a stopJuggling(). Lista la animación !! 7 Area de Computación , Universidad de La Serena Prof. Dr. Eric Jeltsch F. Programación en Java2 Cap 16:JavaBeans Notar que no ha escrito ni una sola línea de código y ya tiene una animación, éste es en parte el poder que tiene el desarrollo de software basados en componentes. Con un buen conjunto de componentes de software, puede ensamblar rápida y fácilmente una gran variedad de aplicaciones. En la aplicación anterior, hemos aprendido a utilizar los componentes OurButton y Juggler. El ToolBox que trae BeanBox incluye 16 componentes de software. Recomendamos que los utilice para ir ganando confianza en la forma de generar nuevos componentes a partir de los ya existentes. Ahora damos una breve descripción de los componentes que vienen en el ToolBox. BlueButton, un botón azul sencillo, que cuenta con propiedades para fondo, frente, etiqueta y fuente. OrangeButton, analogo al anterior. OurButton, un botón gris que tiene propiedades de fuentes adicionales. ExplicitButton, un botón gris sencillo que cuenta con propiedades para fondo, frente, etiqueta y fuente. EventMonitor, un área de texto que se utiliza para visualizar los eventos a medida que estos se van produciendo. JellyBean, una componente particular. Juggler, nuestro malabarista. TickTock, un contador de intervalos. Voter, un componente que mantiene un estado si o no. ChangeReporter, un campo de texto. Molecule, un campo gráfico que muestra imágenes 3D de moléculas. QuoteMonitor, un componente que muestra las cotizaciones de Bolsa que se reciben de un servidor de cotizaciones. JDBC SELECT, una interfaz SQL de una BD. SorterBean, animación de una burbuja. BridgeTester, componente que se utiliza para verificar puentes de componentes de software(uso del InfoBus). TransitionalBean, un botón que cambia los colores. El BeanBox es una herramienta de diseño visual bastante elemental, pero ofrece características importantes del desarrollo visual de software basados en componentes. Así como estas existen otras herramientas comerciales, por ejemplo, Java Studio (Sun), Java Workshop2.0(Sun), Visual J++(Microsoft), Forte(Sun, por ahora gratuito), Jbuilder(Borland). Formas de salvar los JavaBean El BeanBox proporciona varias formas para salvar los diseños incluyendo: a) almacenar el diseño para ser cargado más tarde en el BeanBox(archivo Menu | Save...menuitem) b) almacenar el diseño como un Java applet(archivo Menu | MakeApplet...menuitem. c) Existe incluso una tercera opción SerializeComponent, que puede ser usada para ayudar a crear un nuevo JavaBean. Para más información remitase a doc de la distribución BDK1.1. 8 Area de Computación , Universidad de La Serena Prof. Dr. Eric Jeltsch F. Programación en Java2 Cap 16:JavaBeans Para salvar las aplicaciones según a), seleccionamos del menu File y Save..menuitem, a lo que se desplegará un cuadro de diálogo llamado Save BeanBox File. Como lo muestra la figura siguiente. Esta opción usa un objeto serialization para salvar el beans en el diseño, hemos llamado a nuestro archivo miJuggler.ser (hemos usado la extensión .ser para indicar que el diseño es un archivo serializado), el que por defecto será guardado en el directorio beanbox de la distribución BDK1.1, si lo desea guardar en otra parte, use el dialogo para cambiarlo antes de pulsar Save. Para verificar, que lo ha hecho bien vaya a File de BeanBox, pulse Load y nombre de su archivo, a lo que se visualizará en BeanBox automáticamente lo que Ud. desea guardar. Una vez verificado pulse en File, clear. En estos instantes el beans miJuggler es un applet, y su actuación es similar a cuando abrimos un applet desde un Browser. Para salvarlo como applet, seleccionamos MakeApplet, a lo que se despliega lo siguiente El nombre por defecto es MyApplet, pero evidentemente Ud. tiene su propio nombre, entonces pulse el botón Choose JAR File...para desplegar el siguiente diálogo. 9 Area de Computación , Universidad de La Serena Prof. Dr. Eric Jeltsch F. Programación en Java2 Cap 16:JavaBeans Y procede a poner el nombre que desea, para mi miJuggler.jar es apropiado. Luego de pulsar el botón OK, verá Como Ud. ve JavaBeans son almacenados en archivos JAR, Ud. puede cambiar el directorio en el cual los archivos han sido almacenados. Por defecto, los applet son almacenados en el directorio BDK1.1\beanbox\tmp\myApplet Si trata de ejecutar miAni.html que es otra animación a través de TextPad le sale el siguiente mensaje: <html> <head> <title>Test page for MiAni as an APPLET</Title> </head> <body> 10 Area de Computación , Universidad de La Serena Prof. Dr. Eric Jeltsch F. Programación en Java2 Cap 16:JavaBeans <h1>Test for MiAni as an APPLET</h1> This is an example of the use of the generated MiAni1 applet. Notice the Applet tag requires several archives, one per JAR used in building the Applet <p> <applet archive="./miAni.jar,./support.jar ,./juggler.jar ,./buttons.jar " /* son las propiedades del archivo del tag <applet>*/ code="MiAni" /* especifica el nombre de la clase applet con la que comenzará la ejecución de nuestro applet*/ width=382 height=513 > Trouble instantiating applet MiAni!! </applet> para visualizar el applet, vaya a C:\BDK1.1\beanbox\tmp\myApplet e inserte el comando >appletviewer miAni.html Desarrollo de Componentes de Software Es el momento de aprender a desarrollar nuestros propios componentes de software, para tal efecto debe saber que JDK1.2 presenta el paquete java.beans.beancontext, que ofrece las clases e interfaces que sirven para hacer que los componentes de software accedan a su entorno de ejecución, al que se llama contexto de componente de software. En primer lugar, pediremos un marcador sencillo llamado Gauge y otro lienzo llamado Tcanvas. Examine cada uno de ellos. Gauge Asi se ve el BeanBox y ToolBox, luego de haber cargado los archivos Gauge.jar y TCanvas.jar en el directorio jars de la distribución BDK1.1 11 Area de Computación , Universidad de La Serena Prof. Dr. Eric Jeltsch F. Programación en Java2 Cap 16:JavaBeans Ud. notará que se cambio el sentido del “campo de texto” y se ensancho su magnitud, a eso me refiero con practicar con los beans. A través de los cambios que puede realizar sobre Properties Gauge, podrá darse cuenta de otras “gracias” que Gauge posee. Por ejemplo, cambie currentValue a 0.7, horizontal a false, height a 200, gaugeColor a verde(green) y valueColor a naranja(orange), a lo que se obtiene, 12 Area de Computación , Universidad de La Serena Prof. Dr. Eric Jeltsch F. Programación en Java2 Cap 16:JavaBeans Lo que debemos observar es que en el código fuente del componente de software Gauge este la línea java.io.Serializable. Todas las clases de componentes de software implementan Serializable o Externalizable. Estas interfaces admiten la persistencia en los componentes de software, permitiendo que éstos se lean y se escriban, almacenándose de forma permanente(por ejemplo, en disco duro). Cuando un componente de software implementa Serializable, la serialización de los datos de un componente los ejecuta Java automáticamente, lo cual implica que no tiene que figurarse como escribir objetos en los flujos o cómo leerlos en él. Por otra parte un componente de software es Externalizable, el componente es el que ejecuta toda la serialización. Serializable es una de las más fácil, basta con agregar Serializable a la cláusula implements de la clase y la serialización quedará admitida automáticamente. El icono en ToolBox es originado por el archivo GaugeBeanInfo para que pueda desplegarse el icono, es decir implementa solo el método getIcon(), vea el archivo. Por otra parte el archivo Gauge.mf se usa para construir el archivo Gauge.jar. Identifica el archivo Gauge.class como un componente de software. Para crear el archivo Gauge.jar, utilizar >jar cfm Gauge.jar Gauge.mf Gauge*.class gauge*.gif De la misma manera, habrá notado que TCanvas se encuentra en ToolBox. 13 Area de Computación , Universidad de La Serena Prof. Dr. Eric Jeltsch F. Programación en Java2 Cap 16:JavaBeans Para distinguirlo del resto del BeanBox y mostrar como funcionan sus propiedades veamos los siguientes cambios: text a Esto es una prueba, leftMargin y topMargin a 20, font a 14 pt(pulse la propiedad font para abrir el cuadro de dialogo FontEditor), y background a amarillo. Asi se ven los efectos, tras los cambios. 14 Area de Computación , Universidad de La Serena Prof. Dr. Eric Jeltsch F. Programación en Java2 Cap 16:JavaBeans Ahora que se ha familiarizado con un par de componentes de software, vamos a utilizarlos en un applet. El applet se llama Test, el cual emplea ambos componentes de software Gauge y TCanvas. import java.applet.*; import java.awt.*; import java.awt.event.*; public class Test extends Applet { TCanv pregunta = new TCanv(); Gauge miGauge = new Gauge(); String labels[]={" A "," B "," C "," Button button[] = new Button[labels.length]; TCanv estatus=new TCanv(); int preguntas = 0; int respCorrecta = 0; int respActual; D "}; public void init() { Panel mainPanel = new Panel(); Panel gaugePanel = new Panel(); Panel bottomPanel = new Panel(); Panel buttons = new Panel(); pregunta.setLeftMargin(20); 15 Area de Computación , Universidad de La Serena Prof. Dr. Eric Jeltsch F. Programación en Java2 Cap 16:JavaBeans pregunta.setTopMargin(20); miGauge.setHorizontal(false); miGauge.setMaxValue(100.0); miGauge.setCurrentValue(100.0); miGauge.setHeight(200); miGauge.setWidth(20); estatus.setHeight(20); estatus.setWidth(200); estatus.setTopMargin(0); estatus.setBorder(false); mainPanel.setLayout(new BorderLayout()); mainPanel.add("Center",pregunta); gaugePanel.add(new Label("Marcador: (0-100%)")); gaugePanel.add(miGauge); mainPanel.add("East",gaugePanel); bottomPanel.setLayout(new BorderLayout()); for(int i=0;i<labels.length;++i){ button[i] = new Button(labels[i]); button[i].addActionListener(new BotonTrato()); buttons.add(button[i]); } buttons.add(estatus); bottomPanel.add("Center",buttons); mainPanel.add("South",bottomPanel); add(mainPanel); } public void start(){ displayPregunta(); } void displayPregunta() { pregunta.setText(nextPregunta()); if(preguntas==0) estatus.setText("Click la respuesta correcta."); else{ String s="Preguntas: "+String.valueOf(preguntas); s+=" Correcta: "+String.valueOf(respCorrecta); estatus.setText(s); } } String nextPregunta() { String q = "Cuánto es "; String operand[] = {"+","-","*"}; int op1 = randomInt(100); int op2 = randomInt(100); int op = randomInt(3); String operador = operand[op]; int resp=0; switch(op){ 16 Area de Computación , Universidad de La Serena Prof. Dr. Eric Jeltsch F. Programación en Java2 Cap 16:JavaBeans case 0: resp=op1+op2; break; case 1: resp=op1-op2; break; case 2: resp=op1*op2; break; } respActual=randomInt(labels.length); q+=String.valueOf(op1)+operador+String.valueOf(op2)+"?| "; for(int i=0;i<labels.length;++i){ q+="|"+labels[i]; if(i==respActual) q+=String.valueOf(resp); else{ int delta = randomInt(10); if(delta==0) delta=1; int add = randomInt(2); if(add==1) q+=String.valueOf(resp+delta); else q+=String.valueOf(resp-delta); } } return q; } int randomInt(int max){ int r = (int) (max*Math.random()); r %= max; return r; } void respuesta(int i){ ++preguntas; if(i==respActual){ ++respCorrecta; displayPregunta(); }else{ estatus.setText("Trate nuevamente!"); } double marcador = (double) respCorrecta/(double) preguntas; miGauge.setCurrentValue(marcador*100.0); miGauge.repaint(); pregunta.repaint(); estatus.repaint(); } class BotonTrato implements ActionListener { public void actionPerformed(ActionEvent e){ String s = e.getActionCommand(); for(int i=0;i<labels.length;++i){ 17 Area de Computación , Universidad de La Serena Prof. Dr. Eric Jeltsch F. Programación en Java2 Cap 16:JavaBeans if(labels[i].equals(s)){ respuesta(i); break; } } } } } Las preguntas se presentan en forma aleatoria con el objeto de reducir la probabilidad de que una pregunta se formule 2 veces. Cuando se pulsa en una respuesta, las componentes de software de Tcanvas se actualizan con nuevas preguntas e información del estado. El componente Gauge actualiza el resultado de las respuestas del usuario. Tcanvas y Gauge han sido importadas para ver su aplicación en el contexto del archivo test.java. 18 Area de Computación , Universidad de La Serena