Facultad de Ingeniería Industrial Departamento de Ingeniería Informática RESPONSABLES DEL PROYECTO : Ing. Jorge L. Sandoval Rivera. Ing. Pedro Criollo Gonzáles Índice Página Resumen Introducción Materiales y métodos Resultados y discusión Conclusiones y recomendaciones Esquema del contenido Capitulo I: Terminología y Entornos de Desarrollo Integrado 10 1.- Terminología 1.1. JRE ("Java Runtime Environment") 1.2. JDK,SDK,J2SE 1.3. J2EE (Java 2 Enterprise Edition) 1.4. Otros detalles de Importancia al trabajar con estos ambientes. 1.4.1. CLASSPATH 1.4.2. JARS 1.4.3. Recomendación para JARS y CLASSPATH 2. Entornos de Desarrollo Integrado 2.1. IDE's del Lenguaje de Programación Java 2.1.1. JCreator 2.1.2. Eclipse 2.1.3. NetBeans 2.1.4. JDeveloper Capitulo II: IDE ORACLE JDEVELOPER 2.1. Historia 2.2 Características 2.3. Ventajas 2.4. Interfaz principal 19 Capitulo III: Conociendo el Entorno de JDeveloper 24 3.1. Introducción al editor gráfico 3.2. Creando una primera aplicación 3.2.1. Iniciar Jdeveloper 3.2.2. Crear la aplicación 3.2.3. Crear una clase 3.3. Explorando el editor de código 3.3.1. Plantillas de código 3.4. Compilar y ejecutar una clase 3.5. Trabajando con el asistente de código (code assist) 3.6. Refactoring code 3.7. Ver Historial de Modificación de código 3.8. Navegando a través del código 3.9. Depuración de programas Capitulo IV: Desarrollo de Aplicaciones 4.1. Desarrollo de una aplicación de escritorio 4.2. Aplicación Conversión de temperaturas 4.3. Creando Tablas 4.4. Base de Datos 4.4.1. Conexión a la base de datos 4.4.2. Creando interfaz de acceso a la base de datos BIBLIOGRAFIA ANEXOS 62 Resumen El presente manual contiene información sobre el manejo del entorno de desarrollo integrado Oracle JDeveloper con el lenguaje de programación orientado a objetos java. Aquí podemos encontrar la descripción de cómo trabajar en este IDE, así como una descripción del contexto de este entorno. Para poder utilizar este entorno de desarrollo se debe tener conocimientos del lenguaje de programación java tanto a nivel de consola como en entorno gráfico y así poder desarrollar aplicaciones de propósito general con java y applets. Se ha dado un enfoque principalmente al uso del IDE Oracle JDeveloper, a pesar que se utiliza con el lenguaje de programación java, el trabajo esta orientado básicamente a utilizar java dentro de este entorno de desarrollo, explotar las ventajas del editor de texto, los navegadores tanto de aplicaciones como de base de datos, la paleta de componentes, su herramienta de dibujo que traduce los objetos en código de java, El manual esta diseñado de tal manera que el aprendizaje del lenguaje de programación java con este entorno de desarrollado integrado sea sencilla y esta estructurado de la siguiente manera: El primer capitulo, presenta los aspectos básicos y necesarios que permitan al alumno entender el siguiente capitulo. Aspectos como la terminología que diferencian los diferentes programas o software como JRE, JDK, J2SE, SDK, JDEE, JARS, etc. También la definición de un IDE, los diferentes IDEs que existen para diferentes lenguajes de programación incluido java. El segundo capitulo esta enfocado básicamente a describir el software JDeveloper, la historia, características, ventajas y la interfaz principal de este programa. El tercer capitulo esta diseñado para explorar las ventajas de este IDE, se presentan ejemplos de aplicaciones sobre las diversas herramientas como el editor de código, plantillas de código, renombrar elementos de los programas, navegar por el código, etc. El cuarto capitulo incluye el desarrollo de aplicaciones desde una aplicación básica hasta aplicaciones con base de datos, tratando de mostrar todas las bondades del entorno de desarrollado integrado Oracle Jdeveloper. INTRODUCCIÓN El presente trabajo de investigación enfoca el desarrollo de aplicaciones de escritorio en el lenguaje de programación java, utilizando el IDE Oracle JDeveloper 10.1.3.5. Todo usuario desarrollador de aplicaciones de escritorio en el lenguaje de programación orientado a objetos java, conoce que el lenguaje de programación java no cuenta con un editor de texto para poder escribir los programas fuentes, en todo caso tendría que usar programas accesorios del sistema operativo que utilice, para el caso nuestro es block de notas en la plataforma Windows XP. Es ésta una de las tantas razones por la cual los usuarios desarrolladores optan por elegir un Entorno de Desarrollado Integrado (IDE) de los muchos que existen en el mercado informático. Existen IDEs para los diferentes usuarios que pueden realizar aplicaciones caseras, empresariales, profesionales, etc. Para nuestro caso el IDE elegido es Oracle JDeveloper 10.1.3.5. , que es un software libre y cuenta con un entorno de trabajo multidisciplinario, esto es desarrollar aplicaciones: de escritorio, para servidor, para móviles, para clientes de una red, enlaces con base de datos, etc. Esto lo hace un IDE competente, razón por la cual se eligió para aplicarlo en la parte práctica de los cursos de programación de computadoras, especialmente en el curso de Programación II del plan de estudios de la Escuela de Ingeniería Informática de la Facultad de Ingeniería Industrial de la Universidad Nacional de Piura. En el curso de Programación II, se imparten conocimientos para desarrollar aplicaciones con Interfaz Grafica de Usuario (GUI) con el lenguaje de programación orientado a objetos java y aquí el IDE Oracle JDeveloper proporciona una herramienta gráfica para poder dibujar la Interfaz Grafica de Usuario de una aplicación de escritorio así como todos los componentes necesarios, La ventaja esta en el hecho que al dibujar los diferentes objetos el IDE genera automáticamente la estructura del programa así como las instrucciones (código) que son resultado de los objetos incluidos en la interfaz principal. Materiales y Métodos Materiales Los materiales que se han empleado los podemos dividir en dos grupos: Hardware y Software Hardware: · Una computadora para la instalación del programa JDeveloper, el desarrollo y prueba de las clases que conforman las diferentes aplicaciones proporcionadas como ejemplos. · Impresora Software: · Sistema operativo Windows XP · Lenguaje de Programación Java o Kit de herramientas: J2DK1.5.0_08, JRE1.5.0_08 o Entorno de Desarrollo de aplicaciones (IDE) Oracle JDeveloper · Office 2007 · Navegador Internet Explorer 7.0 · Navegador FireFox Métodos Se ha empleado el método de investigación analítico – deductivo. Primero se realizó una recopilación de información para conocer todas las clases que conforman el paquete gráfico de java, determinar la jerarquía de las clases basadas en componentes y contenedores, el soporte teórico que va a permitir realizar aplicaciones robustas y seguras. A continuación se enfocó y analizó el problema desde el punto de vista de la facilidad que debe tener el alumno en la secuencia de aprendizaje del lenguaje de programación java con la herramienta integrada de desarrollo Oracle JDeveloper. Resultados y Discusión Considerando los resultados de las pruebas realizadas al utilizar el IDE JDeveloper a alumnos que anteriormente habían utilizado el IDE JCreator, se concluye que este software proporciona al alumno ahorro de tiempo, al escribir considerablemente menor líneas de código ya que el software tiene herramientas como plantillas de código que permiten insertar código predefinido en el programa a desarrollar así como documentar el programa a través de javadoc, modificar código a través de refactoring code, llevar un historial de las acciones realizadas y principalmente su herramienta de dibujo de objetos que permiten automatizar la generación de código en el programa. Las pruebas realizadas consisten en solicitarles a través del profesor la creación de programas en el lenguaje de programación java utilizando diferentes entornos integrados de desarrollo como JCreator, JDeveloper, NetBeans. Entonces los alumnos podrán apreciar las ventajas de cada entorno de desarrollo y de acuerdo a las pruebas JDeveloper esta entre los IDES preferidos. También se ha podido demostrar la facilidad con que se puede generar código a partir de los modelos o diagramas de clases que permite el IDE diseñar. También la facilidad para la generación de una interfaz grafica a partir de los campos de una tabla de una base de datos para interactuar la aplicación con el usuario. Asimismo se puede comprobar la facilidad de crear programas que se ejecuten en un navegador del lado del cliente como son los applets, así como la generación de JARS, que permiten empaquetar un grupo de clases. Igualmente se puede comprobar la facilidad de ubicar los archivos que componen el proyecto de una aplicación, al crear el IDE un grupo de carpetas donde se almacenan los diferentes recursos entre ellas tenemos: src (source) para agrupar las clases del programa fuente y classes para agrupar las clases compiladas y que se interpretaran al momento de la ejecución del programa. Conclusiones y Recomendaciones Conclusiones: · Es factible demostrar como se reduce la complejidad de la programación gráfica en java teniendo disponible un entorno de desarrollado integrado como JDeveloper que proporciona las facilidades para escribir los programas respectivos. · El entorno de desarrollado integrado es un software libre y que nos proporciona todas las herramientas complementarias para desarrollar aplicaciones empresariales tanto para escritorio como para un entorno de red. · Cualquier usuario con una computadora con los recursos básicos en procesador, memoria RAM y disco duro entre los principales recursos, puede copiar y descomprimir este software que se encuentra en forma gratuita en la red Internet, esto significa que demanda de grandes recursos de hardware tal como lo hacen otros entornos de desarrollo y esto va a perjudicar el rendimiento del equipo. · Este IDE, permite diseñar aplicaciones con el patrón Modelo-Vista-Controlador, creando la estructura necesaria para albergar cada elemento del patrón en forma ordenada. · Este IDE también nos da la facilidad de agregar librerías de java, que no estén incluidas como parte de su API y que lo requieran algunas aplicaciones como por ejemplo al interactuar con una base de datos se necesita agregar el driver o controlador del gestor de base de datos con el que se va a interactuar, al entorno de desarrollo para tener completos los elementos que necesita la aplicación. Recomendaciones: · Se puede seguir apoyando el aprendizaje de los alumnos del curso de programación con java de la institución anteriormente mencionada, si se proporciona información agrupada en un manual de otros temas que este IDE como es el JDeveloper puede facilitar como es la creación de Servlets, JSP, Métodos Remotos, que este trabajo no incluye en sus objetivos. · Inculcar en los usuarios de este lenguaje como son los alumnos de la Escuela de Ingeniería Informática de la Facultad de Ingeniería Industrial de la Universidad Nacional de Piura que al iniciar el aprendizaje del diseño de programas con java es necesario utilizar inicialmente las herramientas donde el alumno debe aprender a crear la estructura del programa de tal manera que al utilizar el IDE debe comprender la estructura para que a partir de ahí realizar las modificaciones al programa para adaptarlo a sus necesidades · Reproducir este manual para que de alguna manera ponerlo a disposición de los alumnos de programación gráfica con java y así facilitar el aprendizaje del mismo. 10 CAPITULO I: TERMINOLOGIA Y ENTORNOS DE DESARROLLO INTEGRADO (IDE) 1.- Terminología Además de la amplia terminología individual que existe en Java, existen diversos componentes ("KITS") que agrupan estas funcionalidades, y son estos componentes con los que se trabaja "día a día" en proyectos Java. 1.1. JRE ("Java Runtime Environment") Como su nombre lo indica este ambiente ("KIT") es utilizado solo para ejecutar ("Runtime") programas en Java. Esta situación se da cuando empresas de Software diseñan alguna interfase gráfica o aplicación en Java para su producto. Cabe mencionar que muchos productos que utilizan Java para su interfase gráfica o instalación ya incluyen un JRE para evitarle la molestia de instalarlo, uno de estos es Oracle ; sin embargo, muchos productos requieren que usted posea este ambiente, si se pregunta: Porque me hacen que obtenga forzosamente este JRE ? Una de las principales razones es costo ya que las empresas deben pagar a Sun por distribuir este ambiente en su producto. 1.2. JDK,SDK,J2SE "Java Development Kit"(JDK),"Standard Development Kit" (SDK) y "Java 2 Standard Edition" (J2SE) son nombres para el mismo componente e incluyen: El API de Java, el JRE ( JVM ), compilador de Java y otras funcionalidades definidas por Sun. Si no esta familiarizado programando en Java, el API de Java es un conjunto de clases que es utilizado para generar programas básicos en el lenguaje; utilizando una analogía, estas clases tienen la misma funcionalidad que las funciones|clases estándar utilizadas en otros lenguajes C,C++, Perl (Esto es precisamente la definición de API ("Application Programming Interface")). Partiendo de estas clases (API de Java) se generan TODOS los programas, interfaces y elementos programados en Java, inclusive a partir de estas clases usted puede definir otras clases especificas que serán utilizadas por su programa o producto. Una vez que defina sus programas|clases en Java aún es 11 necesario compilarlas para producir lo que es denominado byte-code o class files (este byte-code puede ser comparado con un binario) , y es este byte-code el que interpreta el JRE("Java Runtime Environment").Este byte-code es el que directamente ofrece la interoperabilidad de Java o el afamado "Write once run everywhere"="Escríbalo una vez ejecútelo en todos lados". Es una cantidad razonable de trabajo la que realiza el JDK|SDK, y por el hecho de incluir tanto el compilador,API Java y el JRE existen diversas implementaciones de JDK: JDK's de Sun (o J2SE) y JDK's de IBM. 1.3. J2EE (Java 2 Enterprise Edition) J2EE es un grupo de especificaciones diseñadas por Sun que permiten la creación de aplicaciones empresariales, esto sería: acceso a base de datos (JDBC), utilización de directorios distribuidos (JNDI), acceso a métodos remotos (RMI/CORBA), funciones de correo electrónico (JavaMail), aplicaciones Web(JSP y Servlets)...etc. Aquí es importante notar que J2EE es solo una especificación, esto permite que diversos productos sean diseñados alrededor de estas especificaciones algunos son Tomcat y Weblogic ; la especificación más reciente de Sun es J2EE 1.4 , la cual esta conformada por: JSP 2.0 ,Servlet 2.4, EJB 2.1 y Connector 1.5 entre otros API's. Aunque varios productos Java están diseñados alrededor de estas especificaciones, no todos cumplen con el estándar completo, esto es, Tomcat solo emplea|cumple las especificaciones de JSP y Servlets, sin embargo, existen productos como Websphere y algunos otros "Java Application Servers" que son considerados "Fully J2EE Compliant" , en otras palabras, cumplen con todas las especificaciones definidas por Sun. Sun ofrece una implementación de TODAS estas especificaciones llamada J2EE SDK , a pesar que el J2EE SDK es una implementación, esta es solo una muestra ofrecida por Sun para utilizar las funcionalidades de las especificaciones J2EE, aunque funcionaría en un Sistema de Producción su diseño es poco escalable. 1.4. Otros detalles de Importancia al trabajar con estos ambientes. 1.4.1. CLASSPATH Es una variable de ambiente en su sistema extremadamente importante ya 12 que le indica al JDK donde se encuentran las clases que serán utilizadas al compilar un programa, el CLASSPATH puede estar compuesto por diversos directorios o JARS, como se muestra a continuación: CLASSPATH=/usr/local/tomcat/lib/servlet.jar:/usr/local/enhydra/lib/enhydra.jar: /home/JavaPrograms3:/usr/local/xml:/usr/local/xml/xp.jar:/usr/local/java_lib: /usr/local/jsdkee/lib/j2ee.jar:/usr/local/jdk/jre/lib/ext/jndi.jar: /usr/local/java_lib/postgresql.jar Cuando se utiliza un directorio, el JDK buscará dentro de éste las clases correspondientes, nótese que cuando se emplea un JAR debe especificarse el archivo completo , si el JAR se encuentra dentro de un directorio no será encontrado al menos que se indique el archivo JAR específicamente. Por lo general debe agregar este CLASSPATH al archivo /etc/bashrc para que sea definido para todo usuario del sistema. 1.4.2. JARS: Es un grupo de clases comprimidas; una vez que defina 200 o 300 clases en Java puede agruparlas para formar lo que es denominado "JAR File", este JAR file puede ser considerado un ZIP o TAR file utilizado en cualquier sistema de computo, la ventaja de los JAR files es su compresión y la reducción de carga administrativa al movilizar clases . 1.4.3. Recomendación para JARs y CLASSPATH Para evitar las dificultades de actualizar la variable CLASSPATH en cada ocasión que sea agregada alguna clase: · CLASES GENERALES: Generar un directorio global java_lib e incluirlo dentro del CLASSPATH, de esta manera si adquiere clases de postgres, objectspace o osmosislatina puede incluirlas dentro de este directorio y evita problemas de manutención, concentrando efectivamente todas las clases adicionales utilizadas por el JDK en un solo directorio. 13 · JARS: Los archivos JAR son menos amigables al momento de intentar concentrarlos en directorios, ya que como se menciono anteriormente es necesario declararlos directamente en CLASSPATH. Para evitar estas limitaciones es posible agregar los archivos JAR al directorio $JAVA_HOME/jre/lib/ext/ donde $JAVA_HOME es el directorio raíz del JDK , cualquier archivo JAR dentro de este directorio estará disponible al ambiente Java, como si éste hubiera sido declarado en CLASSPATH. 2. Entorno de Desarrollo Integrado Un entorno de desarrollo integrado o IDE1 (acrónimo en inglés de integrated development environment), es un programa informático compuesto por un conjunto de herramientas de programación. Puede dedicarse en exclusiva a un sólo lenguaje de programación o bien, poder utilizarse para varios. Dev C++, un IDE para el lenguaje de programación C++. WebDevStudio, un IDE en línea para el lenguaje de programación C/C++. 1 Obtenido de http://es.wikipedia.org/wiki/Entorno_de_desarrollo_integrado 14 Un IDE es un entorno de programación que ha sido empaquetado como un programa de aplicación, es decir, consiste de: · · · · · Editor de texto ó código Compilador Interprete Depurador Constructor de interfaz gráfica (GUI). Los IDEs pueden ser aplicaciones por sí solas o pueden ser parte de aplicaciones existentes. El lenguaje Visual Basic, por ejemplo, puede ser usado dentro de las aplicaciones de Microsoft Office, lo que hace posible escribir sentencias Visual Basic en forma de macros para Microsoft Word. Los IDEs proveen un marco de trabajo amigable para la mayoría de los lenguajes de programación tales como C++, Python, Java, C#, Delphi, Visual Basic, etc. En algunos lenguajes, un IDE puede funcionar como un sistema en tiempo de ejecución, en donde se permite utilizar el lenguaje de programación en forma interactiva, sin necesidad de trabajo orientado a archivos de texto, como es el caso de Smalltalk u Objective-C. Es posible que un mismo IDE pueda funcionar con varios lenguajes de programación. Este es el caso de Eclipse, al que mediante plugins se le puede añadir soporte de lenguajes adicionales.. 2.1. IDE's del Lenguaje de Programación Java Mientras un JDK|SDK ofrece las herramientas para compilar y ejecutar programas en Java éste no ofrece un ambiente de trabajo para proyectos complejos, esto es, si usted compila una o dos clases quizás el comando javac ofrecido en los JDK es suficiente, pero si su proyecto estará compuesto por 100 o 200 clases, javac sería muy deficiente.Los IDE's ("Integrated Development Environment") ofrecen un ambiente gráfico en los que se tiene acceso a mayor número de herramientas no ofrecidas en los JDK's: Debuggers más elaborados, check-points dentro de la compilación,creación de WAR's (Web-Archives), "Wizards" para acelerar desarrollo, entre otras cosas. Algunos IDE's son: · NetBeans ( http://www.netbeans.org ) Open-Source · Eclipse ( http://www.eclipse.org ) Open-Source · Sun Java Studio ( http://www.sun.com/software/sundev/jde/index.xml ) de Sun 15 · JBuilder ( http://www.borland.com/jbuilder ) de Borland · WebSphere Studio ( http://www- 306.ibm.com/software/awdtools/studiositedev/ ) de IBM · JDeveloper ( http://otn.oracle.com/products/jdev/content.html ) de Oracle 2.1.1 JCreator JCreator es la herramienta de desarrollo para cada programador que le gusta hacer lo que mejor sabe hacer: la programación. Es más rápido, más eficiente y más fiable que la IDE de otros. JCreator ofrece al usuario una amplia gama de funcionalidades tales como: Gestión de proyectos, plantillas de proyecto, el código de terminación, interfaz de depuración, editor con resaltado de sintaxis, magos y una interfaz de usuario totalmente personalizable Con JCreator directamente puede compilar o ejecutar el programa Java sin activar el documento principal en primer lugar. JCreator encontrará automáticamente el archivo con el método principal o el archivo HTML celebración de la applet de Java, a continuación, se iniciará la herramienta adecuada. JCreator está escrito enteramente en C + +, lo que hace que sea rápido y eficaz en comparación con los editores basados en Java / s. IDE ' 2.1.2. Eclipse Es un entorno de desarrollo integrado de código abierto multiplataforma para desarrollar lo que el proyecto llama "Aplicaciones de Cliente Enriquecido", opuesto a las aplicaciones "Cliente-liviano" basadas en navegadores. Esta plataforma, típicamente ha sido usada para desarrollar entornos de desarrollo integrados (del inglés IDE), como el IDE de Java llamado Java Development Toolkit (JDT) y el compilador (ECJ) que se entrega como parte de Eclipse (y que son usados también para desarrollar el mismo Eclipse). Sin embargo, también se puede usar para otros tipos de aplicaciones cliente, como BitTorrent Azureus. Eclipse es también una comunidad de usuarios, extendiendo constantemente las áreas de aplicación cubiertas. Un ejemplo es el 16 recientemente creado Eclipse Modeling Project, cubriendo casi todas las áreas de Model Driven Engineering. Eclipse es ahora desarrollado por la Fundación Eclipse, una organización independiente sin ánimo de lucro que fomenta una comunidad de código abierto y un conjunto de productos complementarios, capacidades y servicios. Arquitectura La base para Eclipse es la Plataforma de cliente enriquecido (del Inglés Rich Client Platform RCP). Los siguientes componentes constituyen la plataforma de cliente enriquecido: · Plataforma principal - inicio de Eclipse, ejecución de plugins · OSGi - una plataforma para bundling estándar. · El Standard Widget Toolkit (SWT) - Un widget toolkit portable. · JFace - manejo de archivos, manejo de texto, editores de texto · El Workbench de Eclipse - vistas, editores, perspectivas, asistentes Los widgets de Eclipse están implementados por una herramienta de widget para Java llamada SWT, a diferencia de la mayoría de las aplicaciones Java, que usan las opciones estándar Abstract Window Toolkit (AWT) o Swing. La interfaz de usuario de Eclipse también tiene una capa GUI intermedia llamada JFace, la cual simplifica la construcción de aplicaciones basada en SWT. El entorno de desarrollo integrado (IDE) de Eclipse emplea módulos (en inglés plug-in) para proporcionar toda su funcionalidad al frente de la plataforma de cliente rico, a diferencia de otros entornos monolíticos donde las funcionalidades están todas incluidas, las necesite el usuario o no. Este mecanismo de módulos es una plataforma ligera para componentes de software. Adicionalmente a permitirle a Eclipse extenderse usando otros lenguajes de programación como son C/C++ y Python, permite a Eclipse trabajar con lenguajes para procesado de texto como LaTeX, aplicaciones en red como Telnet y Sistema de gestión de base de datos. La arquitectura plugin permite escribir cualquier extensión deseada en el ambiente, como sería Gestión de la configuración. 17 La definición que da el proyecto Eclipse acerca de su software es: "una especie de herramienta universal - un IDE abierto y extensible para todo y nada en particular". El SDK de Eclipse incluye las herramientas de desarrollo de Java, ofreciendo un IDE con un compilador de Java interno y un modelo completo de los archivos fuente de Java. Esto permite técnicas avanzadas de refactorización y análisis de código. El IDE también hace uso de un espacio de trabajo, en este caso un grupo de metadata en un espacio para archivos plano, permitiendo modificaciones externas a los archivos en tanto se refresque el espacio de trabajo correspondiente. 2.1.3. NetBeans NetBeans se refiere a una plataforma para el desarrollo de aplicaciones de escritorio usando Java y un entorno de desarrollo integrado Esta plataforma permite que las aplicaciones sean desarrolladas a partir de un conjunto de componentes de software llamados módulos. Un módulo es un archivo Java que contiene clases de java escritas para interactuar con las APIs de NetBeans y un archivo especial (manifest file) que lo identifica como módulo. Las aplicaciones construidas a partir de módulos pueden ser extendidas agregándole nuevos módulos. Debido a que los módulos pueden ser desarrollados independientemente, las aplicaciones basadas en la plataforma NetBeans pueden ser extendidas fácilmente por otros desarrolladores de software. NetBeans es un proyecto de código abierto de gran éxito con una gran base de usuarios, una comunidad en constante crecimiento, y con cerca de 100 socios en todo el mundo. Sun MicroSystems fundó el proyecto de código abierto NetBeans en junio 2000 y continúa siendo el patrocinador principal de los proyectos. La Plataforma NetBeans es una base modular y extensible usada como una estructura de integración para crear aplicaciones de escritorio grandes. Empresas independientes asociadas, especializadas en desarrollo de software, proporcionan extensiones adicionales que se integran fácilmente en la plataforma y que pueden también utilizarse para desarrollar sus propias herramientas y soluciones. 18 La plataforma ofrece servicios comunes a las aplicaciones de escritorio, permitiéndole al desarrollador enfocarse en la lógica específica de su aplicación. Entre las características de la plataforma están: · Administración de las interfaces de usuario (ej. menús y barras de herramientas) · Administración de las configuraciones del usuario · Administración del almacenamiento (guardando y cargando cualquier tipo de dato) · Administración de ventanas · Framework basado en asistentes (diálogos paso a paso) 2.1.4. JDeveloper JDeveloper es un entorno de desarrollo integrado desarrollado por Oracle Corporation para los lenguajes Java, HTML, XML, SQL, PL/SQL, Javascript, PHP, Oracle ADF, UML y otros. Es un software propietario pero gratuito desde 2005. Las primeras versiones de 1998 estaban basadas en el entorno JBuilder de Borland, pero desde la versión 9i de 2001 está basado en Java, no estando ya relacionado con el código anterior de JBuilder. Las últimas versiones estables son: · Para JDK 6: 11.1.1.0.0 (abril de 2009) · Para JDK 5: 10.1.3.5 (agosto de 2009). 19 CAPITULO II: IDE ORACLE JDEVELOPER 2.1. Historia La primera versión de JDeveloper (1998) fue basada en la licencia de JBuilder producto de Borland. JDeveloper pasó con una reescritura completa que se basa en Java, para sus versiones 9i (2001). La versión 10g (9.0.5) muestra el primer lanzamiento mejorado del Oracle En 2006, aún debajo de la etiqueta 10g, y después de un significativo retraso, Oracle lanza la versión 10.1.3 - el lanzamiento principal más último. En octubre de 2006 Oracle lanzó la versión 10.1.3.1 que agregó la ayuda para espec. final EJB3.0 junto con tiempo del diseño de BPEL y de ESB. En enero de 2007 Oracle lanzó la versión 10.1.3.2 que agrega las capacidades de WebCenter tales como crear y los portlets que consumen, puente de portlet/JSF, y control de datos del depósito del contenido. Un lanzamiento de prueba de la versión 11g fue lanzado en mayo de 2007. En julio del año 2008 se lanza la versión JDeveloper 10g 10.1.3.4, en octubre del mismo año se lanza la versión JDeveloper 11g 11.1.1.0.0, en diciembre del mismo año se lanza la versión JDeveloper 11g 11.1.1.0.1. en agosto del año 2009 se lanza la versión JDeveloper 10g.10.1.3.5. El IDE ORACLE JDeveloper de este manual lo puede descargar de de la siguiente dirección www.oracle.com/technology/software/products/jdev/htdocs/soft10131.html y una vez descargado, descomprimir el archivo jdevstudio10131.zip 2.2 Características Es el editor para aplicaciones desarrolladas en Java de Oracle, dentro de sus principales características cuenta con: · El soporte de Oracle · Es gratuito · Fácil de usar, excelente para desarrolladores no experimentados en Java · Permite desarrollar aplicaciones tanto para Desktop como para Web · Excelente integración con Oracle 9i y 10g · Permite generar diagramas de UML o Casos de uso – Especificación de Requerimientos 20 o Diagramas de Actividad – Definición de procesos o Diagramas de Secuencia – Facilitan el modelado de flujos que siguen los componentes del sistema o Diagrama de Clases – Representan la organización y las relaciones de las clases y componentes del sistema · Permite generar diagramas de Entidad Relación para Bases de datos · Permite la integración con servidores de control de versiones. · Integración con las herramientas de Pruebas de Junit Otras Caracteristicas de Oracle JDeveloper JDeveloper viene en tres ediciones; cada uno ofrece más características encima de las otras, y todos son libres. Una lista de las características incluye: Edición de Java Standar · Ayuda del SE 5 de · Control de la · El eliminar errores versión (sin · El perfilar · Cifre el redactor embargo, la · Ayuda de la · Cifre la ramificación no es Java hormiga apoyada por el · Ayuda de XML · Refactoring cliente interno de · Abra el API y las · Oscilación CVS) navegación · Prueba de la unidad extensiones · Intervención y · Ayuda del usuario métrica Edición de J2EE · JSP · Servicios del Web · Puntales · UML · JSF · Desarrollo de la base de datos · EJB · Despliegue y gerencia · TopLink · Edición del estudio · Alimentador de originales Databinding · Caras del alimentador de originales · Móvil del alimentador de originales · Componentes del negocio del alimentador de originales 21 · Oscilación del alimentador de originales · Despliegue del alimentador de originales · Diseñador de BPEL · Diseñador de ESB · Desarrollo de Portlet · Puente de Portlet/JSF JDeveloper es libre para el diseño y desarrollo. Oracle tiene una licencia runtime cuando está desplegado fuera de un servidor del uso de Oracle. Para otros detalles, vea el revelador de la red de la tecnología de Oracle licenciar los términos para JDeveloper aquí: http://www.oracle.com/technology/software/popup-license/jdevlicense.html 2.3. Ventajas En nuestro concepto los IDE son muy parecidos en las funcionalidades básicas para desarrollo. Sin embargo JDeveloper va más allá de ser un IDE para crear aplicaciones Java y lo que promueve es el concepto de IDE empresarial. Una de las características principales de Oracle JDeveloper es que cubre todo el ciclo de vida de una aplicación y de una manera muy declarativa. Oracle ha centrado gran parte de su estrategia a nivel de herramientas de desarrollo entorno a JDeveloper, esto quiere decir que el IDE cuenta con características que cubren todo el ciclo de vida de una aplicación (análisis basado en UML, desarrollo, prueba/debug, elementos para auditar), adicionalmente se puede hacer desarrollo orientado a base de datos (modelamiento), desarrollo para XML, desarrollo para SOA (BPEL, ESB, Webservices), desarrollo Web (javaScript, HTML, JSF). Una de las ventajas más grandes es que para el desarrollador el ambiente, los menús, etc, son los mismos; no se requiere de utilizar otras herramientas, el IDE se ajusta de acuerdo al tipo de tecnologías que vayas a utilizar. Adicional a las características que mencionamos, el IDE cuenta con un servidor JavaEE embebido, el cual viene con la herramienta lo cual facilita toda la parte de pruebas y despliegues. La última pieza que diferencia a JDeveloper de los demás es ADF o Application Development Framework, un framework end-to-end para construir aplicaciones Java EE. Utilizando este framework en conjunto con JDeveloper se pueden crear aplicaciones basadas en MVC de manera productiva y basada en los estándares de la industria tales como EJB3, JPA, JSF. Respecto a los plugins, los hay por parte de Oracle. 22 Es un IDE que cuenta una buena paleta de componentes y un diseño 100% declarativo. 2.4. Interfaz Principal Cuando inicias Oracle JDeveloper por primera vez, verá una pantalla similar a la de la figura Nº01 Figura Nº 01 La interfaz se divide en varias partes distintas, como se observa. Desde arriba a la izquierda, abajo a la derecha se ubica, el menú, la barra de herramientas, la barra de navegación, la vista de árbol de la estructura de los proyectos y la zona de presentación de los errores de los programas fuentes asimismo la paleta de componentes así como su ventana de propiedades de acuerdo al componente elegido. 23 De acuerdo al desarrollo de aplicaciones vamos a ir describiendo las diferentes opciones con las que cuenta y que se aplican de acuerdo a las necesidades de los usuarios. 24 CAPITULO III: CONOCIENDO EL ENTORNO DE JDEVELOPER 3.1. Introducción al Editor Grafico Las Interfaces graficas en java siempre han sido un poco complejas. El problema esta cuando tienes que mover un botón y ponerlo mas a la izquierda y cosas por el estilo y te tienes que lidiar con los Layout´s. En Swing la cosa se complica un poco más así que creo que es necesario un buen editor grafico para java. Sobretodo desde el punto de vista de una persona que al fin y al cabo es programador y no diseñador.. En este punto se tratará de explicar brevemente como conseguir una GUI en java de manera rápida con el editor grafico que acompaña al IDE Jdeveloper. 1. Crear una nueva área de trabajo, como “No template”, donde se incluirá el nuevo proyecto. Para ello en Aplications-Navigator click en botón-derecho “NewApplicaction workspace”, se nos abrirá una ventana como la que se muestra a continuación en la figura 1. Lo de no template lo haremos para que Jdeveloper no nos añada ningún patrón de diseño ni nada por el estilo. Nuestro objetivo es crear una clase java que tenga una serie de componentes gráficos y métodos vacíos que gestionen dichos componentes, que serán implementados por nosotros. Destacar que lo que queremos es crear una interfaz de forma rápida. Una vez tenemos nuestro área de trabajo con nuestro proyecto .Sobre el proyecto con el botón-derecho y seleccionamos New-->Client Tier-->Swing/awt-->Frame Tal como se muestra en la figura 2. 25 Como podemos ver esto ya nos ha creado una clase vacía la cual extiende de JFrame. También podemos observar que podemos ver la clase como diseño, como código y como clase. Nos vamos al tipo de vista diseño y deberíamos ver algo como lo que se muestra en la figura 3. Ahora solo se trata de añadir botones y componentes, como queramos nosotros, mediante el Component palette de Jdeveloper, si no tenemos activo el component lo activamos mediante View--> component palette. En el component palette seleccionamos swing y simplemente se trata de seleccionar lo que queremos y ponerlo en nuestra interfaz. Para este ejemplo, se ha creado la interfaz que se ve a continuación. Como se puede ver es un JTextarea, un JTexfield y un JButton. 26 Si nos vamos al tipo vista código de nuestra clase podemos observar el código que ha generado JDeveloper por nosotros. Hasta el momento esta interfaz no genera ningún evento y la clase java solo contiene una serie de componentes gráficos. El código es puro Swing así que no estamos atados a JDeveloper para nada y podremos usar este código en cualquier otro IDE. Ahora trataremos de gestionar los eventos que provocara la interacción del usuario con nuestra GUI. Para ello deberemos tener activado el Property Inspector, sino es así lo activamos mediante View--> Property Inspector. Imaginemos que lo que queremos es añadir el método que gestionara los eventos del botón. Seleccionamos el botón en la vista de diseño de la clase y nos vamos al Property Inspector. Podemos observar que se nos abre una lista con las propiedades del componente tal como se muestra en la figura 5. La primera pestaña se trata de las propiedades y la segunda de los eventos. En este punto son los eventos lo que nos interesa. . 27 Seleccionamos eventos y hacemos click en la casilla que aparece en blanco al lado de Action Performed y se nos abra la siguiente pantalla y aceptamos. Tal como podemos observar en la figura 6 Esto lo haremos con todos los componentes que queramos controlar, de tal forma que después de hacerlo en nuestro JTextarea. Podemos observar que simplemente tenemos una serie de componentes gráficos y dos métodos que están vacíos que se encargaran de gestionar los eventos. El código obtenido hasta ahora es el siguiente: package mypackage; import javax.swing.JFrame; import java.awt.Dimension; import javax.swing.JButton; import java.awt.Rectangle; import javax.swing.JCheckBox; import javax.swing.JTextArea; import javax.swing.JTextField; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class Frame1 extends JFrame { private JButton jButton1 = new JButton(); private JTextArea jTextArea1 = new JTextArea(); private JTextField jTextField1 = new JTextField(); public Frame1() { try { jbInit(); } catch(Exception e) { e.printStackTrace(); } 28 } // Método que es invocado desde el constructor de la clase, aquí se desarrolla toda la creación de la // interfaz. private void jbInit() throws Exception { this.getContentPane().setLayout(null); this.setSize(new Dimension(400, 300)); JButton1.setText("jButton1"); JButton1.setBounds(new Rectangle(300, 200, 75, 35)); JButton1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jButton1_actionPerformed(e); } }); jTextArea1.setText("jTextArea1"); jTextArea1.setBounds(new Rectangle(15, 30, 355, 140)); jTextField1.setText("jTextField1"); jTextField1.setBounds(new Rectangle(15, 190, 275, 60)); jTextField1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jTextField1_actionPerformed(e); } }); this.getContentPane().add(jTextField1, null); this.getContentPane().add(jTextArea1, null); this.getContentPane().add(jButton1, null); } //metodo vacio que control evento de boton private void jButton1_actionPerformed(ActionEvent e) { } //metodo vacio que controla textfield private void jTextField1_actionPerformed(ActionEvent e) { } } 3.2. Creando una Primera Aplicación De acuerdo a la experiencia obtenida a través de los cursos de programación impartidos a lo largo de nuestro trabajo docente, hemos comprobado que a través de ejemplos se tiene una llegada más rápida a los alumnos de los cursos de programación motivo por el cual empezaremos describiendo el IDE creando nuestra primera aplicación. 3.2.1. Iniciar JDeveloper. Haga doble clic en el JDeveloper ejecutable (jdeveloper.exe) encontrados en el escritorio del sistema operativo Windows O en su defecto buscar el archivo ejecutable jdeveloper.exe en la carpeta: C:\jdevstudio10134 29 Aparece una ventana de dialogo que indica que proporciona consejos o Tips sobre el IDE, debemos cerrar dicha ventana. 3.2.2. Crear la aplicación La aplicación es el más alto nivel en la estructura de control. Es una visualización de todos los objetos que usted necesita mientras está trabajando. Una aplicación realiza un seguimiento de sus proyectos, mientras está desarrollando sus programas de Java. Las aplicaciones se almacenan en archivos con la extensión .jws. Al abrir JDeveloper, la última aplicación utilizada se abre por defecto, para que pueda continuar donde lo dejó. Al crear una nueva aplicación en JDeveloper, usted tiene la opción de basarlo en una plantilla. La plantilla de aplicación que usted elija determina la estructura del proyecto inicial, es decir, las carpetas del proyecto denominado 30 dentro de la aplicación. Puede modificar las plantillas existentes o crear otros nuevos. En JDeveloper siempre trabajar con proyectos que figuran que están contenidos en una aplicación. Un proyecto JDeveloper es una agrupación lógica de los archivos que están relacionados. Un proyecto realiza un seguimiento de los archivos de origen, paquetes, clases, imágenes y otros elementos que su programa puede necesitar. Usted puede agregar múltiples proyectos a la aplicación para acceder fácilmente, modificar y reutilizar el código fuente. Proyectos de gestión de las variables de entorno como la fuente y las rutas de salida utilizada para compilar y ejecutar sus programas. Los proyectos también mantienen el compilador, en tiempo de ejecución, y las opciones de depuración, así que usted puede personalizar el comportamiento de esas herramientas en un proyecto. El Navegador de Aplicaciones (Application Navigator) de JDeveloper es la ventana principal desde la que se tiene acceso a todos los componentes de su aplicación. La estructura del Navegador de Aplicaciones es jerárquica y soporta las aplicaciones, proyectos, imágenes, archivos. Html, y más. De forma predeterminada, JDeveloper muestra el Navegador de Aplicaciones en el lado izquierdo de la IDE. Para crear una aplicación realizar los siguientes pasos: 1.- Haga anticlick en el nodo Aplicaciones en el Navegador de Aplicaciones y seleccione Nueva Aplicación ... en el menú contextual. 31 2.- En el cuadro de diálogo Crear Aplicaciones (Create Application), modificar el valor predeterminado Application1 solicitud del nombre de MyFirstApp. Tenga en cuenta el nombre de directorio por defecto el cual lo puede cambiar de acuerdo a sus requerimientos. 3.- Haga click con el puntero del mouse apuntando hacia abajo en el campo de plantillas de aplicación (Application Template) para invocar la lista desplegable de plantillas disponibles. Hacer click en No Template [All Technologies]. Aquí ésta aplicación del proyecto tiene acceso a todas las tecnologías de JDeveloper. 32 Click OK. 4.- En el cuadro de diálogo Crear proyecto, cambiar el nombre predeterminado del proyecto Project1 a MyProject y, a continuación, haga clic en Aceptar. En el Navegador de aplicaciones (Applications Navigator), los proyectos se muestra como el segundo nivel en la jerarquía en virtud de la aplicación. Las aplicaciones de navegador debe tener este aspecto: Hay que tener en cuenta que la carpeta del proyecto (MyProject) es un hijo de la carpeta de aplicaciones (MyFirstApp). 3.2.3. Crear una clase Para crear una clase Java, realice los siguientes pasos: 1.- Haga clic en el nodo MyProject en el Navegador de Aplicaciones y seleccione nuevo (New) ... opción del menú contextual. 33 2.- Aparece New Gallery. De forma predeterminada aparece displayada la primera categoría General que se destaca en la lista Categorías. También aparecen las otras categorías que le permiten trabajar con diferentes tecnologías para construir los diferentes niveles de una aplicación. 3.- En el cuadro de diálogo crear la clase de Java, cambiar el nombre predeterminado de class1 a Dog(perro). Debido a que no especificó el nombre del paquete al crear la aplicación, el nombre del paquete por defecto es el nombre del proyecto en minúsculas. Usted puede cambiar esta situación si se desea. Acepte los demás valores predefinidos y hacer clic en OK. 34 4.- La nueva clase abre automáticamente el editor del código fuente, donde se ve la estructura de la clase. Para agregar un método a la clase. Después del método constructor, pulsar [Enter] para agregar una línea nueva y escribir el siguiente código: public String sayHi() Observe que la línea de código que acaba de insertar tiene una línea roja ondulada debajo de ella, lo que indica un problema con la sintaxis. También hay cajas de color rojo en el margen derecho del editor de código fuente. Si pasa el mouse encima de estas cajas o sobre la línea ondulada de color rojo nos da una información sobre el error o errores del método. 5.- Al final de la línea, pulsar [Ctrl] + [Shift] + [Enter]. JDeveloper proporciona entonces la finalización automática de la estructura del 35 método, y los indicadores de error desaparecerán. Un cuadro verde aparece en el margen superior derecho para mostrar que no hay errores de sintaxis. 6.- En la línea en blanco entre las dos llaves que se agregaron al método, escribir el siguiente código para retornar una cadena: return " woof " + "Kate"; Observar que cuando escribe el primer símbolo de comillas ("), JDeveloper automáticamente le proporciona las comillas en segundo lugar, se adjuntaba el cursor entre ellas, por lo que fácilmente puede escribir el literal. 3.3. Explorando el Editor de Código En los editores se escribe el código y diseño de interfaces de usuario. Por lo cual vamos a explorar algunas de las características del editor de código fuente de Java. 3.3.1.- Plantillas de código (Using code templates) Las plantillas de código ayudan a escribir código en forma rápida y eficaz mientras usted está en el editor de código fuente. Usted puede modificar las plantillas existentes o crear uno propio. En este caso se muestra cómo utilizar el código de algunas de las plantillas existentes en la clase Dog. 1.- Existe un código de plantilla para agregar el método main en la clase definida en Java. Pulsar [Enter] para agregar una nueva línea después del método sayHi(). Escribir la letra m, y pulsar [Ctrl] + [Enter] para aplicar plantillas de código. 36 El método main de la plantilla se sugiere. 2.- Pulse Enter para aceptar la sugerencia e incorporar a la plantilla, quedando de la siguiente manera: 3.- Crear un objeto de la clase Dog en el método main agregando el código siguiente: Dog myDog = new Dog(); 37 Nota: La variable mydog se muestra en gris, porque aún no ha sido utilizado en cualquier parte de la clase. Si pasa el ratón sobre la variable mydog, se muestra una descripción para decirles que la variable no se ha utilizado. 4.- Pulse [Ctrl] + [Enter] para ver la lista de plantillas que están disponibles. 38 5.- Para insertar un bucle for con el código de la plantilla. Agregar una nueva línea después de la línea que crea la variable mydog, tipear f y luego pulsar [Ctrl] + [Enter]. Tres plantillas se sugieren 6.- Hacer doble click en la segunda de las tres propuestas, basado en el forloop para seleccionarlo quedando de la siguiente manera incorporado la estructura del bucle for. 39 7.- Modificar el código de la plantilla. Para reemplazar el contador i por la variable count y limitar el bucle a 3 iteraciones. 8.- Escribir la instrucción System.out.println. Coloque el cursor en una línea en blanco dentro de las llaves del bucle, y tipear System. (asegúrese de incluir el punto en la final de la palabra.) Una lista de código sugerido aparecerá. 40 Tipear la letra O y pulse [Enter] para seleccionar el código propuesto, se agregará el objeto out. tipear. (Punto), y cuando la lista de código propuesto aparece, escriba la letra P y haga doble clic en el código println() sugerido. 9.- Agregar el código para utilizar el bucle y mostrar el mensaje sayHi. Dentro de los paréntesis después de println, introducir el siguiente código: count + myDog.sayHi() 41 10.- Hacer clic en la vista del editor y seleccione Reformat para reestructurar el código. 11.- Su código debe tener este aspecto: 3.4. Compilando y Ejecutando una Clase Cuando se compila correctamente un archivo .java, se crea un archivo .class en el directorio \ src del proyecto. JDeveloper guarda automáticamente los archivos .java. Cuando se ejecuta una clase, se compila automáticamente y se guarda. 1.- En las Applications Navigator, hacer click derecho en Dog.java y seleccionar crear (Make) en el menú contextual. 42 2.- En la parte inferior derecha del IDE JDeveloper, la ventana de registro debe mostrar una compilación exitosa. Si la ventana de registro no aparece, utilice Ver | Iniciar sesión para que aparezca (o pulse [Ctrl] + [Shift] + [L]). Tenga en cuenta que al utilizar la opción make para compilar la clase, JDeveloper guarda todos los archivos en el proyecto. 3.- En el Applications Navigator o en el editor de código fuente, hacer click en la clase Dog.java, y seleccionar Run en el menú contextual. 43 En la ventana de registro muestra 3 mensajes de la cadena 'Kate'. 3.5. Trabajando con el Asistente de Código (CODE ASSIST) El Código de Asistencia (Code Assist) examina el código en el editor y proporciona asistencia para solucionar problemas comunes. Aquí se utiliza la clase Dog para explorar algunos ejemplos de las sugerencias que se ofrecen. 1.- Crear un objeto Cat(gato). Al inicio del método principal, después de la primera llave, pulsar [Enter] para crear una nueva línea y escribir el siguiente código: Cat MyCat = new Cat (); 2.- Observar que el icono de la bombilla se ha aparecido a la izquierda de la nueva línea. Coloca el puntero del mouse sobre este icono y aparece el mensaje de "soluciones rápidas y el código de asistencias para esta línea". 44 3.- Haga clic en el icono de la bombilla de luz para ver las correcciones sugeridas. La notificación de diferentes colores en las bombillas de luz y al lado las sugerencias, y signos diferentes en su interior. La bombilla de luz ámbar que contiene un signo de interrogación (?) Indica una sugerencia para mejorar el código, mientras que la bombilla roja que contiene un signo de exclamación (!) Sugiere una forma de corregir un error. Se necesita una clase Cat con el fin de crear una instancia de un objeto Cat. Si hace click en la primera sugerencia, JDeveloper invoca el cuadro de diálogo Crear la clase donde se puede crear una clase Cat. 45 5.- Si no desea crear la clase Cat ahora, haga click en Cancelar para cerrar el cuadro de diálogo Crear la clase. Sin embargo, recuerda que puede hacerlo después de la siguiente manera: Pulse [Enter] después de hacer: new Cat(); para abrir una nueva línea. En la nueva línea de introducir el siguiente código: //TODO create a Cat class Seleccione View | Tasks Window para ver una lista de tareas que usted ha creado. 46 7.- La opción Task Window (ventana de tareas) muestra una lista de las tareas que usted ha creado (en este caso, es su única tarea). 8.- Si hace doble clic en una tarea de la lista, JDeveloper le lleva a la tarea correspondiente, insertando el cursor al comienzo de la línea. 47 9.- Observar el cuadro rojo en el margen superior derecho del editor. Moviendo el mouse sobre este icono le informa de que hay errores en su programa. 10.- Un cuadro más pequeño rojo en el punto apropiado del código da más información sobre el error. 11.- Los marcadores de color rosado indican que tiene creada una tarea. Ubicar el puntero del mouse sobre el marcador para ver que tarea es. 48 12.- Como comentario la línea que crea el objeto Cat. Tenga en cuenta que los globos rojos han desaparecido, para ser sustituido por un marcador de color verde que indica que no hay errores en el código. 13.- Hacer clic derecho en la ventana del editor y seleccionar la opción Reformat. El código debería tener el siguiente aspecto: 49 3.6.- Refactoring Code (Código de refactorización) Refactoring es una técnica de edición que modifica la estructura del código sin alterar el comportamiento del programa. Una operación de refactorización es una secuencia de cambios simples que transforma el código de un programa, pero lo mantiene en un estado en el que se compila y se ejecuta correctamente. JDeveloper proporciona un conjunto de operaciones de refactorización (Refactoring). 1.- Un ejemplo de una operación de refactorización es la sustitución de una expresión constante en el contenido de un método por un parámetro. Esta expresión se sustituye por el nombre del parámetro. El nuevo parámetro se añade a la lista de parámetros del método y de todas las invocaciones del método. Para hacer esto en la clase Dog, haga clic derecho en el literal, 'Kate' en el código del método sayHi () y seleccionar Refactor | Introduce parámeter ... en el menú contextual. 2.- En el cuadro de diálogo Introduce Parameter, escribir en el campo name p_name, y haga clic en Aceptar. 50 3.- Examine el código para ver los resultados de la operación de refactorización. La declaración de método contiene ahora la cadena p_name en su lista de parámetros, el parámetro p_name ha sustituido el literal "Kate" en el método de valor de retorno, y el literal "Kate" se ha incluido como un parámetro en la llamada al método. 4.- Otra operación de refactorización es obtener una nueva interfaz de los métodos seleccionados en una clase existente. Para hacer esto en la clase Dog, haga clic derecho en la declaración de la clase Dog, y en el menú contextual, seleccione Refactor | Extract Interface... 51 5.- En el diálogo de Extract Interface, escriba IntAnimal como nombre de la interfaz, y seleccione el método sayHi (String) en los miembros a la lista de Extract. Haga clic en Aceptar. 6.- La interfaz de IntAnimal se crea y se abre en el editor de código fuente. 7.- Otra operación de refactorización simple es renombrar un método, por el cual cada vez que aparece el nombre del método se sustituye por el nuevo nombre. Para hacer esto en la interfaz de IntAnimal, haga clic en el método sayHi (), y en el menú contextual, seleccione Refactor | Rename. 52 8.- En el cuadro de diálogo Rename Method, cambie el nombre del método sayHi por sayHowDoYouDo. Seleccione la casilla de verificación Preview para ver todos los usos que se ven afectados por el cambio de nombre. Haga clic en OK. 9.- La ventana de registro (log) se listan todos los usos del método sayHi (). Usted debe examinar cada uso para comprobar si desea cambiar cada ocurrencia de sayHi () por sayHowDoYouDo (). Si es así, haga clic en Do Refactoring en la barra de herramientas de la ventana log ( registro). 10.- Tenga en cuenta que el cambio de nombre ha tenido lugar en la interfaz de IntAnimal ...... 11.- .....y en la clase Dog 53 3.7. Ver Historial de Modificación del Código ( Viewing Code Modification History ) JDeveloper tiene incorporado la característica historia (History). Esta historia local no requiere un sistema de control de versiones para proporcionar un cambio reciente de registro y visualizar "este" entre las versiones. Las versiones se crean automáticamente sobre la base de las interacciones del usuario, tales como Save (Guardar), Compile (Compilar), Rename (Renombrar), y así sucesivamente. 1.- Notificación de las tres pestañas (fichas) en el pie de la ventana del editor. Hacer click en la pestaña Historial (History). 2.- Se muestra la ventana history. La parte superior de la ventana contiene una lista de las revisiones y las fechas, mientras que una lista de cambios en el código se muestra en la parte inferior de la ventana. Las dos ventanas están sincronizadas, 54 de modo que el detalle en la parte inferior de la ventana coincide con la selección en la parte superior. Las revisiones para la fecha seleccionada y el tiempo se resumen en la línea de estado en la parte inferior del IDE, en este caso 3 diferencias: 0 añadido, 0 eliminado, 3 cambiado. 3.- El color lila cajas indican cambios en el código. En la parte superior de la ventana, seleccione Introduce Parameter. En la porción inferior izquierda del editor, la posición del ratón sobre el lado derecho de la flecha verde en el cuadro de color lila que contiene la declaración del método sayHi (). Observe que se muestra un mensaje indicando que al hacer clic derecho en la flecha verde le permite sustituir la diferencia adyacentes. En este caso, haciendo clic en la flecha verde para revertir sayHowDoYouDo () por sayHi (). 4.- Las cajas verdes indican las adiciones al código. 55 En la parte superior de la ventana, seleccione Expand Statement (Expandir Declaración) en la parte inferior de la lista. En la parte inferior de la ventana, seleccione el retorno "woof" + p_name; En la línea del cuadro verde en la derecha de la ventana. Colocar el cursor sobre la X de color rojo con el ratón. Observe el mensaje que indica que para eliminar la adición (s), haga clic derecho en la X. 3.8. Navegando a Través del Código (navigating through code ) JDeveloper ofrece maneras fáciles de navegar a través del código relacionado a Javadoc, y la posibilidad de ampliar o contraer secciones de código en la navegación. Para explorar estas características, realizar los siguientes pasos: 1.- Haga clic en la pestaña source del archivo Dog.java en el editor. Usted puede navegar de una parte del código a otra parte relacionada. Un ejemplo de esto es la navegación de un método para la declaración de una interface. Un método que implementa una declaración de una interface muestra una llamada fuera del icono en la margen izquierda. Al hacer click en este icono te lleva a donde se declara el método. Haga click en el icono que esta junto al método sayHowDoYouDo () del archivo Dog.java. 56 2.- JDeveloper te lleva a la interface IntAnimal en donde el método esta declarado y resalta el nombre del método para usted. 3.- Para retornar a la clase Dog donde estaba inicialmente, hacer clic en el botón verde de la barra de herramientas 4.- También puede navegar en el Javadoc para un elemento dado. En el editor del archivo de Dog.java, hacer clic derecho en la lista de parámetros para el método sayHowDoYouDo (). Desde el menú contextual, seleccione Quick Javadoc. 5.- La etiqueta Javadoc para el objeto String se muestra. 57 6.- El código minimizado le permite ampliar las secciones de contrato de código, haciendo que grandes programas sean más navegables. Coloca tu ratón en el espacio entre las líneas de puntos y sólida a la izquierda de la línea de Cat. Nótese que el color azul muestra la línea vertical junto al cuerpo del método principal. 7.- Hacer clic en el signo menos (-) de la parte superior de la línea azul vertical para contraer esta sección de código. 58 8.- Colocar el cursor sobre el signo más (+) situado junto a la sección de contrato de código. Las líneas de código contratadas en la pantalla se muestran en un cuadro sombreado azul. 3.9.- Depuración de Programas (debugging java programs ) El depurador (debugger) integrado en JDeveloper permite depurar programas java en el editor del código fuente. En Este punto se muestra cómo controlar la ejecución de un programa mediante el establecimiento de puntos de interrupción (breakpoint). Cuando la ejecución del programa se encuentra con un punto de interrupción, el programa hace una pausa, y el depurador muestra la línea que contiene el punto de interrupción en el editor de código fuente. Usted puede usar el depurador(debugger) para ver el estado del programa. 1.- Establezca un punto de interrupción (breakpoint) en el archivo Dog.java. Para ello, haga clic en el margen izquierdo de la línea: System.out.println (count + myDog.sayHowDoYouDo ( "Kate")); El icono de punto de interrupción, aparece como una bola roja, y se muestra en el margen izquierdo. 59 2.- Clic derecho en el editor de código y seleccionar Debug desde el menú contextual. 3.- La ejecución del programa se produce hasta el punto de interrupción. La flecha roja en el margen izquierdo del editor del código fuente indica que la ruptura se está produciendo. La ventana del depurador se abre y muestra la depuración de seguimiento. 60 4.- Haga clic en Step Over sobre el icono de la barra de herramientas de la ventana del registro de depurador que ejecute la primera iteración del método myDog.sayHowDoYouDo (). 5.- Tenga en cuenta que la ventana de registro muestra el primer mensaje de woof Kate. 6.- Notificación de la ventana de datos inteligente en la parte inferior derecha de la pantalla. Seleccione la variable count, y haga doble clic en la columna Valor para mostrar el cuadro de diálogo Modify Value. 61 7.- Tipear 2 como Nuevo valor y hacer. Click en OK. 8.- En la barra de herramientas de depuración de registro de la ventana, haga clic en Resume para continuar con la ejecución del programa. 9.- La variable count se incrementa y excede su límite, por lo que el programa termina, y el depurador se desconecta. 62 CAPITULO IV: DESARROLLO DE APLICACIONES 4.1. Desarrollo de una Aplicación de Escritorio En este ejemplo se desarrolla, una aplicación de escritorio siguiendo la arquitectura modelo - vista – controlador. El modelo de un componente está donde están almacenados sus datos, por ejemplo el estado de un botón (pulsado, bajo el ratón, etc.) o los valores de una lista. La vista es la representación en pantalla del componente, por ejemplo la forma (color, bordes, etc.) en que aparece un botón o una lista. Finalmente, el controlador es la parte del componente que gestiona la entrada, por ejemplo el código que describe qué hacer cuando hacemos clic sobre el botón, también llamado manejador del evento. Vamos a utilizar esta filosofía para dividir nuestra aplicación en vistas y documentos Creacion de la Aplicacion Primero crear la aplicación siguiendo el modelo vista-controlador. Para ello, desde el navegador de objetos 1.- Haz clic con el botón derecho sobre la carpeta Applications 2.- Elegir "New Application". 3.- En el cuadro de diálogo "Create Application", de la plantilla debemos elegir Java Application [Swing, ADF BC], para que nuestra aplicación sea creada con dos proyectos por defecto: Model y View, siguiendo la arquitectura MVC. Name GestionTaller Directory name Elige el directorio donde quieras guardar la aplicación Application template: Java Application [Swing ADF BC] La plantilla de aplicación [Swing, ADF BC], podemos decir que se utiliza para construir aplicaciones rápidas basadas en ADF Swing. Los componentes ADF Business Components se utilizan para construir el modelo de datos. También en la ventana de "Create Application", puedes hacer clic en el botón "Manage Templates" para conocer diferentes conceptos. 63 En la parte derecha de la ventana "Manage Application Templates" encontrarás las tecnologías que por defecto se le asignan a la plantilla [Swing, ADF BC]. Si seleccionas por ejemplo: Rich Client View podras ver una descripción de dicha tecnología. Por tanto, ADF Swing es una capa que enlaza los componentes Swing estándar con la capa de Oracle Application Development Framework (ADF). Se usa para construir aplicaciones cliente que requieren una respuesta inmediata hacia el usuario o los eventos que cambian la pantalla del usuario, y que encuentran mejor soporte en Swing que en la Web. Otra razón para construir clientes Swing es cuando, por razones de negocio, las aplicaciones necesitan trabajar off-line, desconectadas de la red. ADF Business Components gobierna la interacción entre el resto de la aplicación y los datos almacenados en la base de datos, proveyendo de servicios de validación y otras lógicas de negocio. Quedando en el navegador de aplicaciones: CREACION DE LA INTERFAZ 64 Esta aplicación consta de más de un formulario por lo tanto comenzaremos con primer formulario que consiste en una ventana login. VENTANA DE LOGIN Nuestro primer formulario va a ser la ventana de login de la aplicación. Este formulario comprobará que el usuario y contraseña coinciden con uno dado. Posteriormente se puede mejorar incorporando un contador de intentos fallidos o, lo que es más importante, validando el usuario con la base de datos para permitir la entrada de varios usuarios a la aplicación, cada uno con sus correspondientes permisos. Para crear el formulario nos dirigimos al navegador de objetos, hacemos clic con el botón derecho sobre la carpeta View de nuestra aplicación y elegimos New. Dentro de la categoría Client Tier ( Swing/AWT elegimos el ítem Frame para crear un programa fuente de tipo JFrame. En la ventana creada introducimos Login como nombre del formulario e Inicio de sesión en el atributo título y pulsamos Aceptar. Esta Interfaz Gráfica debe contar con las siguientes características: § Amigable: que facilite la tarea al usuario, § Agradable: utilizar colores suaves y evitar los diseños estridentes de mal gusto, alinear correctamente los elementos, etc. § Intuitiva: lo más fácil es situar los botones, menús, etc., de forma similar a los que el usuario esté acostumbrado, o sea, basarse en las características generales de cualquier aplicación Windows o Linux. § Homogénea: toda la interfaz de nuestra aplicación debe guardar el mismo aspecto, por ejemplo, utilizando distintas tonalidades dentro del mismo color para los fondos, utilizar el mismo tipo de letra para objetos similares, etc. 65 Comentarios y legibilidad del código: Un aspecto interno de nuestra aplicación relativo a la forma de programar es que nuestros formularios sólo deben tener el código estrictamente necesario para que funcionen y desarrollen las capacidades previstas. En ocasiones JDeveloper puede generar código automático que nos ayuda pero otras veces sólo entorpece la lectura, cuando nos encontremos con este tipo de situaciones eliminaremos el código sobrante para hacer más legible nuestro código fuente. Además, utilizaremos los comentarios adecuadamente tanto para comentar expresiones complicadas o especiales como para describir la funcionalidad de los métodos o para introducir información adicional como creador del programa, fecha, copyright,... etc. En este apartado también deberemos cuidar la organización de nuestra aplicación: evitar archivos innecesarios, utilizar nombres significativos para las clases, etc. En la ventana de Login. En primer lugar en el Inspector de Propiedades para modificar la propiedad Size a 365,233. Seguidamente, vamos a crear una serie de componentes Swing arrastrándolos hacia el formulario desde la Paleta de Componentes situada en la parte derecha de la aplicación. Estos controles, que nos van a servir para la introducción del usuario y la contraseña, tienen las propiedades siguientes: Nombre Tipo txUsuario JTextField txPass Size 135,20 JPasswordField 135,20 Bounds Text Horizontal Alignment 195, 65, Introduzca un 135, 20 usuario valido 195, 90, Introduzca 135, 20 contraseña lbUsuario JLabel 55,20 Usuario: lbPass 75,20 Contraseña: Right JLabel btAceptar JButton tooltipText Right 95,25 Para alinear el lbUsuario a la misma altura que está txUsuario los seleccionamos ambos, primero uno y luego otro con la tecla Ctrl pulsada y elegimos Align/Top del menú contextual que aparece al hacer clic con el botón derecho. Igual hacemos con los controles lbPass y txPass. Por último, alineamos a la derecha los controles lbUsuario y lbPass con la opción Align/Right y el control btAceptar a la derecha con los cuadros de texto. En ocasiones, para propiedades que tienen el mismo valor podemos seleccionar todos los controles con la tecla Ctrl y aplicarles la propiedad a todos a la vez. Por 66 ejemplo, pruébalo para establecer la fuente Ms Sans Serif, 11 en todos los controles del formulario. Ahora vamos a asignar un icono a la ventana que acabamos de crear, o sea, una imagen que aparezca a la izquierda de la barra de título y en la barra de tareas cuando esté minimizada. Para conseguir esto, hemos de introducir una serie de líneas de código en nuestra clase Login. Así que nos vamos a la parte inferior de el área donde estamos diseñando, donde pone Source, Desgin, History y elegimos la primera etiqueta (Source). Nos aparecerá el código de nuestra ventana Login, que actualmente tan sólo debe estar formado por el constructor de la clase y por el método jbInit(), que como sabes se ejecuta cada vez que se invoca el constructor, o sea, cada vez que tiene lugar una sentencia ... new Login(). A continuación, introducimos un nuevo atributo en nuestra clase llamado icono, y una nueva sentencia en el método jbInit() del formulario Login, debe quedar algo como lo que sigue (en negrita lo que debemos introducir): public class Login extends JFrame { private JTextField jtxUsuario = new JTextField(); private JTextField jtxPass = new JTextField(); ... private ImageIcon icono = new ImageIcon(getClass().getResource(“images/icono.png”)); private Image miImagen=icono.getImage(); public Login() { ... } private void jbInit() throws Exception { ... this.setIconImage(miImagen); ... } 67 Por supuesto, tanto la imagen como el directorio deben existir. Si te fijas, la imagen está guardada en un directorio llamado images que está dentro del directorio src, al mismo nivel de jerarquía que la carpeta view de nuestro proyecto. Al introducir el código, JDeveloper te indicará mediante un globito rojo en la parte izquierda de la ventana los paquetes que son necesarios importar para las clases que estés utilizando, javax.swing.ImageIcon y java.awt.Image para las clases ImageIcon e Image, respectivamente. Todo esto queda reflejado en modo visual si nos vamos a las propiedades del formulario, veremos que en la propiedad iconImage aparece miImagen como icono de la barra de título. Clase Principal Una vez que hemos creado nuestra ventana de entrada necesitamos añadir una clase principal que contenga la aplicación y que tenga asociada la interfaz gráfica anterior. Para ello hay que seleccionar proyecto (carpeta) view y hacer click File, click New y dentro de Client Tier ( Swing/AWT escoger Java Application, darle un nombre (por ejemplo Principal), e indicar que se le desea añadir un frame por defecto. Seleccionar la opción "Existing frame" y, tras pulsar el botón "Browse" escribir el nombre del frame con la interfaz gráfica, que en este caso es Login. Conviene dejar activa la caja de comprobación "Center frame on screen" para que el frame aparezca justo en el centro del monitor cuando se ejecute la aplicación. 68 Ya estamos preparados para ejecutar la aplicación. Para ello seleccionamos previamente en el navegador de objetos la clase con la aplicación (Principal), y hacemos Run. Creación de la interfaz gráfica de usuario (GUI) mediante JFC/Swing En los apartados anteriores hemos creado una ventana de Login para nuestra aplicación y una clase lanzadora llamada Principal. Ahora necesitamos crear la interfaz gráfica de la que constará nuestra aplicación, que aparecerá una vez que el usuario haya introducido los datos de acceso correctos. Para ello en el IDE JDeveloper crear la ventana de menú y la típica ventana de "Acerca de..." prácticamente de forma automática. Esto lo conseguimos haciendo clic con el botón derecho sobre View o clic en el menú File, escogiendo la opción de New y dentro de Client Tier ( Swing/AWT. Así podemos crear un nuevo frame y escoger si queremos que tenga barra de menú, barra de herramientas, barra de estado o cuadro de diálogo "Acerca de". Elegiremos todas las opciones. Rápidamente podemos comprobar cómo se han creado dos nuevas clases, menu.java y menu_AboutBoxPanel1.java. 69 Ahora sólo te recomendamos que cambies las imágenes que se han creado de sitio y las introduzcas en la carpeta Images que está al mismo nivel de jerarquía que la carpeta view de nuestro proyecto. ¿Sabrías qué parte del código de la clase menú.java hay que modificar para que haga referencia a la nueva ruta de las imágenes? Seguidamente introduciremos el siguiente código en el evento MousedClicked del control btAceptar de la ventana de Login: try{ boolean acceso =this.hacerLogin(this.txUsuario.getText(), this.txPass.getText()); if (!acceso) { this.lbAcceso.setText("Acceso denegado"); } else { menu ppal = new menu(); // creamos la ventana ppal que es de tipo menú ppal.setVisible(true); // y la visualizamos this.setVisible(false);// ocultamos la ventana de login } } catch (Exception ex) { ex.printStackTrace(); } De esta forma, cuando el usuario introduzca los datos de acceso correctos y le dé al botón Aceptar, se lanzará la clase menu.java que contiene la interfaz de la aplicación. El método hacerLogin lo introduciremos dentro de la clase Login y lo único que hará por ahora será validar el usuario y la contraseña: public boolean hacerLogin (String u, String p) { if (u.equals("invitado") && p.equals("invitado")) return true; return false; } Nos vamos a la clase Principal y con el botón ejecutamos la aplicación, o bien con F11. Introducimos el usuario y contraseña (invitado - invitado) y comprobamos cómo al darle a Aceptar se muestra la 70 interfaz gráfica, y también el cuadro de información que se obtiene al pulsar el menú Help. Observarás que la ventana de menú se ha visualizado en tamaño pequeño y en la esquina superior izquierda de la pantalla. Nos interesa que se visualice de forma maximizada y que, si se restaura, aparezca en el centro de la pantalla. Esto nos va a interesar para todas las ventanas que hagamos, por lo que decidimos crear una nueva clase cuyo código puedan utilizar todas las ventanas que lo necesiten. Llamamos a la clase pantalla y el código puede ser algo como lo siguiente: public class pantalla { public pantalla() { } static void centrar(JFrame f) { // Calculo el tamaño de la pantalla y de la ventana Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = f.getSize(); // Si es mayor, igualo el tamaño de la ventana al de la pantalla if (frameSize.height > screenSize.height) { frameSize.height = screenSize.height; } if (frameSize.width > screenSize.width) { frameSize.width = screenSize.width; } // Sitúo la ventana en el centro de la pantalla f.setLocation( ( screenSize.width - frameSize.width ) / 2, (screenSize.height frameSize.height ) / 2 ); f.setVisible(true); } static void maximizar(JFrame f){ int state = f.getExtendedState(); state |= f.MAXIMIZED_BOTH; // Maximizamos el frame f.setExtendedState(state); } } Podemos utilizar este código cada vez que creemos una ventana nueva, tan sólo tendremos que hacer: pantalla.centrar(miventana) o pantalla.maximizar(miventana). 71 El resultado es que hemos creado una ventana de menú que aparece centrada y maximizada cuando el usuario introduce los datos correctos de acceso, y un cuadro "Acerca de". Al comienzo de la presentación se te muestran las clases que tiene hasta este momento nuestra aplicación: Principal.java y Login.java, para luego continuar creando una nueva ventana llamada "Gestion de Taller" CAMBIOS EN LA INTERFAZ Llegados a este punto tenemos la ventana menú y el cuadro "Acerca de" que ha creado JDeveloper. Ahora es el momento de hacer los cambios necesarios para adaptar estas ventanas a nuestra aplicación y crear nuevas ventanas para dotar de contenido y consistencia a nuestro proyecto. Vamos a realizar algunos cambios en nuestra aplicación. Estos cambios podremos realizarlos dirigiéndonos a la pestaña Source del formulario que queramos modificar, o por ejemplo arrastrando desde el grupo Swing o Swing Containers de la Paleta de Componentes. PANTALLA DE BIENVENIDA La pantalla de bienvenida o ventana splash es una práctica habitual en las aplicaciones de hoy en día. Usar una ventana splash es una forma de avisar al usuario de que algo está ocurriendo en la aplicación durante el periodo de arranque. § Algunas ventanas splash pueden ser cerradas pinchando en cualquier lugar de la ventana, § otras se cierran solas y § otras permanecen después que la aplicación haya comenzado. Vamos a lanzar primero la ventana splash y después la ventana de Login. En primer lugar vamos a crear un JPanel (File/New/Swing/AWT ( Panel) que contenga lo que queremos que muestre la ventana splash, que va a ser tan sólo una barra de progreso utilizando el componente Swing JProgressBar. Seleccionamos 72 los valores mínimos y máximos de la barra de progreso en 0 y 40, respectivamente (propiedades minimium y maximium). También se pueden seleccionar estos valores con los métodos setMinimum y setMaximum, o en el constructor al crear la barra de progreso. La propiedad StringPainted hace que la barra de progreso muestre un String (cadena) de porcentaje dentro de sus límites. Por defecto, la cadena indica el porcentaje completo de la barra de progreso. El String de porcentaje es el valor devuelto por el método getPercentComplete formateado a porcentaje. Otra alternativa es mostrar un String diferente con setString. Para ir cambiando el valor de la barra de progreso utilizamos un temporizador (un ejemplar de la clase Timer). Este objeto se arranca con el método Start() y dispara un evento action cada segundo. El método oyente del evento action es ActionPerformed y lo que hace es llevar un contador para ir modificando el valor de la barra de progreso. El código completo lo mostramos a continuación. Observa que el JPanel que hemos creado tiene un método main(), con lo cual ya no necesitamos la clase Principal para lanzar nuestra aplicación, sino que se lanzaría desde ésta nueva clase llamada Inicio. public class Inicio extends JPanel implements ActionListener { private Timer timer = new Timer(100, this); private JProgressBar barraprogreso = new JProgressBar(); private int cont=0; public Inicio() { try { jbInit(); } catch (Exception e) { e.printStackTrace(); } } private void jbInit() throws Exception { barraprogreso.setBounds(new Rectangle(80, 235, 230, 15)); barraprogreso.setStringPainted(true); barraprogreso.setMaximum(40); this.add(barraprogreso, null); this.actionPerformed(null); this.timer.start(); this.setBackground(new Color(115, 147, 245)); 73 this.setLayout(null); } public void actionPerformed(ActionEvent e) { this.cont=this.cont+1; this. barraprogreso.setValue(cont); } public static void main(String[] a){ JWindow f = new JWindow(); //creo una ventana sin barra de título f.add(new Inicio()); //añado el JPanel a la ventana f.pack(); f.setSize(400,300); f.setVisible(true); //aquí mejor usar el método pantalla.centrar JFrame f2 = new Login(); // creamos la ventana de login try { Thread.sleep (5000); } catch (Exception e) {} pantalla.centrar(f2); f.setVisible(false); //cerramos la ventana splash } } Pues bien, ya hemos conseguido crear nuestra ventana splash. Si la ejecutamos verás que no queda centrada, y además, nos interesaría que apareciera también una imagen característica de la aplicación. Centrar la ventana se puede hacer con nuestra clase pantalla.java, sobrecargando el método centrar() para que pueda servir también para objetos JWindow. Para poner una imagen de fondo en un JPanel debemos sobrecargar el método public void paintComponent(Graphics g) para que dibuje la imagen que queramos. La imagen de fondo la puedes crear con un programa de manipulación de imágenes sencillo como es GIMP. En nuestro ejemplo lo que hemos hecho es crear un fondo degradado y añadir una imagen característica y el título y versión de la aplicación. 74 4.2. Desarrollo De Aplicación Conversión de Temperatura Si la ventana de Applications Navigator no está abierta, entonces eligir: View, Application Navigator Seleccione Applications en la ventana del Navegador de Aplicaciones Hacer click derecho y seleccionar New Application en menú contextual JDeveloper mostrará su cuadro de diálogo Create Application. .-Introducir un Nombre de aplicación: convierteCelsiusFarenheit .- Haga clic en el botón ACEPTAR. JDeveloper mostrará su cuadro de diálogo Create Project .- Introduzca un Nombre del proyecto: conversionCF .-Haga clic en el botón Aceptar. RESULTADO Crear una nueva Aplicación y Frame Seleccione el proyecto convierteCelsiusFarenheit en la ventana de Application Navigator. .- Click derecho sobre nombre proyecto .- click New 75 JDeveloper mostrará cuadro de diálogo New Gallery. Ampliar el nivel de clientes en el nodo de árbol de las categorías de la New Gallery del cuadro de diálogo. Seleccione Swing / AWT en el árbol de categorías. Elija de Java Application de la lista de artículos. Haga clic en el botón Aceptar JDeveloper muestra el cuadro de diálogo de Create Java Aplication. Introduzca un Nombre: frmconversionCaF en el cuadro de diálogo de Crear aplicaciones Java. java.lang.Object indica que es la clase base de la cual hereda la nueva clase que estamos creando. Agregar el formulario (ventana) predeterminado cuya casilla está marcado. Esto permite crear una instancia del formulario en esta clase que contiene el void main(…) La casilla de Center Frame ( formulario) en la pantalla, está marcado. Haga clic en el botón Aceptar. JDeveloper muestra el cuadro de diálogo Create Frame. Introducir en name: frmConversion Observe que la lista desplegable contiene javax.swing.JFrame ya que están creando una clase que hereda de JFrame Escribir un título para la ventana: Conversión de Celsius a Fahrenheit Haga clic en el botón Aceptar Si desea puede activar casillas de verificación que indican: MenuBar( Barra de Menús), Tool Bar (Barra de Herramientas), Status Bar (Barra de Estado) About Box (Acerca de), esta última crea una clase aparte con una ventana o formulario. 76 En la ventana de aplicaciones debe mostrar las dos clases creadas dentro del paquete temperatura: Si deseamos modificar el nombre del la clase que contiene el void main, procedemos de la siguiente manera: Botón derecho en frmconversionCaF.java Click en Refactor Click en Rename…. Aparece ventana de dialogo: Rename frmConversionCaF Sobrescribir nuevo nombre: ConversionCaF Click en Aceptar, aquí busca todas las ocurrencias de frmConversionCaF y las reemplaza por ConversionCaF en todo el proyecto. Hacer doble click en ConversionCaF.java de la ventana de aplicaciones Y aparece seleccionado pestaña Source de la ventana que muestra el código generado hasta ahora por el JDeveloper. //programa que contiene main: ConversionCaF.java package temperatura; import java.awt.Dimension; import java.awt.Toolkit; import javax.swing.JFrame; import javax.swing.UIManager; public class ConversionCaF { public ConversionCaF() { JFrame frame = new frmConversion(); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = frame.getSize(); if (frameSize.height > screenSize.height) { frameSize.height = screenSize.height; } if (frameSize.width > screenSize.width) { frameSize.width = screenSize.width; } frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } public static void main(String[] args) { try { 77 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } new ConversionCaF(); } } Hacer doble clic en frmConversion.java en la ventana de Application Navigator. Seleccione la etiqueta Fuente (Source) Debe mostrar el siguiente código generado: package temperatura; import java.awt.Dimension; import javax.swing.JFrame; public class frmConversion extends JFrame { public frmConversion() { try { jbInit(); } catch (Exception e) { e.printStackTrace(); } } private void jbInit() throws Exception { this.getContentPane().setLayout( null ); this.setSize( new Dimension(400, 300) ); this.setTitle( "Conversion de Celsius a Farenheit" ); } } CREAR INTERFAZ GRAFICA Hacer clic en la pestaña Design de la ventana frmConversion.java Para ir a la ventana de diseño Ubicar la paleta de componentes Si fuera necesario para activarla hacer: Click View Click Component Palette Diseñar la siguiente Interfaz Insertar JLabel: Hacer click en de la paleta de componentes 78 Dibujar un rectángulo sobre la ventana en una ubicación adecuada, tal como lo muestra la figura Propiedades del objeto (property Inspector) Haciendo click derecho sobre objeto JLabel Click Property Inspector Aparece cuadro de dialogo de propiedades Elegir propiedad Text Escribir en lado derecho de esta propiedad text: Grados Celsius De la misma forma se procede con las otras etiquetas de la ventana Alinear Etiquetas (JLabel) de la ventana: .- Seleccionar etiquetas con títulos: Grado Celsius y Grados Fahrenheit, manteniendo presionado tecla CTRL y hacer click en cada etiqueta, tal como lo muestra la figura. De la barra de herramientas hacer click en el ícono Align Right tal como muestra figura y automáticamente se alinearan los objetos Siguiendo el ejemplo de las etiquetas (JLabels) agregar: Objeto JTextField JTextField JButton JButton name Text txtgradosCelsius txtgradosFharenheit btnCalcular Calcular btnSalir Salir La interfaz debe quedar Font 12,Dialog,Bold 12,Dialog,Bold 79 4.3. Creando Tablas El objetivo de este ejemplo es describir el proceso para crear una aplicación de escritorio en Java utilizando JDeveloper, la cual mostrará la información en un JTable. Seleccionamos la clase que contiene el frame para nuestra aplicación y aparecerán las siguientes vistas: Code Editor Esta vista aparece en el centro del JDeveloper y tiene como objetivo permitirnos crear y modificar el código de nuestra aplicación. Comúnmente nos muestra el código de Java de la aplicación, sin embargo en clases que sean: Marcos (Frames) , Dialogos (Dialogs) o Paneles (Panel) nos mostrará el diseño de estos. Ahora observemos que nos aparecerá en la sección de código la vista del marco que estamos diseñando. Es muy importante hacer notar que el editor de interfaz de JDeveloper, en su parte inferior encontraremos 3 pestañas: · Source: Nos muestra el código de la clase que estamos implementando. · Design: Nos muestra como luce la vista del marco que estamos diseñando. · History: Nos muestra el histórico de cambios del archivo. Structure. La cual tendrá unas carpetas que indicarán: · UI: Es la estructura de los componentes que aparecen en pantalla, en nuestro frame. 80 · Menu: En caso de hubiésemos seleccionado un menú en la pantalla de configuración de la aplicación, en esta sección aparecen los elemento del Menu superior. · Other: Aquí podemos encontrar las imágenes o elementos como models, arrays que utilizamos en nuestra vista. Nuestro primer objetivo es asignarle a la vista un Layout, que nos permita organizar los componentes de nuestra interfaz gráfica. Component Palette Esta es una vista muy importante para el desarrollo de este manual es la Paleta de componentes, en la cual podemos encontrar los componentes que tenemos disponibles para nuestra aplicación de Swing. Es muy importante señalar que en la parte superior está vista cuenta con un selector de tipos de componentes. En ese selector podemos encontrar los Swing containers, componentes que pueden contener a otros. Y la paleta de Swing, todos los componentes como botones, cuadros de texto, los JTable, etc. Agregando el JTable Una vez creado el proyecto, es necesario diseñar el layout que va a tener nuestra a aplicación, por lo cual nos vamos a apoyar en la imagen anterior de JDeveloper. En la vista de Structure debemos seleccionar la carpeta de UI -> this -> panelCenter. Una vez que haya sido seleccionado debemos utilizar en inspector de propiedades Property Inspector, donde buscaremos la propiedad de layout y le asignaremos el BorderLayout. En el layout seleccionaremos en la Paleta de componentes la categoría de Swing Containers, de la cual utilizaremos el JScrollPane, que nos ayudará a proveer de Barras de Scroll al JTable y proveer de encabezados al JTable, ya que si una tabla no está dentro de un JTable, está no mostrará los encabezados. Para terminar con la interfaz gráfica seleccionaremos en la Paleta de componentes la categoría de Swing, para agregar el JTable en nuestro JScrollPane. Cuando realicemos estos pasos es conveniente observar siempre la vista de Structure, para corroborar que nuestra interfaz gráfica tenga la estructura correcta. Nota: Es importante renombrar los componentes de manera que tengan nombres claros, esto se puede lograr seleccionando el componente en la vista de Structure y utilizando el segundo botón del mouse y seleccionar la opción de Refactoring. Aparecerá un dialogo en el cual podemos cambiar el nombre del componente. O 81 bien podemos utilizar la vista de Inspector de propiedades y modificar la propiedad name. Creando el Table Model Con la interfaz gráfica diseñada es tiempo de utilizar el tab de código de nuestro editor, asignar al JTable los encabezados y de registros. En Swing hay dos formas de enviar esta información a un JTable: · Usando un par de arreglos o Un array unidimensional (Object[]) para los títulos o Un array bidimensional (Object[][]) para los registros · Usando Vectores o Un Vector de objetos para los títulos o Un Vector de Vectores para los registros, en el cual habrá un vector por cada registro. Para este ejemplo se utilizarán arreglos. Arreglo para los titulos /** * Indica cuales serán los títulos del JTable. * Se utiliza un arreglo statico y final, debido a los títulos * no cambiarán con el paso del tiempo. */ public static final String[] titulos = {"Usuario", "Nombre", "Departamento"}; Arreglo de los registros /** * Se inicializa un arreglo bidimensional para simular el contenido de la * tabla */ public String[][] registros = { {"aperez","Adrian Perez", "Contabilidad"}, {"jlopez","Jesús Lopez", "Administrativo"}, {"cramos","Claudia Ramos", "Recursos Humanos"}}; Una vez que tenemos los títulos y los registros es necesario crear un TableModel, el cual es una interfaz que describe como deben realizarse las operaciones de actualización en un JTable. En este caso se utiliza un DefaultTableModel que es una implementación sencilla pero útil para muchos de los escenarios con los que trabajamos. Sin embargo si los elementos que vamos a desplegar son muchos y la 82 actualización es muy frecuente quizás sea necesario crear una implementación propia que cumpla con nuestras necesidades. DefaultTableModel model = new DefaultTableModel(); Aplicando el Table model al JTable Una vez que ya contamos con el TableModel, el JTable en la interfaz Gráfica, es necesario realizar la asignación de los títulos y registros al TableModel y el TableModel al JTable. Para la cual nos posicionaremos en el método que inicializa la interfaz gráfica en una aplicación desarrollada con el JDeveloper, jbinit(). private void jbInit() throws Exception { this.getContentPane().setLayout( layoutMain ); // Asignamos los titulos y los registros al table model model.setDataVector(registros,titulos); // El table model es asignado al jTable de la aplicación lista.setModel(model); // Continua el código de inicialización } Por último ejecutamos la aplicación presionando siguiendo los pasos del ejemplo de creación de una aplicación de JDeveloper. La aplicación creada luce de la siguiente manera: 4.4. Base de Datos 4.4.1. Conexión a la Base de Datos 1. Para hacer las pruebas, usaremos Access. Proceda a crear la Base de Datos Ventas, en ella creará la tabla Socios con los siguientes campos: codigo char(3) 83 nombre char(50) direccion char(80) telefono char(10) 2. En Windows usando ODBC creamos un dns al que llamaremos “dns_mdb” hacia la base de datos access Ventas.mdb 3. Crear una nueva aplicación 4. Habilite el panel Connection Navigator 5. En la seccion Database haga Clic derecho e inicie con la creación de una Nueva conexión. Asigne un nombre a la conexión y luego indique el tipo de conexión: Bridge JDBC-ODBC Marque siguiente, como la base de datos Access no requiere autentificación, deje en blanco los cuadros de texto usuario y clave. 84 6. Ahora debe anotar el nombre del dns creado: 7. Verifique si los parámetros ingresados son los correctos, presionando el boton Test 8. Inspeccione en la seccion Database y debera ver las tablas, al hacer doble click accedera a la estructura de dicha tabla 85 9. En la parte inferior del panel que muestra la estructura se muestra una pestaña que indica Data, desde ella podrá acceder a los registros 4.4.2. Creando una Interfaz de Acceso a la Base de Datos 1. Inicie un nuevo proyecto 2. Creamos un diagrama de componentes de negocio 86 3. Asigne un nombre al diagrama 4. En el panel Connection Navigator, ubique la tabla Socios 5. Arrastre la tabla Socios al diseñador 87 6. Se habra creado: 7. Ahora vamos a crear el código del componente 8. Dígale siguiente a cada uno de los pasos: 88 9. Finalmente Terminar 10. Active el panel Database Control Panel, desde el View, este panel le mostrara cada uno de los campos: 11. Ahora vamos a crear un formulario: 89 12. Señalamos el nombre para el formulario: 13. Luego arrastre los campos desde el panel Database Control Panel 90 14. Haga el mismo procedimiento pero arrastrando tabla 15. Finalmente obtendrá el siguiente diseño 16. Ejecute 91 Ejemplo 3: Otra forma 1. Creamos un formulario: 2. Indicamos la plantilla: Single Columns 3. Seleccione los campos a mostrar: 92 4. Obtendrá el siguiente diseño: 5. Ejecutamos 93 BIBLIOGRAFÍA 1. Cuenca Jiménez Pedro Manuel, "Programación en Java". Ediciones Anaya Multimedia. 1997. 2. Framiñán Torres José Manuel. "Manual Imprescindible de Java". Ediciones Anaya Multimedia. 1997 3. Froufe Agustín: Java 2, Manual de Usuario y Tutorial 4. Gosling J., K.Arnold: Java Didáctica y Programación, Addison-Wesley Primera edición, Marzo de 1997 5. "JDK 1.2 Documentation". www.sun.com. 1997. (Documentación de la API de Java del JDK). 6. Sanz Alamillo Javier. "Novedades y cambios con Java 2". 7. Vasquez Julio, Balta Victor: “Guia de programación Java 2” BIBLIOGRAFÍA ELECTRONICA 8. Portal de JDeveloper www.jdeveloperla.com 9. Pagina oficial de JDeveloper http://www.oracle.com/technology/products/jdev/index.html 10. Características de JDeveloper http://wiki.cetechihuahua.gob.mx/index.php/IDE-JDeveloper" 11. Java® 2 SDK, Standard Edition Documentation. http://java.sun.com/j2se 12. History of JDeveloper Releases. http://radio.weblogs.com/0118231/stories/2005/02/25/historyOfJdeveloperR eleases.html 13. Aplicaciones Java Swing con ORACLE JDeveloper http://indomable.wordpress.com/2007/11/04/aplicaciones-java-swingcon-oracle-jdeveloper-101310-clase-1/ 14. Wikepedia Enciclopedia Libre http://es.wikipedia.org/wiki/JDeveloper" 94 ANEXOS Tips en JDeveloper 1.- Como Crear un JAR · Primero debe desarrollar la aplicación · Elegir el proyecto del cual debe estar definida la clase principal · Ir a File · Ir a New · Ó En Nombre de proyecto: Hacer anticlick · Ir a General · Seleccionar deployment profiles · Seleccionar JAR File · Seleccionar Aceptar · Escribir nombre de deployment miJar · Seleccionar Aceptar · Aparece JAR Options · En Main Class seleccionar Browse · Seleccionar HIERACHY · Seleccionar DM · Elegir nombre de clase principal · Aceptar Resultado · Se crea miJar.deploy · Hacer anticlick en miJar.deploy · Seleccionar Deploy To Jar File Si tiene errores no crea JAR en caso contrario ya tenemos nuestro JAR 2.- Como incluir una librería · · · clik Tools click en Configure Palette (configura paleta componentes) En panel izquierdo click add (para agregar un nombre al paquete ejemplo swing containers) 95 · · · · · · · · · · Escribir el nombre de la nueva opción Seleccionar page type ……… java Seleccionar aceptar En panel derecho click add (para agregar clases a la nueva opcion ejemplo jbutton) De la lista library elegir swing and awt De la opción javax elegir swing Hacer click Joptionpane Seleccionar instalar - si Seleccionar aceptar Si no desea seguir agregando entonces aceptar y salir de la ventana de configuración 3.- Importar un Jar · Hacer anticlick sobre el nombre de un proyecto ejemplo: xxx.jpr · En el arbol ir a Profiles/Development/Libraries · Una vez ahí en la parte derecha de la pantalla deberás hacer un new.. · Aparecerá una ventana en la que debes incluir la ruta del .jar que deseas añadir a tu proyecto. · Seleccionar el nombre del Jar · Seleccionar aceptar 4.- Aplicación Java Swing En este ejemplo trataré de detallar al máximo cada paso a realizarse así como iré señalando algunas ayudas con las que cuentas este IDE, y dar doble clic el jdeveloper para poder comenzar a trabajar. 96 Luego de la pantalla de carga aparecerá la pantalla principal y damos clic derecho dentro de Applications Navigator en Applications y seleccionamos New Application… Nos aparecerá la siguiente pantalla en la cual en el campo Application Name pondremos nuestro nombre de la aplicación para este ejemplo realizaremos una aplicación para un departamento médico en el Directory Name se especifica la dirección en donde se alojará nuestro Proyecto, dentro de Application Package Prefix pondremos una abreviatura para identificar nuestro proyecto (para este ejemplo use el prefijo dm), en el Application Template seleccionaremos entre el menú la opción Java Application [Java,Swing] y pulsamos en Aceptar. 97 El resultado será el siguiente: Para desarrollar una aplicación con una interfaz gráfica de usuario no podemos descuidar la parte del modelado de clases principales que es la que nos proveerán del conocimiento necesario que será necesario para desarrollar nuestra aplicación como por ejemplo las clases persona, paciente, etc., realizaremos una aplicación aplicando el Modelo Vista Controlador, realizaremos nuestro diagrama de clases para esta aplicación. 98 Ahora damos un clic derecho en Client y seleccionamos la opción New… En esta pantalla seleccionamos dentro de las categorías La opción Diagrams y dentro de Ítems la opción Java Class Diagram y pulsamos Aceptar. En esta pantalla pondremos un nombre a nuestro diagrama en Name y pulsamos Aceptar. (Para este ejemplo el nombre del diagrama es DiagramaDM). 99 Ahora nos dirigimos a la paleta de componentes (Component Palete) y damos un clic en Java Class Ahora damos un click en cualquier parte del área para dibujar nuestro diagrama y ponemos el nombre de nuestra clase, es este caso: Persona veremos que también en el navegador nuestra clase persona ya creada. Ahora damos dos clicks en la parte designada para atributos y nos aparece un mini pantalla para escribir aquí los atributos como es una aplicación sencilla solo pondremos un par de atributos como: nombres, apellidos, sexo, estado civil. 100 Ahora damos un click fuera del área de dibujo y luego damos doble click en Persona y podemos ver nuestros atributos escritos, para generar los métodos accesores: Get y Set de cada atributo, damos un click derecho en cualquier área limpia y seleccionamos la opción: Generate Accessors… Ahora seleccionamos todos nuestros atributos y pulsamos aceptar y podemos ver como todos estos métodos aparecen ya codificados en nuestra clase. Regresamos a nuestro diagrama y creamos en esta ocasión la clase Paciente y esta clase será una clase hija de la clase Persona, para eso haremos uno de la flecha Extends que nos provee la paleta y haremos un marcado desde la clase Paciente hasta la clase Persona. 101 Ahora pondremos un par de atributos como: Observaciones y antecedentes. Crearemos también la clase FichaMedica con los siguientes atributos: Numero de Ficha y Paciente, observe como al momento de fijar el atributo private Paciente paciente; se crea la relación entre las 2 clases : Paciente y FichaMedica. 102 Como en esta aplicación haremos que los datos posteriormente se guarden en un archivo haremos que cada una de estas clases implemente la interfaz serializable de la siguiente manera: dando click derecho en cada clase y seleccionando Source y Luego Implement Interface… como se muestra en la figura adjunta. Luego en la pantalla que se nos presenta escribir Serializable, en el momento de comenzar a tipiar comienza a aparecer este nombre de interfaz en la parte inferior pudiendo seleccionar el del paquete java.io y listo. Ahora solo nos resta crear la clase ListaDeFichas la cual no poseerá constructor. ¿Por qué no crearemos un constructor para esta clase? Porque esta será la clase que poseerá los métodos de : guardar, actualizar, abrir, eliminar, eliminar todos y mostrar los elementos en una tabla, por ejemplo para guardar una FichaMedica (ficha) nosotros crearemos una instancia de FichaMedica, a este objeto ficha creado le asignaremos los datos de numero de ficha y paciente; datos que serán recogidos 103 de nuestra interfaz gráfica de usuario que la construiremos en breve; este objeto ficha se almacenará de la siguiente manera: ListaDeFichas.guardar(ficha); entonces no necesitaremos instanciar en cada momento la clase ListaDeFichas ya que crearemos métodos estáticos para operar las fichas; entonces nuestra clase ListaDeFichas tendrá un atributo estático del tipo Vector<FichaMedica> en el que se operarán las fichas. Por el momento el cuerpo de esos métodos estarán vacíos hasta que los necesitemos. Nuestro diagrama quedará de la siguiente manera por el momento. Para compilar y guardar todo lo que hemos hecho en esta clase daremos un click en el icono a manera de dos disquetes o en cada clase daremos un click en el icono del 104 disquete o Ctrl+S; esta herramienta también nos provee de ayudas como: un historial History con el cual podemos ver todos los cambios que ha ido sufriendo nuestra clase, un Source en el cual podemos ver todo el código fuente de nuestra clase y un Design en el cual se visualizará de una manera gráfica los componentes de nuestra clase en caso que puedan ser vistos, esta ayuda nos servirá cuando diseñemos nuestras clases java Swing (interfaces gráficas de usuario). En esta pantalla dentro del Output Directory copia la línea justo hasta antes de que comience el nombre de tu proyecto y pulsa Aceptar: (Para mi caso copie: D:\Archivos de Programa\jdevstudio10131\jdev\mywork). 105 Posteriormente abre por ejemplo “Mi PC” y en la parte de Dirección tipea o copia la dirección antes mencionada “D:\Archivos de Programa\jdevstudio10131\jdev\mywork” da un enter y podrás ver a nuestro proyecto físicamente. 106 Para importar una aplicación haremos los siguiente, nos dirigimos a nuestra carpeta jdevstudio10131 donde se encuentra nuestro IDE luego vamos a la carpeta jdev y por último a mywork y ahí pegamos la aplicación (si la aplicación la tenemos como un archivo con extensión .zip o tar, rar , o cualquier tipo de formato que indique compresión debemos descomprimir el archivo y pegar la carpeta resultante en esta dirección). Una vez hecho esto solo resta que el IDE lo reconozca dentro del Applications Navigator para eso damos un click derecho en Applications y seleccionamos la opción Add to Applications… 107 Seleccionamos el proyecto a importar y pulsamos Open y en la siguiente pantalla seleccionamos el archivo con extensión .jws y pulsamos Open y listo ya estará nuestra aplicación en el Applications Navigator lista para poder ser operada. Nota: Este proyecto ha sido obtenido de Internet de la dirección: http://indomable.wordpress.com/2007/11/04/aplicaciones-java-swing-conoracle-jdeveloper-101310-clase-1/ Nosotros los autores del manual, consideramos que este ejemplo incluido en el anexo, sera de ayuda para los alumnos de nuestra Universidad Nacional de Piura por lo que se incluye en este trabajo