Vous êtes sur la page 1sur 135

Facultad de Ingeniera Industrial Departamento de Ingeniera Informtica

RESPONSABLES DEL PROYECTO:

Ing. Jorge L. Sandoval Rivera. Ing. Pedro Criollo Gonzles

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

ndice
Pg. Resumen Introduccin Materiales y mtodos Resultados y discusin Conclusiones y recomendaciones

Esquema del contenido

Capitulo I: Conceptos Bsicos


1.2.3. 4.Interfaz Grafica de Usuario Arquitectura de una aplicacin con GUI Modelo de delegacin de eventos Modelo-Vista-Controlador

13

5. Entorno de desarrollo java 6.- Bibliotecas de la API de java A. Paquetes de utilidades B. Paquetes para el desarrollo grfico C. Paquetes para el desarrollo en red 7. Herencia 7.1. Herencia Simple 7.2. Herencia mltiple 7.3. Qu se hereda? 7.4. Herencia y Constructores 7.5. Interface vs. Clase Abstracta 8. Eventos

Capitulo Ii: El Paquete AWT


2.1. Introduccion 2.2. Subpaquetes Y Estructura Del Awt 2.3. Componentes 2.3.1. Lista de componentes ms comunes de AWT 2.3.2. Clase Component a.) Tamao y posicin del componente b.) Acciones sobre el componente c.) Eventos de interaccin con el usuario 2.4. Contenedores 2.4.1. Tipo de contenedores a.- Contenedores de alto nivel ("Top-Level Containers")

25

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ b.- Contenedores intermedios c.- Contenedores especficos 2.4.2. Clase Container Componentes Y Contenedores 2.5.1. Organizacin de los componentes sobre los contenedores 2.5.2. Relacin entre componentes y eventos Gestores De Impresin Eventos De Awt 2.7.1. Eventos fsicos 2.7.2. Eventos semnticos Creacin De Aplicaciones Con Awt 2.7.1. Crear el marco de la aplicacin 2.7.1.1. Creacin de una ventana a travs de un objeto Frame 2.7.1.2. Creacin de una ventana por herencia 2.8.1.3. Creacin de ventana principal con diversas propiedades 2.7.2. Crear componentes y agregar al contenedor

2.5.

2.6. 2.7.

2.8.

Capitulo III:
3.1. 3.2. 3.3. 3.4. 3.5.

Paquete Swing

40

Introduccin Swing, jerarqua de componentes rbol de contenido de un GUI tpico Biblioteca o API de Swing Componentes y Contenedores 3.5.1. Componentes 3.5.2. Contenedores 3.6. Propiedades de Componentes 3.7. Descripcin de las clases de los componentes Swing 3.7.1. Contenedores 3.7.1.1. JFrame 3.7.1.2. JDialog 3.7.1.3. JPanel 3.7.2. Etiquetas e iconos 3.7.2.1. JLabel 3.7.2.2. ImageIcon 3.7.3. Botones 3.7.3.1. DefaultButtonModel 3.7.3.2. JButton 3.7.3.3. JToggleButton 3.7.3.4. JCheckBox / JRadioButton 3.7.3.5. ButtonGroup (Grupo de Botones) 3.7.4. Texto 3.7.4.1. JTextField 3.7.4.2. JPasswordField 3.7.4.3. JTextArea 3.7.5. Eleccin 3.7.5.1. JList 3.7.5.2. ListModel/DefaultListModel 3.7.5.3. JComboBox

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ 3.7.5.4. ComboBoxModel/ DefaultComboBoxModel 3.7.6. Rangos 3.7.6.1. DefaultBoundedRangeModel 3.7.6.2. JScrollBar 3.7.6.3. JProgressBar 3.7.6.4. JSlider 3.7.7. Otros Componentes 3.7.7.1. JOptionPane 3.7.7.2. JFileChooser 3.7.7.3. JColorChooser 3.7.7.4. JSplitPane 3.7.7.5. JTabbedPane 3.7.7.6. JToolBar 3.7.7.7 JInternalFrame 3.7.7.8. JToolTip. 3.7.7.9. JEditorPane 3.7.7.10. JPopupMenu

Capitulo III Aplicaciones con AWT y SWING


Introduccion Primeros pasos con Swing Aadir componentes a una ventana Look And Feel 3.4.1. Poner Look and Feel del sistema operativo 3.4.2. Cmo crear interfaces grficas con Look And Feel en Java 3.5. Gestores de distribucin (LayoutManager) 3.5.1. BorderLayout 3.5.2. FlowLayout 3.5.3. GridLayout 3.5.4. BoxLayout 3.5.5. GridBagLayout 3.6. Manejo de eventos 3.6.1. Elementos del modelo de eventos a) Clase del evento b) Fuentes de eventos (event sources) c) Receptores de eventos (event listener) e) Relacin de eventos con sus oyentes d) Registro e implementacin de un Listener e) Clases adaptadoras f) Clases annimas 3.7. Misceleana de programas Bibliografa Anexos 3.1. 3.2. 3.3. 3.4.

74

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

Resumen
El presente trabajo brinda los conocimientos sobre el uso de los paquetes grficos AWT y SWING, en el que podemos encontrar las clases necesarias para disear las aplicaciones tanto de propsito general asi como aplicaciones para ejecutar en una red como son los applets.

Se ha dado un enfoque mayor al uso del paquete SWING, combinando con las clases del paquete AWT, ya que estas clases de swing en su mayor parte son clases mejoradas de awt, pero que no lo remplaza totalmente a las clases del paquete AWT.

El manual esta diseado de tal manera que el aprendizaje de la programacin con interfaz grfica de usuario sea sencilla y esta estructurado de la siguiente manera:

El primer capitulo, presenta los aspectos bsicos y necesarios que permitan al alumno entender el siguiente capitulo. Aspectos como conceptos de GUI, la arquitectura de las aplicaciones y modelos que se adoptan para disear programas, entornos de desarrollo denominados IDEs que facilitan la programacin grfica, generando en su mayor parte cdigo, las diferentes plataformas en que se desarrolla java as como su biblioteca de la que dispone el programador para incluir las clases en los programas respectivos.

El segundo capitulo esta enfocado bsicamente a brindar el soporte teorico que proporciona el paquete grfico AWT, sobre los modelos en que se basa la programacin grfica, la definicin de el elemento principal de un programa como es el componente a partir del cual se deriva el contenedor y todas las caracteristicas que conlleva el

contexto de estos objetos, terminando con algunos ejemplos bsicos debido a que la mayora de ejemplos combinan las clases de los paquetes SWING con AWT.

El tercer capitulo esta diseado para describir las principales clases del paquete SWING con el soporte teorico del paquete AWT, as como las propiedades y mtodos principales de estas clases. Tambin se presentan ejemplos de aplicaciones sobre los diversos objetos de las clases descriptas anteriormente.

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ El cuarto capitulo trata la programacin bsica con applets, descripcin de los diferentes elementos que intervienen en la ejecucin de estos tipos de programas como el programa objeto, las pginas web, navegadores, etc. Tambin se proporciona ejemplos de applets con el uso de componentes bsicos, mencionados en los capitulos anteriores.

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

Introduccin
En la actualidad los lenguajes de programacin considerados como bases para formar y crear una estructura slida de conocimientos en los profesionales de la informtica en el rea de programacin, han ido actualizando de acuerdo a las metodologas existentes para disear un programa que pueda requerir de todas las caractersticas necesarias y el acceso al uso del hardware de una computadora. La exigencia, cada vez mayor, de contar con interfaces graficas de usuario (GUIs) sencillas, claras y potentes exige a los programadores un gran esfuerzo para conseguir los resultados ptimos; (entendiendo por GUI, al software que permite la interaccin entre el usuario y los servicios que ofrece el sistema operativo, utilizando para ello una representacin grafica intuitiva de alto nivel). Gracias al impacto que supuso la generalizacin de los entornos grficos a partir de los 80, disponemos actualmente de lenguajes de programacin muy potentes y que facilitan la tarea de los desarrolladores, no solo con la lgica del programa sino tambin con las GUIs.

La estructura de una GUI es de forma natural orientada a objetos y su programacin orientada a eventos. Es decir, se trabaja con objetos pero el flujo del programa no es secuencial respecto al cdigo, sino que se corresponde con los eventos que suceden al interactuar el usuario con la interfaz.

La interfaz de usuario es la parte del programa que permite a ste interactuar con el usuario. Las interfaces de usuario pueden adoptar muchas formas, que van desde la simple lnea de comandos hasta las interfaces grficas (IGU-GUI) que proporcionan las aplicaciones ms modernas. La interfaz de usuario es uno de los aspectos ms

importante de cualquier aplicacin.

Una aplicacin sin un interfaz fcil, impide que los usuarios saquen el mximo rendimiento del programa.

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ Este manual esta orientado hacia los alumnos de la escuela de Ingeniera Informtica de la Facultad de Ingeniera Industrial de la Universidad Nacional de Piura, del curso de Programacin II, que tienen conocimientos bsicos del lenguaje de programacin java. Finalmente el resultado de este trabajo es un resumen de las diversas fuentes de informacin sobre este tema y que han sido cuidadosamente estructurados para ponerlo a disposicin de los alumnos y todos los interesados en este tema.

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

Materiales y Mtodos
Materiales Los materiales que se han empleado los podemos dividir en dos grupos: Hardware y Software Hardware: Una computadora para el desarrollo y prueba de las clases que conforman las diferentes aplicaciones proporcionadas como ejemplos. Impresora

Software: Sistema operativo Windows XP Lenguaje de Programacin Java o Kit de herramientas: J2SDK1.5 o Entorno de Desarrollo de aplicaciones (IDE) JCreator 1.4 Office 2003 Navegador Internet Explorer 7.0 Navegador FireFox

Mtodos Se ha empleado el mtodo de investigacin analtico deductivo. Primero se realiz una recopilacin de informacin para conocer todas las clases que conforman el paquete grfico de java, determinar la jerarqua de las clases basadas en componentes y contenedores, el soporte teorico que va a permitir realizar aplicaciones robustas y seguras.

A continuacin se enfoc y analiz el problema desde el punto de vista de la facilidad que debe tener el alumno en la secuencia de aprendizaje de la programacin con interfaz grfica de usuario, para definir la estructura de este manual de programacin

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

Resultados y Discusin

Considerando los resultados de las pruebas realizadas se concluye que cuando se proporciona al alumno la informacin resumida y necesaria de todas las clases que conforman los paquetes grficos AWT y SWING de la biblioteca de java, se le hace ms sencillo escribir un programa, ya que en la mayoria de veces el alumno no tiene acceso a Internet o bibliotecas especializadas donde podemos encontrar informacin dispersa en estas fuentes. Las pruebas realizadas consiste en solicitarles a travs del profesor la creacin de programas en el lenguaje de programacin java, teniendo a la mano este manual lo cual les facilita tremendamente el diseo del programa teniendo a disposicin todas las clases que necesitar utilizar en su programa y como usar dichas clases.

Tambin se ha podido demostrar la facilidad que proporciona la programacin orientada a objetos, para crear nuevas clases a partir de las clases ya existentes por herencia lo que permite personalizar objetos como ventanas, botones, tablas, reas de textos, etc.

Asimismo se puede comprobar la facilidad de utilizar estas nuevas clases ya que para incluirlas en una aplicacin solo debes copiarlas en la carpeta del sistema operativo donde tambin esta almacenado el archivo del programa que utiliza estas clases.

Igualmente se puede comprobar la facilidad de memorizar y escribir los nombres de estas clases as como los nombres de sus mtodos ya que son nombres comunes en nuestro lenguaje que utilizamos para comunicarnos.

10

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

Conclusiones y Recomendaciones

Conclusiones:

Es factible demostrar como se reduce la complejidad de la programacin grfica en java teniendo disponible un manual de programacin de java que proporciona las clases del paquete grfico como AWT y SWING.

El lenguaje de programacin Java nos proporciona la metodologa para modelar nuevas clases a travs de la herencia, que son complemento de las clases ya existentes y que permitan un diseo de un programa en forma ms sencilla.

Cualquier aplicacin puede incluir en su entorno clases ya creadas, probadas y personalizadas como por ejemplo tener un modelo de ventana bsica con sus objetos necesarios agrupadas en un contenedor intermedio como un panel y que estarn disponibles con solo copiarlas a su carpeta de trabajo.

Aplicando el modelo-vista-controlador, se pueden definir para un mismo objeto diferentes presentaciones a travs de los diferentes modelos que se pueden aplicar a estos objetos como tablas, listas, etc.

El lenguaje de programacin Java nos proporciona la facilidad de disear programas utilizando el paquete SWING, que simplifica la escritura de cdigo que si utilizaramos solo el paquete AWT.

Utilizando un entorno de desarrollo integrado (IDE), facilita tremendamente el diseo de los programas y dependiendo del tipo de IDE se puede obtener cdigo generado el cual se puede personaliza de acuerdo a las necesidades de los usuarios programadores.

11

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

Recomendaciones:

Se puede seguir aopyando el aprendizaje de los alumnos del curso de programacin con java de la institucin anteriormente mencionada, si se presenta informacin agrupada en un manual de otros temas de programacin como: manejo de hilos o threads, manejo de base de datos, manejo de redes como internet o intranaet a travs de aplicaciones para servidor y/o cliente, etc.

Inculcar en los usuarios de este lenguaje como son los alumnos de la Escuela de Ingeniera Informtica de la Facultad de Ingeniera Industrial de la Universidad Nacional de Piura la creacin de sus propias clases o librera que realicen tareas repetitivas como busquedas, consultas, ventanas tpicas, entradas y/o salidas de datos, etc. En la programacin grfica.

Reproducir este manual para que de alguna manera ponerlo a disposicin de los alumnos de programacin grfica con java y asi facilitar el aprendizaje del mismo.

12

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

CAPITULO I: CONCEPTOS BSICOS


1.INTERFAZ GRAFICA DE USUARIO Entendemos por Interfaz Grfica de Usuario (GUI) al software que permite la interaccin entre el usuario y los servicios que proporciona el sistema operativo, utilizando para ello una representacin grfica intuitiva de alto nivel La informtica moderna no puede entenderse sin el impacto que supuso la generalizacin de los entornos grficos de usuario a partir de los 80. Hoy en da, la mayor parte de las aplicaciones destinadas a usuarios finales se realizan para este tipo de entornos La mayora de los GUIs de propsito general siguen la llamada metfora de escritorio, y utilizan un sistema de ventanas. Para la interaccin con el usuario, disponen de un nmero ms o menos grande de elementos o widgets: botones, editores, etc. Este tipo de interfaz tiene caractersticas que un lenguaje de programacin debe implementar en este tipo de entornos y en una descripcin general del cambio que supone respecto a la programacin clsica y las nuevas posibilidades que aporta. La programacin en un GUI determinado requiere el uso de un toolkit (o SDK) para ese GUI, en el lenguaje de programacin que queramos utilizar. La estructura de un GUI es de forma natural orientada a objetos. El desarrollo con un toolkit orientado a objetos es mucho ms sencillo y rpido La programacin en GUIs suele ser un proceso iterativo de tres pasos: a.- Consiste en disear la interfaz de una parte de la aplicacin, utilizando los widgets disponibles en el toolkit de desarrollo e incluye dos tareas: Posicionar los widgets y establecer sus dimensiones Modificar sus caractersticas visuales y funcionales (ttulos, colores, comportamiento).

b.- En el segundo se realiza la captura de los eventos de la interfaz que permitan implementar la funcionalidad requerida. c.- En el tercer paso, se implementa cada uno de los manejadores correspondientes a los eventos capturados

13

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ 2.- ARQUITECTURA DE UNA APLICACIN CON GUI La arquitectura de una aplicacin con GUI tiene una serie de niveles que engloban clases que realizan distintas tareas: Capa de presentacin o interfaz Capa de aplicacin o del dominio del problema Capa de persistencia

La capa de presentacin o interfaz contiene los objetos que permiten mostrar la informacin al usuario y gestionar la interaccin con el mismo. Atencin: es dependiente del toolkit (paquete de herramientas) utilizado. La capa de aplicacin o de dominio del problema contiene los objetos que modelan la solucin del problema (objetos de negocio). Es la capa ms importante y puede ser reutilizada total o parcialmente en mltiples aplicaciones similares. La capa de persistencia contiene el cdigo necesario para almacenar los objetos de negocio en bases de datos o ficheros. Puede ser dependiente de la base de datos/formato de fichero utilizado.

3. MODELO DE DELEGACIN DE EVENTOS Idea bsica: el tratamiento de un evento que ocurre en un objeto (objeto fuente) no se realiza en ese mismo objeto, sino que se delega en otro diferente.

14

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

Objeto evento Evento: objeto que encapsula toda la informacin sobre la interaccin del usuario con la aplicacin grfica Presionar un botn Introducir un texto, etc. Una interaccin del usuario puede producir uno o ms eventos Jerarqua de eventos: raz java.util.EventObject Atributo: objeto fuente en el que se ha generado el evento Mtodo: Object getSource() Objeto fuente Componente en el que se genera el evento Mtodos de manejo de oyentes set<TipoEvento>Listener(): establece un nico oyente para este tipo de eventos add<TipoEvento>Listener(): aade el objeto a la lista de oyentes remove<TipoEvento>Listener(): elimina el objeto oyente correspondiente Objeto oyente Gestiona, maneja o responde a un evento Define uno o varios mtodos que son ejecutados por la fuente del evento y reciben como argumento el objeto evento Los mtodos a implementar se definen en la interfaz Java para los oyentes de ese tipo de eventos: <TipoEvento>Listener (ej. ActionListener)

4.- MODELO-VISTA-CONTROLADOR El Modelo Vista Controlador (MVC) es un patrn de arquitectura de software que separa todo nuestra aplicacin en tres componentes distintos:

los datos de una aplicacin, la interfaz de usuario, y la lgica de control. 15

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ La motivacin bajo este patrn es la siguiente: no hacer que un nico objeto sea responsable del contenido, la apariencia y comportamiento. Este modelo esta formado por tres componentes como ya lo mencionamos:

Modelo: Esta es la representacin especfica de la informacin (El contenido o estado) con la cual el sistema opera. La lgica de datos que asegura la integridad de estos y permite derivar nuevos datos; por ejemplo, no permitiendo comprar un nmero de unidades negativo.

En un botn el contenido almacenara si el botn est pulsado o no, si est activo o no,... en un campo de texto el contenido almacenara el texto

Vista: Este presenta el modelo o contenido en un formato adecuado para interactuar, usualmente es la interfaz de usuario. La apariencia visual, depende del estado (por ejemplo, un botn se muestra de forma diferente en funcin de si est pulsado o no).

Controlador: maneja la interaccin con el usuario, respondiendo a eventos, usualmente acciones del usuario e invoca cambios en el modelo y probablemente en la vista. Su comportamiento, est determinado por la forma en que responde ante eventos

Ejemplo Pensemos en un campo de texto en el que hemos escrito la frase: En un lugar de la Mancha, de cuyo nombre no. El campo de texto puede tener un tamao (en cuanto al nmero de caracteres que puede mostrar) menor que la frase y en un momento dado puede mostrar lo siguiente:

El modelo debe ofrecer mtodos para modificar y obtener el contenido. La vista, seria el cuadro que muestra el contenido El controlador, el control de un evento como agregar un carcter al presionar una tecla, que el cuadro de texto pierda el enfoque actual, etc.

Una ventaja del patrn Model-View-Controller es que es posible tener varios view de un mismo model.

16

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ Ejemplo: Podramos realizar un componente cuyo contenido sean 3 matrices: Una almacena las coordenadas x, otra las coordenadas y otra el valor de una funcin z = f(x,y).

Un view podra mostrar los datos como una tabla:

El controller trata los eventos relacionados con el usuario tal como pulsaciones del ratn o pulsaciones de teclas. Tiene que decidir si estos eventos se deben trasladar en cambios en el model o cambios en el view. Por ejemplo si el usuario modifica un dato de la tabla, el controller notifica al model y ste notifica el view para que se actualice. Si por ejemplo ofrecemos la posibilidad de de que pulsando sobre la superficie se realice un zoom y el usuario pulsa, el controller debe notificar al view pero esta operacin no ha modificado los datos por lo que el model no interviene en ningn momento. La ventaja de esta separacin es que se consigue mayor independencia entre el contenido y la apariencia. Los patrones de diseo han de ser vistos como una gua, como una posible solucin a un problema y no como algo dogmtico (que hay que aplicar de una forma inmutable). Por lo tanto, cada componente Swing tiene un modelo y un delegado asociado con el, el modelo es responsable del estado y el delegado de la apariencia y comportamiento (look and feel) as como de la comunicacin entre el modelo y lo que se muestra.

Ejemplo: La siguiente imagen representa grficamente la interaccin entre los diferentes elementos de la aplicacin, como son: modelo, vista y controlador aplicado a un objeto de desplazamiento.

17

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

5. ENTORNO DE DESARROLLO JAVA Para desarrollar cdigo Java se requiere algn paquete de programacin Java. La compaa Sun Microsystems, creadora de Java distribuye gratuitamente el Java Development Kit (JDK), o llamado Standard Development Kit (SDK) . Se trata de un conjunto de programas y libreras que permiten desarrollar, compilar y ejecutar programas en Java. Hay varias plataformas: J2EE (Java2 Enterprise Edition) especialmente pensada para crear aplicaciones Web, J2SE (Java 2 Standard Edition) es el entorno de desarrollo de aplicaciones Java orientado a las aplicaciones solitarias y los Applets. Existe tambin una versin reducida del JDK, denominada JRE (Java Runtime Environment), destinada nicamente a ejecutar cdigo Java, no permitiendo compilar. Java WSDP es un conjunto de herramientas integradas que permite a los desarrolladores de la plataforma Java desarrollar, probar y desplegar aplicaciones XML, aplicaciones Web y servicios Web. Los IDE (Integrated Development Environment), son entornos de desarrollo integrados, en un mismo programa donde es posible escribir el cdigo Java, compilarlo y ejecutarlo sin cambiar de aplicacin. Los IDE's ofrecen un ambiente grfico en los que se tiene acceso a mayor nmero de herramientas no ofrecidas en los JDK's: Debuggers ms elaborados, check-points dentro de la compilacin, creacin de WAR'S(Web-Archives), "Wizards" para acelerar desarrollo, entre otras cosas. Algunos IDE'S son:

18

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ .- Visual Cafe de Symantec La empresa Symantec, dura competidora en los IDE de Java ofrece el entorno visual de desarrollo Java Visual Caf, que ya goza de una gran reputacin entre los desarrolladores de Java. Las principales funciones que soporta son las siguientes: Editor de programacin grfica: Editor de clases y jerarquas. Depurador grfico. Gestor de proyectos. Asistentes: .- Eclipse Open-Source Eclipse es una plataforma de cdigo abierto que se puede utilizar para disear programas de primer nivel, componentes, sitios web y muchos otros elementos. Con una cobertura integral de las funciones ampliadas de Eclipse 3. Sun One Studio ME (Se trata de una versin del entorno de Sun dedicado a desarrollar aplicaciones J2ME. Este entorno, antes conocido como Forte for Java, tiene el inconveniente de necesitar demasiados recursos, por lo que para utilizarlo necesitaremos ordenadores con bastante memoria (no menos de 256Mb). Borland JBuilder: Desde el entorno de Borland tambin podremos crear aplicaciones J2ME. A partir de la versin 9 de JBuilder, se tiene disponible una edicin Mobile para crear este tipo de aplicaciones. En versiones anteriores, podemos instalar una extensin llamada MobileSet con la que desarrollar aplicaciones mviles. Oracle Jdeveloper: El entorno JDeveloper de Oracle est destinado principalmente al desarrollo de aplicaciones J2EE. Proporciona asistentes para crear de forma sencilla los distintos componentes de estas aplicaciones como servlets, JSPs, EJBs, servicios web, etc. Maneja conexiones con bases de datos y servidores de aplicaciones para desplegar automticamente las aplicaciones desarrolladas, e incorpora su propio servidor de aplicaciones integrado para realizar pruebas en modo local. Wireless Studio Device Developer: Se trata de un entorno de desarrollo de IBM basado en Eclipse y dedicado principalmente al desarrollo de aplicaciones mviles. Tiene el inconveniente de que no se integra correctamente con algunos emuladores al ejecutar las aplicaciones. Visual Age de IBM Es una RAD (Rapid Aidded Design), permite disear la interfaz de la aplicacin o applet, y definiendo el sistema de eventos, la herramienta puede crear cdigo Java. Es muy sencillo de manejar y uno de los ms potentes del mercado.

Y otros IDE comoNetbeans, CodeWarrior de Metrowerks, Roaster de Natural Intelligence, Cosmo de Silicon Graphics, SuperCede de Asymetrix, Java Maker, Ed de Soft As It Gets, Mojo de Penumbra Software, Jamba de AimTech, etc.

19

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ 6.BIBLIOTECAS DE LA API DE JAVA Con cada una de las versiones que Sun lanza del JDK, se acompaa de una serie de bibliotecas con clases que se pueden incluir en los programas Java, sin temor a fallos de portabilidad. Adems, estn bien documentadas, y organizadas en paquetes y en un gran rbol de herencia. A este conjunto de paquetes (o bibliotecas) se le conoce como la API de Java (Application Programming Interface). A. Paquetes de utilidades

java.lang: Fundamental para el lenguaje. Incluye clases como String o StringBuffer, que se tratan ms en detenimiento en el captulo "III.2 Cadenas" de este tutorial. java.io: Para la entrada y salida a travs de flujos de datos, y ficheros del sistema. Se estudia en el captulo "III.3 Entrada/Salida" de este tutorial. java.util: Contiene colecciones de datos y clases, el modelo de eventos, facilidades horarias, generacin aleatoria de nmeros, y otras clases de utilidad. java.math: Clases para realizar aritmtica con la precisin que se desee. java.text: Clases e interfaces para manejo de texto, fechas, nmeros y mensajes de una manera independiente a los lenguajes naturales. java.security: Clases e interfaces para seguridad en Java: Encriptacin RSA...

B. Paquetes para el desarrollo grfico


java.applet: Para crear applets y clases que las applets utilizan para comunicarse con su contexto. Se estudia en el captulo "VI. Applets" de este tutorial. java.awt: Para crear interfaces con el usuario, y para dibujar imgenes y grficos. Se estudia en el captulo "IV. Bibliotecas grficas" de este tutorial. javax.swing: Conjunto de componentes grficos que funcionan igual en todas las plataformas que Java soporta. Se estudia en el captulo "IV. Bibliotecas grficas" de este tutorial. javax.accesibility: Da soporte a clases de accesibilidad para personas discapacitadas. java.beans: Para el desarrollo de JavaBeans.

C. Paquetes para el desarrollo en red


java.net: Clases para aplicaciones de red. Se estudia en el captulo "V. Java e Internet" de este tutorial. java.sql: Paquete que contiene el JDBC, para conexin de programas Java con Bases de datos. java.rmi: Paquete RMI, para localizar objetos remotos, comunicarse con ellos e incluso enviar objetos como parmetros de un objeto a otro. org.omg.CORBA: Facilita la posibilidad de utilizar OMG CORBA, para la conexin entre objetos distribuidos, aunque est codificados en distintos lenguajes. org.omb.CosNaming : Da servicio al IDL de Java, similar al RMI pero en CORBA

20

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ 7. HERENCIA La idea de la herencia es permitir la creacin de nuevas clases basadas en clases existentes. Esta relacin se representa as: Nueva hereda todas las caractersticas (mtodos y campos) de Existente. Nueva puede definir caractersticas (campos y mtodos) adicionales. Nueva puede redefinir caractersticas heredadas de Existente. El proceso de herencia no afecta de ninguna forma a la superclase Existente. Nueva es una subclase y Existente es superclase Para que una nueva clase sea subclase de otra existente basta con existente a continuacin del nombre de la nueva: public class Nueva extends Existente { ..... } En Java, el punto ms alto de la jerarqua es la clase Object de la cual derivan en ltima instancia todas las dems clases. Esta clase aporta una serie de funciones bsicas comunes a todas las clases. Si al definir una nueva clase, no aparece la clasula extends, Java considera que dicha clase desciende directamente de Object. 7.1. Herencia Simple Es un tipo de herencia en la que una clase hereda el estado (estructura) y el comportamiento de una sola clase base (superclase). aadir extends

7.2. Herencia mltiple Una clase puede descender de varias superclases, en casos especiales es posible simular herencia mltiple con unas clases especiales denominadas interfaces.

21

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

7.3. Qu se hereda? Herencia de interfaz. Slo se hereda la declaracin de las caractersticas que la clase padre declara como pblicas. Herencia de implementacin. Se heredan tambin los atributos y la implementacin de las operaciones. Motivo por el que se hereda: Herencia de interfaz. La herencia se establece porque la interfaz de la clase hija coincide (o extiende) la de la clase padre. Herencia de implementacin. Se realiza con objeto de acceder a la implementacin de los mtodos de la clase padre, aunque la interfaz de ambas clases sea distinta. Quin controla lo que se hereda? Herencia estricta. No permite la redefinicin de las caractersticas heredadas. Por un lado, es posible redefinir la visibilidad de las caractersticas heredadas y la implementacin de los mtodos. En Java, una limitacin a esto son los mtodos declarados como final. Herencia selectiva. Se puede decidir qu caractersticas se heredan y cules no. Se heredan todas las caractersticas definidas por la clase antecesora. Sin embargo, si atendemos a la visibilidad de las caractersticas heredadas, s que podemos hablar de herencia selectiva

22

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ Jerarqua de clases por herencia

7.4. Herencia y Constructores Los constructores de la clase base se invocan antes del constructor de la clase derivada. Si una clase base, es a su vez una clase derivada, sin constructores se invocan tambin en secuencia: constructor base, constructor derivada. Los constructores no se heredan aunque los constructores por defecto se generan si se requiere.

7.6. Interface vs. Clase Abstracta Un interface no puede implementar ningn mtodo. Un interface no forma parte de la jerarqua de clases. Clases dispares pueden implementar el mismo interface. Una clase puede implementar n interfaces pero solo una clase. El objetivo de un mtodo abstracto es forzar una interfaz (API) pero no una implementacin Haremos un interface cuando queramos definir un grupo genrico de clases y no tengamos mtodos implementados que reutilizar. O cuando nos veamos forzados por la falta de herencia mltiple en Java.

23

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

8. EVENTOS Las acciones del usuario sobre el programa se llaman eventos. Son eventos tpicos el click sobre un botn, el hacer doble click sobre el nombre de un fichero para abrirlo, el arrastrar un icono, el pulsar una tecla o combinacin de teclas, el elegir una opcin de un men, el escribir en una caja de texto, o simplemente mover el ratn. Existen distintos tipos de eventos reconocidos por el sistema operativo y el lenguaje de programacin que los implementa. Cada vez que se produce un evento sobre un determinado tipo de control, el lenguaje de programacin arranca una determinada funcin o procedimiento que realiza la accin programada por el usuario para ese evento concreto. Estos procedimientos o funciones se invocan de acuerdo a la implementacin que realice el lenguaje de programacin que se esta utilizando.

24

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

CAPITULO II: EL PAQUETE AWT


2.2. INTRODUCCION Uno de los problemas frecuentes de la programacin clsica era como programar interfaces de usuario, ya que esto implicaba tener que utilizar las API propias del Sistema Operativo y esto provocaba que el cdigo no fuera transportable a otros sistemas operativos. AWT fue la primera solucin a este problema propuesta por java. AWT es el acrnimo de Abstract Windows Toolkit (Kit de Herramientas de Ventana Abstracta). Se trata de una biblioteca de clases java para el desarrollo de Interfaces de Usuario Grficas y el trabajo con mltiples plataformas. AWT usa clases grficas comunes a todos los sistemas operativos grficos y luego la mquina virtual traduce esa clase a la forma que tenga en el sistema concreto en el que se ejecut el programa, sin importar que dicho sistema sea un sistema X, Macintosh o Windows. Este paquete viene incluido en Java Foundation Classes (JFC) que es la API de java y que se importa desde una aplicacin como java.awt, con lo que las interfaces generadas con esta biblioteca funcionan en todos los entornos java disponibles. AWT proporciona la base para trabajar con entornos grficos en java, incluso el paquete swing est basado en l.

2.2. SUBPAQUETES Y ESTRUCTURA DEL AWT Los subpaquete de AWT son: Los componentes (java.awt.Component) Los contenedores (java,awt.Containers) Los gestores de posicin (java.awt.LayoutManager), que posiciona los componentes dentro de los contenedores. Los eventos (java.awt.Event), que nos indican las acciones del usuario. Los objetos bsicos (java.awt.Button), que permiten interactuar el usuario con la aplicacin para ejecutar alguna accin.

La estructura bsica del AWT podemos resumirla en los puntos que exponemos a continuacin:

25

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________


Los Contenedores contienen Componentes, que son los controles bsicos No se usan posiciones fijas de los Componentes, sino que estn situados a travs de una disposicin controlada (layouts) El comn denominador de ms bajo nivel se acerca al teclado, ratn y manejo de eventos Alto nivel de abstraccin respecto al entorno de ventanas en que se ejecute la aplicacin La arquitectura de la aplicacin es dependiente del entorno de ventanas, en vez de tener un tamao fijo. Es bastante dependiente de la mquina en que se ejecuta la aplicacin (no puede asumir que un dilogo tendr el mismo tamao en cada mquina)

2.3. COMPONENTES Una interfaz grfica est construida en base a elementos grficos bsicos y avanzados, los componentes tpicos son los botones, etiquetas, campos de texto, casillas de verificacin, botones de opcin, listas, barras de desplazamiento, entre otros. Los componentes permiten al usuario interactuar con la aplicacin y proporcionar informacin desde el programa al usuario sobre el estado del programa. Los componentes no se encuentran aislados, sino agrupados dentro de contenedores. Los componentes de AWT se llaman componentes pesados debido al uso significativo que hacen de los recursos del sistema. En el AWT, todos los componentes de la interfaz de usuario son instancias de la clase Component o uno de sus subtipos. La siguiente figura muestra la jerarqua de clases que representan componentes y contenedores de AWT:

26

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

Imagen N 01: Jerarqua de las clases de AWT 2.3.1. Lista de componentes ms comunes de AWT Applet: crea un applet. Button: Crea un botn. Canvas: Crea un rea de trabajo en el que se puede dibujar. CheckBox: Crea una casilla de activacin. Choice: Crea un control de opcin. Label: Crea una etiqueta. Men: Crea un men.. ComboBox: Crea un cuadro de lista desplegable. List: Crea un cuadro de lista. Frame: crea un marco para las ventanas de aplicacin. Dialog: Crea un cuadro de dialogo. Panel: crea un rea de trabajo que puede tener otros controles. PopupMenu: crea un men emergente. RadioButton: crea un botn de opcin. ScrollBar: Crea una barra de desplazamiento. ScrollPane: Crea un cuadro de desplazamiento. TextArea: Crea un rea de texto de dos dimensiones. TextField: Crea un cuadro de texto de una dimensin. TextPane: Crea un rea de texto. Window: Crea una ventana. Etc.

27

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ 2.3.2. Clase Component Es la clase bsica en la que se basan todos los componentes visuales de AWT, sta definida como una clase abstracta que representa a cualquier objeto que tiene una posicin y un tamao, que puede ser dibujado en la pantalla y que pueda recibir eventos de entrada (que responda a las interacciones con el usuario). La clase Component se deriva directamente de la clase java.lang.Object, e incluye un gran nmero de mtodos, organizados para cubrir varios propsitos. A continuacin se explican algunos de ellos.
a.) Tamao y posicin del componente

Dimension getSize(); Devuelve la anchura y altura del componente como un objeto de la clase Dimension, que tiene como campos: width (anchura) y heigth (altura). void setSize(int ancho, int largo); Establece la anchura y altura del componente. Dimension getPreferredSize(); Devuelve el tamao que este componente debera tener. void setPreferredSize(); Establece el tamao que este componente debera tener. Dimension getMinimumSize(); Devuelve el tamao mnimo que este componente debera tener. void setMinimumSize(int ancho, int largo); Establece el tamao mnimo que este componente debera tener. Rectangle getBounds(); Devuelve las coordenadas de este componente como un objeto de la clase Rectangle, que tiene como campos: x, y, width y heigth. void setBounds(int x, int y, int ancho, int largo); Establece las coordenadas de este componente.

b.) Acciones sobre el componente

boolean getEnabled(); Comprueba si el componente est o no activo. void setEnabled(boolean); Establece el componente a activo o inactivo. boolean getVisible(); Comprueba si el componente est o no visible. void setVisible(boolean); Establece si el componente est visible o invisible. void paint(Graphics g); Indica al AWT que ha de dibujar el componente g. void repaint(); Indica al AWT que ha de volver a dibujar el componente. void update(Graphics g); Es llamado por AWT cuando se invoca el mtodo repaint(). Por defecto llama a paint().
c.) Eventos de interaccin con el usuario

28

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ A su vez hay tres tipos de mtodos, para la gestin de eventos.

void add_Tipo_Listener(_Tipo_Listener l); Aade un oyente a la espera de algn tipo de eventos sobre este componente. void remove_Tipo_Listener(_Tipo_Listener l); Elimina algn oyente que estaba a la espera de algn tipo de eventos sobre este componente. void process_Tipo_Event(_Tipo_Event e); Procesa eventos del tipo _Tipo_Event envindolos a cualquier objeto _Tipo_Listener que estuviera escuchando. En estos mtodos _Tipo_ puede ser cualquiera de los siguientes: Component, Focus, InputMethod, Key, Mouse, MouseMotion.

2.4. CONTENEDORES Los contenedores son clases que usan organizadores (layout manager) para distribuir los objetos componentes en la superficie de despliegue de la mejor forma. Adems, los contenedores son en s mismos componentes y como tales pueden ser situados dentro de otros contenedores. Tambin contienen el cdigo necesario para el control de eventos, cambiar la forma del cursor o modificar el icono de la aplicacin. Para aparecer en pantalla, todo componente GUI debe ser parte de una jerarqua de contencin. Una jerarqua de contencin es un rbol de componentes que tiene un contenedor de alto nivel como su raz. 2.4.1. Tipo de contenedores a.- Contenedores de alto nivel ("Top-Level Containers") Un contenedor de Alto Nivel proporciona el soporte que necesitan los componentes AWT para realizar su dibujado y su manejo de eventos. Todo programa que presente un GUI AWT contiene al menos un contenedor de alto nivel, los contenedores de alto nivel AWT son: Window: ventana sin bordes ni barra de mens Frame: ventana con marco: con ttulo, borde, mens y controles Dialog: ventanas secundarias que implementan cuadros de dilogo con el usuario (modal o no modal) Applet: implementa un rea de pantalla de un applet dentro de una ventana del navegador.

29

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

b.- Contenedores intermedios AWT proporciona otros contenedores denominados intermedios con propsitos especficos. Son los siguientes: Panel no aaden casi ninguna funcionalidad ms all de las que tienen los objetos, no puede aparecer "por s solo" en la pantalla. ScrollPane (panel deslizante) proporciona barras de desplazamiento alrededor de un slo componente. SplitPane (panel dividido) permite al usuario personalizar la cantidad relativa de espacio dedicada a cada uno de dos componentes, TabbedPane (panel con solapas ) muestra slo un componente a la vez, permitiendo fcilmente cambiar entre componentes. ToolBar (barra de herramientas) contiene un grupo de componentes (normalmente botones) en una fila o columna, y opcionalmente permite al usuario arrastrar la barra de herramientas a diferentes localizaciones.

c.- Contenedores especficos Existen otro tipo de contenedores que son ms especializados, como los paneles internos y los paneles de capas, que a su vez pueden superponerse como: Internal frames se parecen a los frames y tienen mucho del mismo API pero al contrario que los frames deben aparecer dentro de otras ventanas. Root Panes proporcionan soporte detrs-de-la-escena a los contenedores de alto nivel. Layered panes existen para soportar ordenacin en el eje Z de componentes Un panel transparente (GlassPane) como primera capa Una barra de men (MenuBar) Detrs un panel de capa (LayeredPane) Detrs el panel raz de las capas (RootPane)

30

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ Por ltimo el contenedor de alto nivel (un Frame)

En el AWT, todos los contenedores son instancias de la clase Container o uno de sus subtipos.

2.4.2. Clase Container Container es una clase abstracta derivada de Component, que representa a cualquier componente que pueda contener otros componentes. Se trata, de aadir a la clase Component la funcionalidad de adicin, sustraccin, recuperacin, control y organizacin de otros componentes Algunos de los mtodos de la clase Container son: Component add(Component c); Aade un componente al contenedor. void print(Graphics g); Imprime el contenedor. void printComponents(Graphics g); Imprime cada uno de los componentes de este contenedor. LayoutManager getLayout(); Devuelve el gestor de impresin (LayoutManager) asociado a este contenedor, que es el responsable de colocar los componentes dentro del contenedor. void setLayout(LayoutManager 1); Establece un gestor de impresin para este componente. Estos objetos Container tienen un LayoutManager asociado que define la manera en que van a posicionarse los objetos componentes en su interior. 2.5. COMPONENTES Y CONTENEDORES 2.5.1. Organizacin de los componentes sobre los contenedores Los componentes deben circunscribirse dentro del contenedor que los contiene. Esto hace que el anidamiento de componentes (incluyendo Contenedores) en contenedores crean rboles de elementos, comenzando con un contenedor en la raz del rbol y expandindolo en sus ramas. En la imagen siguiente presentamos una interface de usuario muy simple, con la apariencia que presenta cuando se visualiza bajo un entorno Windows.

31

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

A continuacin presentamos el rbol que representa la interface que corresponde con la aplicacin grfica generada anteriormente, donde se puede apreciar la organizacin de todos los elementos de dicha interfaz.

2.5.3. Relacin entre componentes y eventos Es muy importante conocer cual es la relacin que existe entre eventos y componentes ya que a la hora de programar una interfaz grfica de usuario necesitamos esta informacin. Por eso a continuacin mostramos una tabla en donde se relaciona cada componente con sus correspondientes eventos ms una pequea explicacin.
Componente Button Checkbox Choice Component Eventos generados ActionEvent ItemEvent ItemEvent ComponentEvent FocusEvent Significado Hacer click en el botn Seleccionar o deseleccionar un item. Seleccionar o deseleccionar un tem. Seleccionar o deseleccionar un tem. Mover, cambiar tamao, mostrar u ocultar un componente. Obtener o perder el focus.

CheckboxMenuItem ItemEvent

32

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________


KeyEvent MouseEvent Pulsar o soltar una tecla. Pulsar o soltar un botn del ratn; entrar o salir de un componente; mover o arrastrar el ratn (tener en cuenta que este evento tiene dos Listener). Aadir o eliminar un componente de un container. Hacer doble click sobre un tem de la lista. Seleccionar o deseleccionar un tem de la lista. Seleccionar un item de un men. Cambiar el texto. Terminar de editar un texto pulsando Enter. Acciones sobre una ventana: abrir, cerrar, restablecer e iniciar el cierre.

Container List

ContainerEvent ActionEvent ItemEvent

MenuItem Scrollbar TextComponent TextField Window

ActionEvent TextEvent ActionEvent WindowEvent

AdjustementEvent Cambiar el valor de la Scrollbar.

Se debe tomar en cuenta que los eventos propios de una super-clase pueden afectar tambien a los componentes de sus sub-clases. Por ejemplo, la clase TextArea no tiene ningun evento especfico o propio, pero puede recibir los de su super-clase TextComponent.

2.6. GESTORES DE IMPRESIN LayoutManager1 es la interface encargada de la representacin y posicionamiento en pantalla de componentes AWT. De estas interfaces se proporcionan cinco implementaciones en AWT. Cada una de ellas reparte los objetos de una forma particular:

BorderLayout: En cinco lugares: Norte, Sur, Este, Oeste y Centro (North, South, East, West y Center).

CardLayout: Permite gestionar varios componentes de los que slo uno se visualiza a la vez, permaneciendo los dems invisibles debajo. FlowLayout: De izquierda a derecha horizontalmente en cada lnea. Cuando sobrepasan una lnea se comienza a la izquierda de la siguiente. GridLayout: En una tabla en la que todas las casillas tienen el mismo tamao.

Con ms detalle estos gestores de impresin as como los ejemplos se trataran capitulos siguientes de este manual.

33

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

GridBagLayout: En una tabla, pero las casillas no tienen que tener el mismo tamao.

2.7. EVENTOS DE AWT AWT tiene sus propios eventos, que se explican a continuacin. 2.7.1. Eventos fsicos Son todos hijos del evento ComponentEvent, que indica algn cambio en un objeto Component:

InputEvent: Se ha producido una entrada del usuario. Tiene como eventos hijos KeyEvent (pulsacin de una tecla) y MouseEvent (accin sobre el ratn). FocusEvent: Avisa al programa de que el componente ha ganado o perdido la atencin (enfoque) del usuario. Esto se deduce de la actividad del usuario (ratn y teclado). WindowEvent: Avisa al programa de que el usuario ha utilizado uno de los controles de ventana a nivel del sistema operativo, como los controles de minimizar o cerrar. ContainerEvent: Se enva cuando se aaden o eliminan componentes a un contenedor. PaintEvent: Evento especial que seala que el sistema operativo quiere dibujar de nuevo una parte de la interfaz. Un componente debe sobreescribir el mtodo paint() o el mtodo update() para gestionar este evento. 2.7.2. Eventos semnticos Son todos hijos del evento AWTEvent, que es el evento base de la jerarqua de eventos:

ActionEvent: Avisa al programa de acciones especficas de componentes como las pulsaciones de botones. AdjustmenteEvent: Comunica que una barra de desplazamiento ha sido ajustada. ItemEvent: Avisa al programa cuando el usuario interacciona con una eleccin, una lista o una casilla de verificacin. TextEvent: Avisa cuando un usuario cambia texto en un componente TextComponent, TextArea o TextField. InputMethodEvent: Avisa que un texto que est siendo creado utilizando un mtodo de entrada est cambiando (se ha escrito algo ms...). InvocationEvent: Este evento ejecuta el mtodo run() en una clase Runnable cuando es tratado por el thread del despachador (dispatcher) de AWT.

34

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ 2.8. CREACIN DE APLICACIONES CON AWT Para crear una aplicacin utilizando AWT, se debe generar la interfaz de esa aplicacin, mostrando los distintos elementos del AWT y posteriormente realizar la implementacin de la funcionalidad de la aplicacin. Aunque no existen reglas que se deban seguir, ste manual trata de establecer una secuencia para disear la aplicacin: Crear el marco de la aplicacin, que es un container o ventana principal donde se situarn los componentes tambin definir las propiedades de este marco (fuentes, colores, layouts). Crear los componentes como botones, cajas, reas de texto, botones de opcin y seleccin, mens, barras de desplazamiento etc, as como sus propiedades. Utilizar el gestor de impresin por defecto o modificarlo y agregar los componentes a dicho contenedor. Implementar el gestor de eventos (oyentes), de tal manera que el usuario pueda controlar la aplicacin actuando sobre los componentes. Crear otros componentes especializados como mens y barras de mens, selector de archivos, arboles, etc.

Para crear una ventana principal as como los componentes de la aplicacin, se deben importar el paquete AWT de la siguiente manera: import java.awt.*; donde: *, representa todas las clases del paquete AWT incluida la clase Frame.

2.7.1. Crear el marco de la aplicacin El Contenedor de los Componentes es el Frame que viene a ser la ventana principal de la aplicacin. 2.7.1.1. Creacin de una ventana a travs de un objeto Frame import java.awt.*; public class demoVentana { public static void main(String[] s) { Frame marco=new Frame("Principal"); //Dos operaciones bsicas que se deben realizar como mnimo //para la presentacin de la ventana: tamao y visualizacin marco.setSize(250,300); marco.setVisible(true); }

35

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ } 2.7.1.2. Creacin de una ventana por herencia import java.awt.*; public class demoVentana extends Frame { public demoVentana(String t) { setTitle(t); setSize(250,300); setVisible(true); } public static void main(String[] s) { demoVentana marco=new demoVentana("Principal"); } } Cualquiera de las dos formas de crear una ventana principal nos va a llevar a tener el siguiente resultado:

2.8.1.3. Creacin de ventana principal con diversas propiedades import java.awt.*; public class demVentana extends Frame { public demVentana() { // setExtendedState(Frame.MAXIMIZED_BOTH); //Maximiza la ventana al ejecutar la aplicacin setBackground(Color.pink); setResizable(false); //ventana tamao fijo //setState(Frame.ICONIFIED); //Minimiza ventana al ejecutar aplicacin setState(Frame.NORMAL); setLocation(150,250); // ubicar la ventana sobre la pantalla

36

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ setTitle("Principal"); setSize(250,300); setVisible(true); } public static void main(String[] s) { new demVentana(); } } Nota: Ejemplos donde se utilicen exclusivamente las clases de AWT, ya no se desarrollarn ms porque el objetivo del libro es utilizar clases tanto de AWT y SWING en las aplicaciones de ejemplos, lo cual se dara despus del siguiente capitulo.

2.7.2. Crear componentes y agregar al contenedor Si tomamos como ejemplo: crear un botn, una etiqueta y una caja de texto para mostrarlos en el marco creado anteriormente sera de la siguiente forma: Creamos los objetos Button cmdOk=new Button(OK); Label lblMensaje=new Label(Mensaje); TextField txtMensaje=new TextField(Programando con AWT); Incorporar componentes al marco Utilizando el gestor de distribucin por defecto para el marco (BorderLayout) y asumiendo que estamos creando el marco por herencia, entonces se agregarian los componentes a travs del mtodo constructor de la siguiente manera: add(lblMensaje,BorderLayout.NORTH); De la misma forma para el resto de componentes quedando el programa completo: import java.awt.*; public class demoVentana extends Frame { public demoVentana(String t) { Button cmdOk=new Button("OK"); Label lblMensaje=new Label("Mensaje"); TextField txtMensaje=new TextField("Programando con AWT"); add(lblMensaje,BorderLayout.NORTH); add(txtMensaje,BorderLayout.CENTER); add(cmdOk,BorderLayout.SOUTH);

37

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ setTitle(t); pack(); setVisible(true); } public static void main(String[] s) { demoVentana marco=new demoVentana("Principal"); } } Resultado

.- Creacin de aplicacin con manejos de eventos para cerrar una ventana


1. import java.awt.*; 2. import java.awt.event.*; 3. class CerrarVentana extends WindowAdapter 4. { 5. public void windowClosing(WindowEvent e) 6. { 7. System.exit(0); 8. } 9. } 10. class Ventana extends Frame 11. { 12. public Ventana() 13. { 14. CerrarVentana cv = new CerrarVentana(); 15. addWindowListener(cv); 16. Button Boton = new Button(); 17. this.add(Boton);//se puede omitir this 18. Boton.setLabel("Boton"); 19. setSize(400, 400); 20. setTitle("Ventana"); 21. setVisible(true); 22. } 23. public static void main(String args[]) 24. { 25. Ventana mainFrame = new Ventana() ; 26. } 27. }

38

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________


Descripcin del ejemplo anterior En las lneas 1 y 2 se importa a la aplicacin los packages de clases java.awt y java.awt.event para incluir las clases de componentes y eventos respectivamente. De la lnea 3 a la 9 es donde se declara la clase gestora de eventos. Esta clase es una derivada de WindowAdapter osea que es una clase Adapter que se comentar ms adelante. De la 10 a la 22 es donde se define el container. Dentro de l en las lneas 14 y 15 se registran los eventos que nos interesan para la aplicacin (de momento la aplicacin solo responde al evento windowClosing()). Tambin dentro del container se ha aadido un componente Button en la lnea 17 y se han utilizado unos mtodos heredaros de la jerarqua de clases de componentes y eventos en las lneas 19, 20, 21 De la 23 a la 26 se ha declarado el mtodo main () que es donde comenzar a ejecutarse la aplicacin. Es en este mtodo donde se instancia la clase Ventana (contenedor de la aplicacin). El resultado es un botn que no desencadena ninguna accin, redimensionable y que ocupa toda la ventana de programa.

Nota: La mayor cantidad de ejemplos se trataran con el paquete SWING ya que en su mayor parte son clases mejoradas de AWT, inclusive el manejo de eventos.

39

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

CAPITULO III:
3.1. Introduccin

PAQUETE SWING

El paquete SWING es un conjunto de clases desarrolladas por primera vez para Java 1.2 (el llamado Java2), para mejorar el anterior paquete denominado AWT, debido a que ste ltimo presentaba muchas limitaciones a la hora de construir aplicaciones. Tanto Swing como AWT forman parte de una coleccin de clases llamada JFC, que incluyen paquetes dedicados a la programacin de interfaces grficos (as como a la produccin multimedia). Swing aporta muchas ms clases, consume menos recursos y construye mejor la apariencia de los programas. En cualquier caso, AWT no desaparece; simplemente se aade a las nuevas capacidades Swing Todas las clases de Swing son parte del paquete javax.swing, para poder utilizar una clase de Swing se tiene que importar la clase de la siguiente manera: import javax.swing.*; A pesar de que Swing tiene un estilo visual propio por defecto, puede tambin utilizar un aspecto Motif, Windows o Apple; estos ltimos slo en las plataformas correspondientes. Adems puede cambiar de aspecto en tiempo de ejecucin

Metal

Mac Os

Motif

Windows

40

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ 3.3. SWING JERARQUA DE COMPONENTES Este paquete swing esta estructurado, tal como lo muestra la siguiente figura:

41

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ 3.3. rbol de Contenido de un GUI Tpico Cuando se elabora un programa con clases del paquete swing, se hace uso de contenedores de diversos tipos y componentes denominados ligeros que son los que interactuan con el usuario. Todos estos objetos se agrupan en una estructura de tipo rbol que nos indica que objeto contiene otro objeto y que por lo general presenta todo programa tpico que usa este paquete Swing. De acuerdo a la imagen que se presenta se implementa una ventana que contiene dos botones, un campo de texto y una lista.

3.4. BIBLIOTECA O API DE SWING El API Swing es poderoso, flexible e inmenso. Por ejemplo, la versin JFC 1.2 tiene 16 paquetes pblicos javax.swing javax.swing.border (bordes) javax.swing.colochooser (eleccin de color) javax.swing.event (eventos) javax.swing.filechooser (eleccin de archivos) javax.swing.plaf (pluggable look-and-feel javax.swing.plaf.basic (base look-and-feel) javax.swing.metal (look-and-feel defecto) javax.swing.multi (mezclar look-and-feel) javax.swing.table (tablas) javax.swing.text (documentos) javax.swing.text.html (soporte edicin html) javax.swing.text.html.parser (anlisi html) javax.swing.text.rtf (soporte documentos RTF) javax.swing.tree (soporte representacin de rbol) javax.swing.undo

42

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ 3.5. COMPONENTES Y CONTENEDORES 3.5.1. Componentes Los componentes son los elementos bsicos de la programacin con Swing. Todo lo que se ve en un GUI de Java es un componente. Los componentes se colocan en otros elementos llamados contenedores que sirven para agrupar componentes. Un administrador de diseo se encarga de de disponer la presentacin de los componentes en un dispositivo de presentacin concreto, swing posee alrededor de 250 componentes que cada vez se incrementan. Los componentes de swing, tienen las siguientes caractersticas: Estn escritos en Java Proporcionan un Look&Feel consistente entre plataformas Se pueden usar sobre cualquier plataforma que soporte Java 1.1 o posteriores Un componente est formado por: Propiedades Representan un valor o estado asociado al componente. Normalmente tiene asociado una accin que se ejecuta con la modificacin de la propiedad Ejemplo: componente JButton Propiedad text Las propiedades tienen un valor antes de que se use el componente, dicho valor puede cambiarse en tiempo de ejecucin. Modificacin en tiempo de ejecucin Segn el ejemplo el mtodo setText, se encarga de modificar la propiedad text del componente JButton

Mtodos Los mtodos proporcionan el comportamiento de un componente, ya que obligan al componente a realizar una accin Ejemplo: El mtodo setText modifica el texto de un objeto JTextArea denominado jTextArea1

43

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ Eventos Un evento es una seal o accin, externa o interna a la aplicacin, que produce la ejecucin de un bloque de cdigo que se escribe como un mtodo. Ejemplos o Pulsar el mouse o Llamar a un mtodo o Modificar el valor de una propiedad

Ejemplo:

3.5.2. Contenedores Los componentes no se encuentran aislados, sino agrupados dentro de contenedores2. Los contenedores, se utilizan para recoger y gestionar otros componentes y tambin son componentes. Generalmente, en los contenedores no se emplean posiciones fijas, sino que los componentes estn situados con una disposicin controlada (layouts)

Todo los conceptos sobre componentes y contenedores se trat con detalle en la descripcin del paquete AWT, como SWING es una mejora de AWT, los conceptos se aplican igual para ambos paquetes.

44

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ Swing propone una jerarqua de contenedores de componentes. Cualquier aplicacin que utilice Swing debe tener un contenedor de alto nivel y uno o ms contenedores intermedios y componentes atmicos. Los contenedores de alto nivel mas comnmente utilizados son: JFrame, JApplet y JDialog. Las ventanas son contenedores de otros componentes tales como barras de mens, campos de texto, botones, etc. De hecho una ventana est constituida por una serie de capas:

45

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ 3.6. PROPIEDADES DE COMPONENTES Todos los componentes del paquete swing presentas las propiedades siguientes que son heredadas por todas las clases que derivan de la clase Component. text: icon: toolTipText font background foreground doubleBuffered border preferredSize minimumSize maximumSize mnemonic Texto presente en el componente Icono asociado al componente (gif, jpg) Texto alternativo (cursor sobre componente) Fuente asociado al componente Fondo asociado al componente Linea asociado al componente Dibujos (grficos) Estilos de bordes del componente Ajustes de tamaos preferentes Ajustes de tamaos preferentes Ajustes de tamaos preferentes Acceso alternativo por teclado (ALT+carcter C)

3.7. DESCRIPCIN DE LAS CLASES DE LOS COMPONENTES SWING 3.7.1. Contenedores 3.7.1.2. JFrame Representa una ventana bsica, capaz de contener otros componentes. Casi todas las aplicaciones construyen al menos un JFrame, es dependiente del escritorio y posee decoracin, icono, y controles Constructores: JFrame(String); // titulo Propiedades y mtodos: .- Dimension dim = getToolkit().getScreenSize(); Tamao pantalla: .- setSize(int, int); // Tamao de ventana .- setLocation(int_x; int_y); // Ubicacin de ventana .- setVisible(boolean); // Mostrar ventana .- pack(); // colocar .- add(Component...); // agregar componentes .- setIconImage(ImageIcon); // modificar imagen

Creacin de Marco

46

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

import javax.swing.*; public class Ventana { public static void main(String[] args) { JFrame frame = new JFrame(Mi marco"); frame.setSize(400, 300); frame.setVisible(true); ImageIcon g=new ImageIcon("general.gif"); this.setIconImage(g.getImage()); } } Resultado:

3.7.1.2. JDialog Es un componente o ventana auxiliar que sirve para presentar dilogos cuando se registra un evento dentro de un programa, pueden ser modales o no modales, esto quiere decir que si son modales la ventana del dilogo bloquea las entradas a otras ventanas, este tipo de dilogos se pueden hacer tambin con JOptionPane Constructores JDialog(JFrame, String, boolean) //ventana padre, ttulo y modo JDialog() //ventana JDialog(Frame) //ventana padre JDialog(Frame, boolean) //ventana padre y modo JDialog(Frame, String) //ventana padre y ttulo Propiedades y mtodos int getDefaultCloseOperation() // cerrar un dilogo setDefaultCloseOperation(int) // Obtiene lo que sucede cuando el usuario intenta cerrar el dialog. Valores posibles: DISPOSE_ON_CLOSE, DO_MOTHING_ON_CLOSE, HIDE_ON_CLOSE (por defecto)

47

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ void setLocationRelativeTo(Component) // Centrar dilogo Ejemplo
JDialog dialogo; JFrame credi; credi=new JFrame(); dialogo = new JDialog(credi, "Creditos", true); JTextArea salida = new JTextArea("Este Programa fue diseado para\n"+ " Comprobar uso de JDialog\n"+ "Que es una ventana hijo de credi y es modal(true)"); Container contentPane = dialogo.getContentPane(); contentPane.add(salida, BorderLayout.CENTER); dialogo.setSize(new Dimension(300, 150)); dialogo.setVisible(true);

Resultado

3.7.1.3. JPanel Es un contenedor de propsito general para componentes de peso ligero., utiliza un controlador de distribucin para posicionar y dimensionar sus componentes. Un objeto JPanel permite aadirle bordes y determinar si utiliza el doble buffer para aumentar el rendimiento. Tiene su controlador de distribucin por defecto que es FlowLayout. Constructores JPanel() JPanel(boolean)

//Determina estrategia de buffer: trae doble buffer JPanel(LayoutManager) //porporciona controlador distribucin JPanel(LayoutManager, boolean) Propiedades y mtodos void add(Component) //Aade el componente al panel. int getComponentCount() //obtiene n de componentes de panel Component getComponent(int) //obtiene componente basndose en su ndice

48

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ Ejemplo


JPanel panel=new JPanel();

. JButton boton=new JButton("OK");


panel.add(boton); //agrega botn al panel panel.setBackground(Color.yellow); //color al fondo de panel panel. setBorder(BorderFactory.createTitledBorder("Panel de botones")); //agrega borde y ttulo getContentPane().add(panel,BorderLayout.CENTER); setSize(200,150); setVisible(true);

Resultado

3.7.2. Etiquetas e iconos Aade componentes no interactivos al interfaz

3.7.2.1. JLabel Objeto que permite situar un texto y/o imagen no seleccionable en una lnea, generalmente usado para identificar otros elementos widgets. Estos objetos no tienen ningn tipo de interaccin con el usuario.

49

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ Constructores: JLabel(String text) JLabel(Icon icon) JLabel(String text, int alin_hor) JLabel(Icon icon, int alin_hor) Propiedades y mtodos String texto; Icon icono; int horizontalAlignment Mtodos setText(String s); String getText(); setIcon(new ImageIcon(fich.gif")); setHorizontalAlignment(int); // LEFT, CENTER, RIGHT setVerticalAlignment(int); // TOP, CENTER, BOTTON 3.7.2.2. ImageIcon Implementa la clase abstracta Icon, visualiza imgenes .jpg/.gif que deben estar ubicadas en el mismo directorio de la aplicacin. Componentes: setIcon

Constructores: ImageIcon(String Fichero); Propiedades String texto; Icon icono; int horizontalAlignment Mtodos setImage(String fichero); Image getImage(); Ejemplo
ImageIcon icono = new ImageIcon(ok.gif"); ... Icono.setImage(hola.gif); JLabel et = new Jlabel (icono);

3.7.3. Botones Son componentes para capturar eventos generados por el usuario (por pulsacin). Pueden representar texto y/o iconos. 50

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ La clase DefaultButtonModel define el estado del botn Se pueden agrupar (ButtonGroup) El siguiente grfico nos muestra la estructura de los botones a partir de las definiciones realizadas en la clase abstracta AbstracButton

3.7.3.1. DefaultButtonModel Propiedades de los diferentes tipos de botones controlados por la clase DefaultButtonModel

51

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ 3.7.3.2. JButton Objeto de control de pulsacin de tipo widget que permiten al usuario comenzar un evento, como buscar, aceptar una tarea, interactuar con un cuadro de dilogo, etc. Un botn se presiona haciendo clic sobre el mismo, o al presionar Enter si est seleccionado. Tambin suele poder presionarse con alguna tecla o combinacin de teclas. Los botones ms comunes, especialmente en los cuadros de dilogos y formularios son: * Aceptar (OK), Enviar (Send), Si (Yes), Cancelar (Cancel), Cerrar (Close). * En los sistemas de ventanas, los pequeos botones de minimizar, maximizar, cerrar y restaurar en las ventanas, son representados con pequeos conos.

Constructores JButton(String text) JButton(Icon icon) JButton(String text, Icon icon) Propiedades String texto; Icon icono; int mnemonic; Mtodos setText(String); setIcon(Icon); setRolloverIcon(Icon); // muestra al estar encima del botn setDisabledSelectedIcon() setPressedIcon() Ejemplo
JButton jb = new JButton(); jb.setIcon (new ImageIcon(a.jpg);

3.7.3.3. JToggleButton Botn con proporciona el estado en un momento determinado (seleccionado/deseleccionado) Un ejemplo de esto, son los botones de Negrita, Cursiva, Subrayado en los editores de texto comunes.

52

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ Existen dos tipos de botones que se extiende de esta clase tal como lo muestra la figura siguiente:

Constructores JToggleButton(String text) JToggleButton(Icon icon) JToggleButton(Icon icon, boolean selected);

Propiedades y mtodos bool getSelected() void setSelected (bool)

JToggleButton jtb = new JToggleButton(); jtb.setSelected(true);

3.7.3.4. JCheckBox / JRadioButton JCheckBox (Casillas de Verificacin) Elemento widget que permite al usuario marcar mltiples selecciones de un nmero de opciones. Generalmente son mostrados en pantalla como cuadraditos que pueden estar vacos (para falso) o tildados (para verdadero), al lado de los cuadrados hay un texto que explica el significado de que el casillero est o no chequeado.

JRadioButton (Radio Botn) Elemento widget que permite al usuario elegir slo una opcin de un conjunto predefinido de opciones.

53

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ Un botn de opcin no seleccionado se mantiene en blanco, en tanto uno seleccionado se rellena. Al lado de cada botn de opcin se encuentra un texto que describe la opcin que ese botn representa. Cuando un usuario selecciona un botn de opcin, cualquier otro botn de opcin previamente seleccionado se deselecciona .

Estos tipos de botones pueden contener iconos y emiten un ItemEvent al cambiar de estado (ItemStateChanged) ItemEvent.SELECTED ItemEvent.DESELECTED Constructores JCheckBox/JRadioButton(String text [, boolean selec]) JCheckBox /JRadioButton(Icon icon [, boolean selec]) JCheckBox /JRadioButton(String text, Icon icon [, boolean selec]) Propiedades String texto; Icon icono; int mnemonico boolean selec Mtodos setText(String); setIcon(Icon); boolean isSelected() setSelected(boolean b)
JCheckBox jcb = new JCheckBox(opcion1); jcb.setSelected(true); JRadioButton jrb = new JRadioButton(opcion1); jrb.setSelected(true);

54

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ 3.7.3.5. ButtonGroup (Grupo de Botones) Es un conjunto de opciones predefinidas utilizando objetos JRadioButton, y que permite agrupar en forma lgica estos botones para poder hacer que se comporten de manera excluyente. Constructor ButtonGroup() Propiedades String texto; Icon icono; int mnemonico boolean selec Mtodos add/remove(AbstractButton); setSelected(ButtonModel m, boolean b); boolean isSelected(ButtonModel m); int getButtonCount(); Ejemplo
ButtonGroup bg1 = new ButtonGroup(); bg1.add(jRadioButton1); bg1.add(jRadioButton2);

// aade/quita botones // comprueba si est seleccionado botn // nmero de botones

3.7.4. Texto Los componentes de texto muestran algn texto y opcionalmente permiten que el usuario lo edite. Los programas necesitan componentes de texto para tareas dentro del rango del correcto (introducir una palabra y pulsar Enter) al complejo (mostrar y editar texto con estilos y con imagenes embebidas en un lenguaje asitico). Todos los componentes de texto Swing descienden de la misma superclase, JTextComponent, que proporciona una base poderosa y ampliamente configurable para la manipulacin de texto. Aqu podemos ver una imagen que muestra cada uno de los componentes de texto Swing

55

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

Jerarquia de clases de texto

3.7.4.1. JTextField (Cuadro de texto) Objeto en donde es posible insertar una lnea de texto. Los cuadros de texto suelen utilizarse en formularios, herramientas y aplicaciones donde se muestra texto, generalmente editable. Suelen tener tambin barras de desplazamiento para que el usuario pueda moverse dentro de textos que exceden el cuadro.

Constructores JTextField(); JTextField(String, int); // n columnas JTextField(String); Propiedades


text, editable, columns

56

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ Mtodos setText(String); setColumns(int) // n columnas setEditable(boolean editable) JTextField txtTexto = new JTextField(10); txtTexto.setActionCommand(xxx); txtTexto.addActionListener(this);

3.7.4.2. JPasswordField JPasswordField es una subclase de JTextField que, en vez de mostrar el caracter real tecleado por el usuario, muestra otro caracter como un asterisco '*'. Este tipo de campo es til para pedir al usuario que introduzca passwords cuando se conecta o para validar su identidad. Constructores JPasswordField(); JPasswordField(String, int);// n columnas TextField(String); Mtodos setPassword(String); setEchoChar(char) setColumns(int) boolean echoCharIsSet();

// carcter // n columnas

JPasswordField txtClave = new JPasswordField(10); txtClave.setActionCommand(Clave); txtClave.addActionListener(this);

3.7.4.3. JTextArea Es el nico componente de texto plano, que puede mostrar y editar mltiples lneas de texto. En este objeto se puede utilizar setText y getText para recuperar o modificar el contenido del componente en una simple llamada al mtodo. Constructores JTextArea(String t, int n_fila, int n_col); JTextArea(int n_fila, int n_col);

57

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ Propiedades text, editable, columns, rows lineCount Mtodos setText(String); String getSelectedText(); insert(String s, int pos); // inserta texto en pos. replaceRange(String s, int inicio, int fin) // sustituye texto en el rango append(String s); // aade al final.

JTextArea txtArea = new JTextArea(5, 10); txtArea.setFont(new Font("Serif", Font.ITALIC, 16)); txtArea.setText("En un lugar \n " +"de la mancha " ); txtArea.setLineWrap(true); // activa la ruptura de lneas textArea.setWrapStyleWord(true); // Le dice al rea de texto que rompa
la lneas entre palabras

JScrollPane areaScrollPane = new JScrollPane(txtArea); areaScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_S CROLLBAR_ALWAYS); areaScrollPane.setPreferredSize(new Dimension(250, 250));

Agregar un objeto JTextArea sobre un objeto JScrollPane, para incluir barras de desplazamiento.

3.7.5. Eleccin Componentes que permiten elegir una opcin entre una serie de alternativas Se permite seleccin simple/mltiple El modo de seleccin mltiple depende del Look&Feel (Shift, Crtl...) Componentes como: JList JComboBox

58

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ 3.7.5.1. JList Consta de tres partes: Modelo de datos (ListModel) Modelo de seleccin (ListSelectionModel) y Modelo de representacin (ListCellRenderer)

Descripcin: Lista de elementos (para seleccin) Admite diferentes modos de seleccin No dispone de barra de desplazamiento (scroll) automticamente (se debe insertar en un panel JScrollPane Listas sencillas (tamao fijo) o variables (ListModel) Constructores: JList (Octect[] elementos); // array de (String) elementos para visualizar JList (ListModel modelo); // modelo de datos complejos Propiedades y Mtodos String texto; Icon icono; int modo; // SINGLE_SELECTION, // SINGLE INTERVAL_SELECTION, //MULTIPLE_INTERVAL_SELECTION void setVisibleRowCount (int filas); // columnas visibles void setSelectionMode(int modo); // modo seleccin

59

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

asad s

3.7.5.2. ListModel/DefaultListModel Descripcin: Lista de elementos (para seleccin) Adecuado para: listas largas, cambiantes, de objetos, etc. Control para el manejo de la lista (Interfaz ListModel) Existe una implementacin predefinida (DefaultListModel) Constructor: void addElement(object o); // aade elemento al final de la lista void removeElement(object o); // elimina la primera ocurrencia del objeto en la lista removeAllElements(); Propiedades y mtodos String texto; Icon icono; int modo; // SINGLE_SELECTION, // SINGLE INTERVAL_SELECTION, MULTIPLE_INTERVAL_SELECTION void setVisibleRowCount (int filas); // columnas visibles void setSelectionMode(int modo); // modo seleccin Ejemplo
public interface ListModel { public int getSize(); public Object getElementAt(int pos);

3.7.5.3. JComboBox Descripcin

60

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ Objeto que combina entrada de texto con una lista desplegable, permite seleccionar una opcin entre varias posibles, el primer elemento aparece como seleccionado (ndice 0)

ComboBoxModel extiende ListBoxModel para permitir una nica seleccin MutableComboBoxModel permite listas editables Descripcin: Combinacin de entrada de texto con lista desplegable Posee ScrollBar automtico El primer elemento aparece como seleccionado (ndice 0) Constructor public JComboBox(); public JComboBox(ComboBoxModel aModel); public JComboBox(Object items[]); //array de elementos Propiedades y mtodos int getSelectedItem(); // seleccin actual void setMaximumRowCount( int n ) // nmero de elementos a mostrar en el combo int getItemCount(); // contabilizar n de elementos void setEditable(boolean ); // si permite realizar cambios en la lista

61

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

3.7.5.4. ComboBoxModel/ DefaultComboBoxModel Descripcin: Modelo para representar los datos de un JComboBox Permite edicin Constructores: public DefaultComboBoxModel( ); public JComboBox(Vector items); Mtodos void addElement(object o); // aade elemento al final de la lista public void insertElementAt(Object obj, int index); // en una posicin void removeElement(object o); // elimina la primera ocurrencia del objeto en la lista removeAllElements();

Ejemplo JComboBox c = new JComboBox(); DefaultComboBoxModel m = new DefaultComboBoxModel(); m.addElement((String) "Granada"); m.addElement("Jan"); c.setModel(m); c.setEditable(true);

62

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ 3.7.6. Rangos Son componentes para obtener un valor dentro de un rango La clase DefaultBoundedRangeModel define el estado del Componente

3.7.6.1. DefaultBoundedRangeModel Clase que define el estado (modelo) del componente.

63

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

DefaultBoundedRangeModel modelo = new DefaultBoundedRangeModel( ); model.setMaximum(10); model.setMinimum(0); model.setValue(3);

3.7.6.2. JScrollBar Componentes para obtener un valor dentro de un rango Constructores JScrollBar() Propiedades String texto; Icon icono; int mnemonic; boolean selecc;

3.7.6.3. JProgressBar Descripcin Barra para medir el progreso (grado de acabado) de un suceso Constructores JProgressBar( ) // Barra progreso horizontal JProgressBar(int orient, int min, int max) JProgressBar(int min, int max) JProgressBar(int orient)

Propiedades int orientation; // JProgressBar.HORIZONTAL|VERTICAL 64

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ setString(String s); // mostrar en el progreso setStringPainted(boolean b); Ejemplo
JProgressBar pbar; pbar.setMinimum(0); pbar.setMaximum(100); pbar.value(35); pbar.setString(35%); pbar.setStringPainted(true);

Resultado

3.7.6.4. JSlider Barra para medir el valor en un rango, permite introducir un valor numrico entre un mximo y un mnimo de manera rpida. Constructores JSlider(); JSlider(int orientation) JSlider(int min, int max); JSlider(int min, int max, int value); JSlider(int orientation, int min, int max, int value); Propiedades y Metodos int orientation; // JSlider.HORIZONTAL|VERTICAL setMajorTickSpacing(int n ) // marca cada n valores setMinorTickSpacing(int n ) // distancia de marcas pequeas setPaintTicks( boolean ) // dibujar las marcas setValue(int) // Valor del deslizador setPaintLabels (boolean) // mostrar etiquetas Ejemplo
JSlider s; s.setMinimum(0); s.setMaximum(20); s.setValue(4); s.setMajorTickSpacing(5); s.setMinorTickSpacing(1); s.setPaintTicks(true); s.setPaintLabels(true);

65

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

Resultado

3.7.7. Otros Componentes Otros componentes tenemos 3.7.7.1. JOptionPane Clase que contiene mtodos estticos para crear distintos tipos de dilogos modales. Cuando un dialogo modal es visible, bloquea las entradas del usuario en todas las otras ventanas del programa. Con parmetros: padre, mensaje, titulo, tipo de opcin (ERROR_MESSAGE,), tipo de mensaje (OK_CANCEL_OPTION, YES_NO_OPTION, ), cono a utilizar y opciones. Para la mayora de los dilogos modales sencillos, se crea y se muestra el dilogo utilizando uno de los mtodos showXxxDialog de JOptionPane Constructores JOptionPane() JOptionPane(Object) JOptionPane(Object, int) JOptionPane(Object, int, int) JOptionPane(Object, int, int, Icon) Mtodos showConfirmDialog() Muestra un dilogo modal con dos botones, etiquetados "Yes" y "No". Estas etiquetas no son siempre terriblemente descriptivas con las acciones especficas del programa que causan. showInputDialog(.) Muestra un dilogo modal que obtiene una cadena del usuario. Un dilogo de entrada muestra un campo de texto para que el usuario teclee en l, o un ComboBox no editable, desde el que el usuario puede elegir una de entre varias cadenas showMessageDialog(. )

66

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ Muestra un dilogo modal con un botn, etiquetado "OK". Se puede especificar fcilmente el mensaje, el icono y el ttulo que mostrar el dilogo. showOptionDialog() Muestra un dilogo modal con los botones, los iconos, el mensaje y el ttulo especificado, etc. Con este mtodo, podemos cambiar el texto que aparece en los botones de los dilogos estndard. Tambin podemos realizar cualquier tipo de personalizacin El argumento de cada mtodo esta compuesto entre otros por: Ventana padre: indica sobre la ventana principal que se mostrar la ventana de dialogo. Mensaje: Indica el mensaje que aparece dentro de la ventana de dialogo. Titulo: indica el ttulo de la ventana de dialogo Icono: indica el smbolo que aparece acompaando al mensaje dentro de la ventana.

JOptionPane.showMessageDialog(this, "Debe introducir datos en todos los campos", "Error de entrada de datos", JOptionPane.ERROR_MESSAGE);

Object[] textoOpciones = {"Si adelante", "Ahora no","No se que hacer"}; int opcion = JOptionPane.showOptionDialog(this, " Desea realizar la operacin ahora ?", "Mensaje de confirmacin", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, textoOpciones,textoOpciones[0]);

67

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ Una ventana de dialogo con los parametros mnimos
JOptionPane.showMessageDialog(this, "Programando con Java");

JOptionPane.showMessageDialog( this, "Programando con Java", "Manual Java UNP", JOptionPane.WARNING_MESSA GE);

//icono y ttulo predeterminados, se pone el mensaje // ingresar un valor por teclado String aux=JOptionPane.showInputDialog("introduzca un valor");

//ingresar un valor por seleccin Object[] valoresPosibles = {"Pedro", "Juan", "Carlos" }; Object jefe = JOptionPane.showInputDialog(null,"Seleccione cual es su Jefe Inmediato", "Manual Java UNP",JOptionPane. QUESTION_MESSAGE, null,valoresPosibles, valoresPosibles[0]);

68

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ 3.7.7.2. JFileChooser Elemento para seleccionar archivos, incluye mtodos para mostrar dialogo de seleccin. Constructor JFileChooser( ) Propiedades y mtodos showOpenDialog(JFileChooser ) getSelectedFile()

3.7.7.3. JColorChooser Componente para seleccionar un color, permite crear un dialogo de seleccin. Constructor JColorChooser() JColorChooser(Color) JColorChooser(ColorSelectionModel) Mtodos Color showDialog(Component, String, Color): crea y muestra un selector de dialogo en un cuadro modal void setColor(Color): elige el color seleccionado Color getColor(): Obtiene el color seleccionado void setSelectionModel(ColorSelectionModel): selecciona el modelo de seleccin para el selector de color
Color color = Color.pink; color = JColorChooser.showDialog( colores.this, "Seleccione un color", color);

69

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ 3.7.7.4. JSplitPane Un JSplitPane contiene dos componentes de peso ligero, separados por un divisor. Arrastrando el divisor, el usuario puede especificar qu cantidad de rea pertenece a cada componente. Un SplitPane se utiliza cuando dos componentes contienen informacin relacionada y queremos que el usuario pueda cambiar el tamao de los componentes en relacin a uno o a otro. Constructores JSplitPane() JSplitPane(int)

//crea un SplitPane //int indica orientacin HORIZONTAL_SPLIT o VERTICAL_SPLIT JSplitPane(int, boolean) // booleano selecciona si los componentes se redibujan continuamente cuando el usuario arrastra el divisor. JSplitPane(int, Component, Component) // Los parmetros Component seleccionan los componentes izquierdo y derecho o superior e inferior, respectivamente. JSplitPane(int, boolean, Component, Component) Propiedades y mtodos void setOrientation(int) // selecciona la orientacin del SplitPane puede ser HORIZONTAL_SPLIT o VERTICAL_SPLIT void setDividerSize(int) //selecciona tamao de divisor en pixeles setOneTouchExpandable(boolean) // selecciona si el SplitPane muestra los botones de control expandibles void setTopComponent(Component) //selecciona el componente indicado void setBottomComponent(Component) void setLeftComponent(Component) void remove(Component) //elimina componente void removeAll() //elimina todos los componentes void add(Component) // agrega un componente void setDividerLocation(double)

3.7.7.5. JTabbedPane Con la clase JTabbedPane, podemos tener varios componentes (normalmente objetos JPanel) compartiendo el mismo espacio. El

70

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ usuario puede elegir qu componente ver seleccionando la pestaa del componente deseado.

Constructores JTabbedPane() //crea un TabbedPaned JTabbedPane(int) // crea un TabbedPane con orientacin de las pestaas de acuerdo a los valores TOP, BOTTOM, LEFT, LEFT. Propiedades y mtodos addTab(String, Icon, Component, String) //aade nueva pestaa addTab(String, Icon, Component) addTab(String, Component) insertTab(String, Icon, Component, String, int) //inserta nueva pestaa en ndice especificado remove(Component) //elimina una pestaa de acuerdo a componente removeTabAt(int) //elimina pestaa de acuerdo a ndice removeAll() //remueve todas las pestaas int indexOfComponent(Component) //devuelve el ndice de la pestaa del componente espcificado void setSelectedIndex(int) // void setTitleAt(int,String) //selecciona el titulo de la pestaa void setIconAt(int, Icon) //selecciona el cono de acuerdo a ndice y figura void setBackgroundAt(int,Color) //selecciona color de fondo void setEnabledAt(int,boolean) void setForegroundAt(int,Color)

3.7..6. JToolBar Es un objeto contenedor que permite agrupar otros componentes normalmente botones con iconos en una fila o columna Las barras de herramientas tienen la particularidad de que el usuario puede situarlas en distintas configuraciones sobre el frame principal

Constructores JToolBar() // crea una barra de herramientas

71

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ Propiedades y mtodos Component add(Component) //aade un componente void addSeparator() // aade separador al final de la barra de herramientas void setFloatable(boolean) // La propiedad floatable es true por defecto, para indicar que el usuario puede arrastrar la barra de herramientas a una ventana separada.

3.7.7.7

JInternalFrame Con la clase JInternalFrame, se puede mostrar un JFrame, como una ventana dentro de otra ventana. Para crear un frame interno que parezca un dilogo sencillo, se pueden utilizar los mtodos showInternalXxxDialog de JOptionPane. Normalmente, los frames internos se muestran dentro de un JDesktopPane que es una subclase de JLayeredPane al que se le ha aadido el API para manejar el solapamiento de mltiples frames internos. Generalmente, se pone el panel superior dentro del panel de contenido de un JFrame. Constructores JInternalFrame() JInternalFrame(String) JInternalFrame(String, boolean) JInternalFrame(String, boolean,boolean) JInternalFrame(String, boolean,boolean, boolean) JInternalFrame(String, boolean,boolean, boolean, boolean) Mtodos de la clase JOptionPane: showInternalConfirmDialog showInternalInputDialog showInternalMessageDialog showInternalOptionDialog void setContentPane(Container) Container getContentPane() void setMenuBar(JMenuBar) void pack() void setDefaultCloseOperation(int) // Selecciona lo que hace el frame interno cuando el usuario intenta "cerrar" el frame. El valor por defecto es HIDE_ON_CLOSE. Otros posibles valores son DO_NOTHING_ON_CLOSE y DISPOSE_ON_CLOSE. void addInternalFrameListener(InternalFrameListener) void moveToFront() void moveToBack() void setClosed(boolean)

72

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ boolean isClosed() void setMaximum(boolean) 3.7.7.11. JToolTip. Es una pequea ventana que aparece cuando el dispositivo apuntador (ratn) se coloca encima de un componente. En lugar de crear objetos de esta clase, se suele llamaral siguiente mtodo, del que disponen todos los elementos derivados de la clase JComponent (JButton, JLabel, ...): Mtodo setToolTipText(String s);

3.7.7.10. JEditorPane void setPage(URL page);Muestra el documento contenido en la direccin de internet especificada en un objeto de la clase URL. void setText(String t);Establece la cadena de caracteres t como texto del componente. String getText( );Devuelve el contenido del componente JEditorPane. void addHyperlinkListener(HyperlinkListener h); Aade un Escuchador de activacin de enlaces de hipertexto. 3.7.7.12. JPopupMenu Son mens emergentes que se suelen visualizar al pulsar el botn derecho del ratn. Constructor: JPopupMenu(String titulo); (Visible con Motif L&F) Mtodos: JMenuItem add(JMenuItem menuItem); void addSeparator( ); void show(Component invocador, int x, int y); Muestra el men en la posicin (x,y) del espacio de coordenadas del componente alque pertenece.

73

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

CAPITULO III APLICACIONES CON AWT Y SWING


3.1. INTRODUCCION En este capitulo vamos a proporcionar ejemplos que van desde casos simples hasta casos de mediana complejidad. Asimismo se combinan el uso de los paquetes AWT y SWING de tal manera que les sirva de gua durante la creacin de los programas que ustedes diseen. Tambin se presentaran ejemplos de los diferentes tipos de gestores de distribucin asi como descripcin del manejo de eventos.

3.2. PRIMEROS PASOS CON SWING Casi siempre, el primer paso a la hora de construir una aplicacin es crear un JFrame (marco o ventana principal) inicial Por defecto un JFrame se crea de forma invisible, y sin tamao, as que es necesario activar su visualizacin mediante la operacin setVisible() y definirle un tamao a travs de setSize(). El cdigo para obtener esta ventana o interfaz ser: import javax.swing.*; public class Marco1 { public static void main(String[] args) { JFrame f = new JFrame("Prueba"); f.setSize(200,300); f.setVisible(true); } } Se importa el paquete swing as como todas sus clases representadas por el comodn asterisco (*). Se define la clase con un nombre para este caso Marco1, se crea el objeto f, que representa la ventana a la cual se le define un tamao que permite especificar ancho y alto. En nuestro caso, tiene una anchura de 200 y una altura de 300 y hacer visible la ventana a travs del argumento true.

Sin embargo, al cerrar este JFrame la aplicacin no termina. Esto ocurre porque es necesario asociar la accin de cerrar el JFrame con la finalizacin de la aplicacin podemos realizar esta asociacin mediante la operacin setDefaultCloseOperation() con su argumento constante EXIT_ON_CLOSE de la clase JFrame.
import javax.swing.*; public class Marco1 { public static void main(String[] args) { JFrame f = new JFrame("Prueba"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

74

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ f.setSize(200,300);


f.setVisible(true); } }

Crear Ventana Principal Por Herencia En este caso la estructura del programa es la siguiente:
import javax.swing.*; public class Marco1 extends JFrame { public Marco1( ) { setTitle("Prueba"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setSize(200,300);
setVisible(true); } public static void main(String[] args) { Marco1 f = new Marco1(); } }

En este caso se crea la ventana aplicando herencia, donde las propiedades de la ventana se definen en el mtodo constructor de la clase, de tal manera que cuando se crea el objeto ventana se aplican las propiedades incluidas en el mtodo constructor. Otras propiedades que pueden ser modificadas a travs de los siguientes mtodos:
.- setLocation(100,100); Este mtodo ubica la ventana de acuerdo a la siguiente estructura:

Declara la posicin del ngulo derecho en la parte que est arriba de la ventana en el desktop, en este caso <100, 100> (Son la x y la y respectivamente. La x se mide partiendo del lado izquierdo de la pantalla y aumenta a medida que se va hacia la derecha. La y se mide partiendo de la parte superior de la pantalla y aumenta a medida que se va hacia abajo).

75

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ Tamao de JFrame Para establecer el tamao del JFrame que contiene los componentes tenemos igualmente dos opciones: o Utilizar f.pack() para que ajuste su tamao al de los componentes de su interior. Esta es la opcin ms recomendable o Establecer su tamao indicando ancho y alto mediante f.setSize()

3.3. AADIR COMPONENTES A UNA VENTANA La estructura de la ventana o JFrame esta compuesta por capas tal como lo muestra la figura:

Entonces los componentes se deben aadir a la capa Content Pane (panel de contenido), como lo hace, existen varias formas dos de ellas son las siguientes: .- getContentPane .- setContentPane Mediante el mtodo Container getContentPane() que retorna la capa Content Pane y el mtodo .add() que agrega el componente a la capa obtenida, quedara de la siguiente forma: getContentPane().add(ObjetoComponente, ubicacin). Una variante de la forma anterior seria: Obtener la capa: Container c=getContentPane(); Agregar el componente. c.add(ObjetoComponente, ubicacin);

Lo del getContentPane() es porque en realidad la ventana no es el contenedor, sino un componente que lleva internamente la ventana y que se puede obtener a travs de este mtodo. Es a este componente al que debemos aadirle el layout y los componentes (botoncitos y dems).

76

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

Ejemplo Vamos a crear un JLabel con el texto Hola mundo y lo vamos a aadir al JFrame. Con esto ya tenemos un Hola mundo en Swing import javax.swing.*; public class HolaMundo { public static void main(String[] args) { JFrame f = new JFrame("Prueba"); f.getContentPane().add(new JLabel(Hola mundo),BorderLayout.NORTH); f.setSize(200,300); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }

Como se habr podido dar cuenta se ha incluido BorderLayout.NORTH, esta instruccin hace referencia a la ubicacin del componente sobre la ventana. Para esto debemos saber que la ventana tiene un administrador de diseo por defecto que se denomina BorderLayout, que se va a explicar ms adelante en el punto de gestores de distribucin. 3.4. LOOK AND FEEL Otra caracterstica que introduce Swing es que se puede especificar el Aspecto y Comportamiento (Look & Feel o L&F) que utilice el GUI de nuestro programa. Por el contrario, los componentes AWT siempre tienen el aspecto y comportamiento de la plataforma nativa. Cada ejecutable Java tiene un objeto UIManager que determina el Look-and-Feel, es decir, la apariencia que se proporciona a los diferentes componentes: botones, cajas de texto, cajas de seleccin, listas, etc., en pantalla y funcionamiento, que van a tener estos componentes.

77

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ Java utiliza el interfaz grfico de la plataforma sobre la que se est ejecutando para presentar los Componentes del AWT con el aspecto asociado a esa plataforma, de este modo los programas que se ejecuten en Windows tendran esa apariencia y los que se ejecuten en Unix tendrn apariencia Motif. Pero Swing permite la seleccin de esta apariencia grfica, independientemente de la plataforma en que se est ejecutando; tanto es as que, la apariencia por defecto de los Componentes Swing se denomina Metal, y es propia de Java. Teniendo siempre en cuenta las restricciones impuestas por el control de seguridad, se puede seleccionar la apariencia, o Look-and-Feel de los Componentes Swing invocando al mtodo setLookAndFeel() del objeto UIManager correspondiente al ejecutable. La forma en que se consigue esto es porque cada objeto JComponent tiene un objeto ComponentUI correspondiente que realiza todas las tareas de dibujo, manejo de eventos, control de tamao, etc. para ese JComponent. Una de las ventajas que representan las capacidades de Look&Feel incorporadas a Swing para las empresas, es el poder crear un interfaz grfico estndar y coporativo. Java incorpora su propio Look&Feel por defecto, cuyo nombre es Metal, y que se muestra a continuacin.

3.4.1. Poner Look and Feel del sistema operativo Normalmente las ventanas java tienen su propio aspecto, su propio estilo de botones y dems. Con java es muy fcil cambiar el aspecto (look and feel o skin) de nuestras ventanas para que tengan aspecto java, aspecto windows, etc. Basta con tener la librera adecuada y una sola lnea de cdigo. Para obtener el aspecto de ventanas propio del sistema operativo en el que estemos (windows xp, solaris, etc), basta con estas lneas de cdigo antes de crear ninguna ventana: import javax.swing.UIManager; ... 78

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ try {


UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

} catch (Exception e) { e.printStackTrace(); } Con UIManager.getSystemLookAndFeelClassName() obtenemos el nombre del Look and Feel por defecto del sistema operativo en el que estemos. Con UIManager.setLookAndFeel decimos qu Look and Feel queremos. 3.4.2. Cmo crear interfaces grficas con Look And Feel en Java Los componentes de Swing estn escritos en Java, sin ningn cdigo de especificacin de ventanas. Esto facilita la creacin de interfaces grficas sin tomar en cuenta el sistema de graficacin de ventanas donde se trabaje, y simplificando el desarrollo de aplicaciones. Java Look And Feel (de ahora en adelante J&F) es un API multiplataforma proporcionada por JavaSoft. .Java L&F implementa todas las funcionalidades bsicas de Swing, pero tambn se extiende en otras reas incluyendo:
o Temas o Sliders (barras de seleccin de rangos) o Toolbars (Barras de herramientas) o Trees (arboles de contenido)

Creando un JFrame con el Look And Feel activado Lo nico que tenemos que hacer es activar el Look And Feel, pasando true como parmetro al mtodo esttico setDefaultLookAndFeelDecorated de JFrame y de JDialog. Por ej.: import javax.swing.*; import java.awt.event.*; import java.awt.*; public class Ejemplo1Look extends JFrame { public Ejemplo1Look() { super("Ejemplo 1"); JButton boton = new JButton("Mostrar dialogo"); boton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){

79

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ JOptionPane.showMessageDialog(null, "Y as se ve un cuadro de dialogo de error", "Mensaje",JOptionPane.ERROR_MESSAGE); } } ); getContentPane().add(new JLabel("Asi se ve un Frame"), BorderLayout.NORTH); getContentPane().add(boton); setSize(200,80); setVisible(true); } public static void main(String args[]) { JFrame.setDefaultLookAndFeelDecorated(true); JDialog.setDefaultLookAndFeelDecorated(true); Ejemplo1Look ventana = new Ejemplo1Look(); ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } Este programa tiene la siguiente salida:

3.5. GESTORES DE DISTRIBUCIN (LAYOUTMANAGER) Una de las tareas ms tediosas a la hora de disear un JFrame con varios elementos en el interior es posicionar y establecer el tamao de cada uno de estos elementos. Tenemos dos alternativas para esta tarea: Posicionar cada uno de los elementos, indicando posiciones y tamaos. Adems al cambiar el tamao del JFrame los elementos no pueden actualizarse perdiendo el aspecto armnico que deben tener la interfaz. Utilizar un gestor de distribucin que se encarga de distribuir los componentes de forma automtica. Y que permiten actualizar el aspecto de la interfaz. En la programacin con Swing se recomienda el uso de un gestor de distribucin (LayoutManager) para la distribucin de los componentes en marcos y cuadros de dilogo.

80

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ Podemos establecer el gestor de distribucin para los elementos situados en un panel mediante: panel.setLayout(<gestor de distribucin>) Podemos anular la distribucin automtica mediante panel.setLayout(null) e indicar coordenadas absolutas. Los gestores de organizacin que ofrece Java entre otros son: 3.5.1. BorderLayout Se puede utilizar para colocar en un contenedor cinco componentes como mximo ya que proporciona cinco posiciones donde colocar los componentes, estas son: NORTH (arriba). SOUTH (abajo) WEST (izquierda) EAST (derecha) CENTER (en el centro).

Es el gestor de distribucin por defecto que tiene definido un objeto JFrame Ejemplo Crear una ventana con 5 botones y se colocan en cada posicin que este gestor proporciona.
import java.awt.*; import javax.swing.*; class panel extends JFrame { JButton b1,b2,b3,b4,b5; public panel() { Container c = getContentPane(); b1=new JButton("Norte"); b2=new JButton("Sur"); b3=new JButton("Este"); b4=new JButton("Oeste"); b5=new JButton("Centro"); //agregar botones al contenedor c.add(b1,BorderLayout.NORTH); c.add(b2,BorderLayout.SOUTH); c.add(b3,BorderLayout.EAST); c.add(b4,BorderLayout.WEST); c.add(b5,BorderLayout.CENTER); //Propiedades de la ventana setTitle("Gestor BorderLayout"); setSize(400,250); setVisible(true); } public static void main (String[] args){ panel t= new panel(); } }

81

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ 3.5.3. FlowLayout Coloca los componentes de izquierda a derecha conforme se van aadiendo a la ventana. El tamao de los componentes se ajusta a su contenido. Ejemplo: En este caso se modifica el gestor de diseo por defecto cambiando por el gestor FlowLayout, a travs del mtodo setLayout. Se agregan los botones creados de izquierda a derecha y la ventana toma el tamao de todos los objetos a travs del mtodo pack.
import java.awt.*; import javax.swing.*; class panel extends JFrame { JButton b1,b2,b3,b4,b5; public panel() { Container c = getContentPane(); c.setLayout(new FlowLayout()); b1=new JButton("Primero"); b2=new JButton("Segundo"); b3=new JButton("Tercero"); b4=new JButton("Cuarto"); b5=new JButton("Quinto"); //agregar botones al contenedor c.add(b1); c.add(b2); c.add(b3); c.add(b4); c.add(b5); setTitle("Gestor FlowLayout"); pack(); setVisible(true); } public static void main (String[] args){ panel t= new panel(); } }

3.5.3. GridLayout: Coloca los componentes del mismo tamao y los coloca en filas y columnas en funcin de los valores pasados al constructor. 82

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ Ejemplo, para este ejemplo se modifica el gestor de diseo del JFrame por el gestor GridLayout que ubica los 4 botones en 2 filas y 2 columnas y adems define con valor 5 la distancia tanto vertical como horizontal entre los botones que son los dos ltimos argumentos del objeto GridLayout.

import java.awt.*; import javax.swing.*; class panel extends JFrame { JButton b1,b2,b3,b4; public panel() { Container c = getContentPane(); c.setLayout(new GridLayout(2,2, 5,5)); b1=new JButton("Primero"); b2=new JButton("Segundo"); b3=new JButton("Tercero"); b4=new JButton("Cuarto");

//agregar botones al contenedor c.add(b1); c.add(b2); c.add(b3); c.add(b4);

setTitle("Gestor GridLayout"); pack(); setVisible(true); } public static void main (String[] args){ panel t= new panel(); } }

3.5.4. BoxLayout

83

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ Este gestor de distribucin organiza los componentes horizontal o verticalmente, ajustando los componentes al espacio disponible Ejemplo, para este caso el BoxLayout organiza los componentes horizontalmente, aqu el mtodo constructor panel, recibe el ttulo de la ventana y lo envia a travs de super al mtodo constructor de la clase padre, otra variante en este ejemplo respecto a los anteriores es que conforme se crean los objetos se van agregando al contenedor.
import java.awt.*; import javax.swing.*; class panel extends JFrame { public panel(String titulo) { super(titulo); Container c = getContentPane(); //Modifica gestor por defecto c.setLayout(new BoxLayout(c, BoxLayout.X_AXIS)); //se crean componentes y se agregan al contenedor c.add(new JLabel("Cdigo")); c.add(new JTextField(8)); c.add(new JLabel("Titular")); c.add(new JTextField(30)); c.add(new JLabel("Saldo")); c.add(new JTextField(8)); c.add(new JLabel("Inters")); c.add(new JTextField(4)); setTitle("Gestor BoxLayout"); pack(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main (String[] args){ panel t= new panel("Gestin de Cuentas"); } }

Cambiando la constante BoxLayout.X_AXIS, que los distribuye horizontalmente por BoxLayout.Y_AXIS que los distribuye verticalmente se tiene la siguiente interfaz:

84

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

3.5.5. GridBagLayout Este es un organizador complejo que permite ajustar la posicin de componentes. Al colocar los componentes en los contenedores especifican las restricciones que se deben cumplir (posicin componente, anchura y altura del componente, separacin entre componentes, posicin dentro del espacio que ocupa,...). los se del los

Ejemplo Disear una ventana en la que situamos determinados componentes (botones) en diferentes posiciones. Tal como lo muestra la siguiente figura:

Tiene un rea de texto que ocupa casi toda la ventana. Un "Boton 1" en la parte superior derecha, un "Boton 2" en la derecha hacia el medio, el "Boton 3" en la equina inferior izquierda, el "Boton 4" en la esquina inferior derecha y un campo de texto entre estos dos ltimos botones. Hacer una rejilla adecuada El primer paso es dibujar la ventana que queremos. Es importante dibujarla ms o menos estirada, para tener claro si los botones deben hacerse grandes o no. Por ejemplo, en la figura anterior, los botones deben mantener su tamao aunque estiremos la ventana, sin embargo el area de texto debe crecer con la ventana y el campo de texto slo debe crecer horizontalmente.

85

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ Luego, sobre el dibujo, hay que trazar unas lineas horizontales y verticales, para tratar de delimitar una rejilla en la que iran colocados los botones. Para trazar esta rejilla y que luego el cdigo no nos salga muy complicado conviene tener en cuenta lo siguiente:

Debemos tratar de incluir los componentes en las celdas. Cada componente debe ocupar una o ms celdas. Dos componentes no pueden ocupar la misma celda. No es necesario que las celdas de la rejilla sean todas del mismo tamao ni es necesario que un componente ocupe una celda completa.

Para que no se lie el cdigo, conviene que el componente ocupe toda la celda, o bien que est centrado en la misma, o bien pegado al centro de uno de los bordes de la celda o a una esquina de la misma.

Un ejemplo de rejilla para nuestra ventana puede ser la de la siguiente figura:

Vamos con las lneas verticales: La primera en el borde izquierdo de la ventana. La segunda entre el boton 3 y el campo de texto. La tercera entre el campo de texto y el boton 4. La ltima en el borde derecho de la ventana. Estas lneas son casi obligadas, puesto que el boton 3, el campo de texto y el boton 4 nos las limitan. No importa que una de ellas pase por enmedio del area de texto, smplemente haremos que esta ocupe dos columnas. Estas lneas nos limitan tres columnas que hemos numerado como 0, 1 y 2. Vamos ahora con las lneas horizontales. La primera por la parte de arriba de la ventana La segunda puede pasar por cualquier sitio entre el boton 1 y el boton 2.

86

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

La tercera pasa justo por debajo del area de texto y por encima de boton 3, campo de texto y boton 4 La ltima por el borde inferior de la ventana. Como hemos dicho, la segunda puede pasar por cualquier lado entre los dos botones. Para que no se nos complique el cdigo y segn dijimos arriba, cogiendo la segunda lnea pegando por arriba al botn 2 (como hemos hecho en el dibujo), ya tenemos al boton 2 ocupando la parte superior de su celda. Tambin podamos haberla pegado al botn 1, as el botn 2 estara ms o menos en el centro de su celda. Lo que complicara luego el cdigo sera poner la lnea entre ambos botones, por lo que el boton 2 quedara a 1/3 de la parte superior de su celda. Resumiendo, nuestro area de texto ocupa cuatro celdas, los botones una cada uno y el campo de texto otra. Boton 1 y 2 no ocupan toda la celda, pero estn en la parte superior de la misma. Nuestra primera aproximacin Vamos a hacer nuestro primer cdigo para obtener la ventana. Nuestra ventana ser un JFrame, as que hacemos una clase que herede de JFrame y le ponemos el GridBagLayout. class Ventana extends JFrame { public Ventana() { super ("Ejemplo 1"); // El ttulo this.getContentPane().setLayout (new GridBagLayout()); // Le ponemos el GridBagLayout .......... } } Ahora debemos empezar a aadir componentes. Tenemos por un lado el mtodo add() con un slo parmetro. JTextArea areaTexto = new JTextArea("Area texto"); this.getContentPane().add (areaTexto); Esta llamada aade el rea de texto, dejando al GridBagLayout total libertad para decidir dnde y cmo ponerlo. No es lo que queremos. Necesitamos el mtodo add() que admite un segundo parmetro. Este segundo parmetro le indica al layout dnde y cmo colocar el componente. El segundo parmetro es un Object, lo que quiere decir que podriamos meter cualquier cosa. Evidentemente esto no es asi, debemos meter algo que el layout entienda. Cada layout entiende su propio segundo parmetro. El GridBagLayout admite como segundo parmetro un GridBagConstraints.

87

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ GridBagConstraints en una clase en cuyos atributos se guarda informacin de cmo y dnde aadir el componente. De momento vamos a contemplar slo cuatro de estos atributos:

GridBagConstraints.gridx nos dice la posicin x del componente, es decir, el nmero de columna en la que est el componente, siendo la columna 0 la primera columna de la izquierda. Si el componente ocupa varias columnas (como nuestra rea de texto), debemos indicar la columna en la que est la esquina superior izquierda del componente. GridBagConstraints.gridy nos dice la posicin y del componente, es decir, el nmero de fila en la que est el componente, siendo la fila 0 la primera fila de la parte de arriba. Si el componente ocupa varias filas (como nuestra rea de texto), debemos indicar la fila en la que est la esquina superior izquierda del componente. GridBagConstraints.gridwidth nos dice cuntas celdas en horizontal debe ocupar el componente. El ancho del componente. GridBagConstraints.gridheight nos dice cuantas celdas en vertical debe ocupar el componente. El alto del componente. Con esto podemos aadir nuestra rea de texto JTextArea areaTexto = new JTextArea ("Area texto"); GridBagConstraints constraints = new GridBagConstraints(); constraints.gridx = 0; // El rea de texto empieza en la columna cero. constraints.gridy = 0; // El rea de texto empieza en la fila cero constraints.gridwidth = 2; // El rea de texto ocupa dos columnas. constraints.gridheight = 2; // El rea de texto ocupa 2 filas. this.getContentPane().add (areaTexto, constraints); En realidad gridwith y gridheight admite tambin determinadas constantes que hacen que el componente se estire hasta el final del contenedor, ocupando todas las columnas o filas libres o hasta que encuentre otro componente. Los siguientes elementos tienen todos un gridwidth y gridheight de 1, puesto que ocupan una fila y columna. Las posiciones son las siguientes: JButton boton1 = new JButton ("Boton 1"); constraints.gridx = 2; constraints.gridy = 0; constraints.gridwidth = 1; constraints.gridheight = 1; this.getContentPane().add (boton1, constraints);

JButton boton2 = new JButton ("Boton 2"); constraints.gridx = 2; constraints.gridy = 1; constraints.gridwidth = 1;

88

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ constraints.gridheight = 1; this.getContentPane().add (boton2, constraints);

JButton boton3 = new JButton ("Boton 3"); constraints.gridx = 0; constraints.gridy = 2; constraints.gridwidth = 1; constraints.gridheight = 1; this.getContentPane().add (boton3, constraints);

JButton boton4 = new JButton ("Boton 4"); constraints.gridx = 2; constraints.gridy = 2; constraints.gridwidth = 1; constraints.gridheight = 1; this.getContentPane().add (boton4, constraints);

JTextField campoTexto = new JTextField ("Campo texto"); constraints.gridx = 1; constraints.gridy = 2; constraints.gridwidth = 1; constraints.gridheight = 1; this.getContentPane().add (campoTexto, constraints); Hay un detalle importante a tener en cuenta. Slo hemos hecho un new de GridBagConstraints, por lo que todos ellos comparten la misma instancia de ese objeto. Hay que tener en cuenta que si cambiamos uno de los atributos para un componente, debemos restaurarlo luego para el siguiente. Por ejemplo, para el area de texto pusimos gridwidth a 2. Para el siguiente componente (el botn1), debemo volver a poner este valor a 1. Por ello es acosejable poner siempre todos los atributos. Otra opcin es hacer un new GridBagConstraints para cada componente (claramente menos eficiente) o finalmente la que he seguido en el cdigo de ejemplo, ser muy cuidadoso e ir restaurando valores segn se van cambiando. Si ejecutamos lo que tenemos hasta ahora y estiramos un poco la ventana resultante nos sale lo de la siguiente figura:

89

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

Bueno, no se parece mucho a lo que queramos. Se ha quedado todo en el centro de la ventana y el area de texto es bastante pequeo. Qu ha pasado? Estirar las filas y las columnas Lo que ha pasado es que slo le hemos dicho al GridBagLayout dnde colocar los componentes y eso lo ha hecho bien. Cada componente est donde debe. Lo que pasa es que no le hemos dicho nada de cmo estirar las filas y columnas, as que ha hecho lo que hace por defecto: Cada fila y columna es del tamao mnimo necesario para albergar sus componentes y estn centradas dentro de la ventana. En la siguiente figura vemos como estn nuestras filas y columnas:

90

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ Las filas son de la altura justa para contener a los botones. Las columnas tambin. El rea de texto que ocupa cuatro celdas se ha situado en el medio de ellas y le sobra un montn de espacio. El siguiente paso a dar consiste en decir cmo se deben estirar las filas columnas. Si comparamos con la figura en las que marcamos inicialmente las filas y columnas, vemos que las dos primeras filas deben ser ms anchas, la tercera fila ya est bien de ancho. En cuanto a las columnas, la segunda es la que debe estirarse, la primera y tercera estn bien. Para estirar filas y columnas, dentro del GridBagConstraints tenemos los campos weigthx y weigthy. El primero indica cmo estirar las columnas. El segundo las filas. Aqui vamos a contar una forma sencilla de usar estos campos que nos servir para la mayora de los casos. A estos campos debemos darles el valor 0.0 (que es el valor por defecto) si no queremos que la fila o columna se estire. Este es el caso para la primera y tercera columna, as como para la tercera fila. Debemos dar el valor 1.0 a las filas o columnas que queremos que se estiren hasta completar toda la ventana. Es el caso de las dos primeras filas y de la columna del medio. Hay dos detalles con estos campos. El primero es que widthy afecta a una fila completa, no solo a un componente. Por ello, cada vez que aadamos un componente a esa fila, debemos dar a widthy el mismo valor (o 0.0 o 1.0). Lo mismo pasa con widthx y las columnas. El segundo detalle es el que comentamos antes, slo estamos usando una instancia de GridBagConstraints, asi que despus de poner uno de estos campos a 1.0 y aadir un componente, debemos volver a ponerlo a 0.0 para el siguiente (suponiendo que sea eso lo que necesita). El cdigo ahora, aadiendo estos dos campos, quedara as: JTextArea cajaTexto = new JTextArea("Area texto"); constraints.gridx = 0; // Columna 0. No necesita estirarse, no ponemos weightx constraints.gridy = 0; // Fila 0. Necesita estirarse, hay que poner weighty constraints.gridwidth = 2; constraints.gridheight = 2; constraints.weighty = 1.0; // La fila 0 debe estirarse, le ponemos un 1.0 this.getContentPane().add (cajaTexto, constraints); constraints.weighty = 0.0; // Restauramos al valor por defecto, para no afectar a los siguientes componentes.

JButton boton1 = new JButton ("Boton 1"); constraints.gridx = 2; // Columna 2. No necesita estirarse, no ponemos weightx constraints.gridy = 0; // Fila 0. Necesita estirarse, hay que poner weighty constraints.gridwidth = 1; constraints.gridheight = 1;

91

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ constraints.weighty = 1.0; // La fila 0 debe estirarse, le ponemos un 1.0. Ya lo hicimos en el area de texto, // pero aqu debemos ser coherentes y poner lo mismo. this.getContentPane().add (boton1, constraints); constraints.weighty = 0.0; // Restauramos al valor por defecto, para no afectar a los siguientes componentes.

JButton boton2 = new JButton ("Boton 2"); constraints.gridx = 2; // Columna 2, no necesita estirarse, no ponemos weigthx constraints.gridy = 1; // Fila 1, necesita estirarse, hay que poner weigthy constraints.gridwidth = 1; constraints.gridheight = 1; constraints.weighty = 1.0; // La fila 1 debe estirarse, le ponemos 1.0 this.getContentPane().add (boton2, constraints); constraints.weighty = 0.0; // Restauramos el valor por defecto.

JButton boton3 = new JButton ("Boton 3"); constraints.gridx = 0; // Columna 0, no necesita estirarse, no ponemos weigthx constraints.gridy = 2; // Fila 2, no necesita estirarse, no ponemos weigthy constraints.gridwidth = 1; constraints.gridheight = 1; this.getContentPane().add (boton3, constraints);

JButton boton4 = new JButton ("Boton 4"); constraints.gridx = 2; // Columna 2, no necesita estirarse, no ponemos weightx constraints.gridy = 2; // Fila 2, no necesita estirarse, no ponemos weigthy constraints.gridwidth = 1; constraints.gridheight = 1; this.getContentPane().add (boton4, constraints);

JTextField campoTexto = new JTextField ("Campo texto"); constraints.gridx = 1; // Columna 1, debe estirarse, le ponemos el weigthx constraints.gridy = 2; // Fila 2, no necesita estirarse, no ponemos weigthy constraints.gridwidth = 1; constraints.gridheight = 1; constraints.weightx = 1.0; // La columna 1 debe estirarse, ponemos el 1.0 en weigthx this.getContentPane().add (campoTexto, constraints); // Puesto que es el ltimo componente, no restauramos el valor por defecto. Si ms adelante aadimos ms // componentes, seguro que pagamos cara nuestra osada.

92

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ Bueno, vamos a ejecutar nuestro programa, estirar la ventana y a ver qu sale. Sale lo de la siguiente figura, que tampoco es lo que queremos.

Qu es lo que ha pasado ahora?. Le hemos dicho que estire las filas y columnas y es lo que ha hecho, pero como no le hemos dicho nada sobre los componentes, no los ha estirado en absoluto.
Estirar los componentes

Si pintamos sobre la ventana las rayas que delimtan filas y columnas, vemos que efectivamente se han ensanchado las que hemos dicho

pero los componentes siguen con su tamao original y en el centro de las celdas que tienen asignadas. El area de texto sigue igual, en el centro de sus cuatro celdas, los botones 1 y 2 se han centrado en sus celdas y lo mismo le pasa al campo de texto. Lo siguiente que tenemos que hacer es decir qu componentes deben estirarse (el area de texto y el campo de texto para nuestro ejemplo). Para

93

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ aquellos componentes que no deben estirarse, podemos indicar en qu parte de la celda queremos que se situen (caso del boton 1 y boton 2). Para hacer que un componente se estire, tenemos el atributo fill del GridBagConstraints. Este puede tomar los siguientes valores:

GridBagConstraints.NONE para que no se estire en ningn sentido, es la opcin por defecto. GridBagConstraints.VERTICAL para que se estire slo en vertical GridBagConstraints.HORIZONTAL para que se estire slo en horizontal. GridBagConstraints.BOTH para que se estire en ambas dimensiones Si el componente no se estira en alguna direccin, podemos decirle por medio de anchor en GridBagConstraints qu posicin queremos que ocupe. Las posibilidades son

GridBagConstraints.CENTER para que el componente ocupe el centro de la celda. Es la opcin por defecto GridBagConstraints.NORTH para que se pegue a la parte superior, centrado en la misma. GridBagConstraints.NORTHEAST para que se pegue a la esquina superior derecha. GridBagConstraints.WEST para que se pegue al lado izquierdo, centrado en ese lado. GridBagConstraints.NORTHWEST para que se pegue a la esquina superior izquierda. Igual que antes, estamos usando una nica instancia de GridBagConstraints, por lo que si al aadir un componente cambiamos una opcin, debemos tenerlo en cuenta para el siguiente. Bueno, pues bsicamente nos queda decirle al area de texto de se ensanche en todos los sentidos, al campo de texto que se ensanche en horizontal y a los botones 1 y 2 que ocupen la posicion NORTH de su celda. El cdigo sera el siguiente: JTextArea cajaTexto = new JTextArea("Area texto"); constraints.gridx = 0; constraints.gridy = 0; constraints.gridwidth = 2; constraints.gridheight = 2; // El area de texto debe estirarse en ambos sentidos. Ponemos el campo fill. constraints.fill = GridBagConstraints.BOTH; constraints.weighty = 1.0; this.getContentPane().add (cajaTexto, constraints); constraints.weighty = 0.0;

JButton boton1 = new JButton ("Boton 1");

94

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ constraints.gridx = 2; constraints.gridy = 0; constraints.gridwidth = 1; constraints.gridheight = 1; constraints.weighty = 1.0; // El botn 1 debe ocupar la posicin NORTH de su celda constraints.anchor = GridBagConstraints.NORTH; // El botn 1 no debe estirarse. Habamos cambiado este valor en el // area de texto, asi que lo restauramos. constraints.fill = GridBagConstraints.NONE; this.getContentPane().add (boton1, constraints); // Restauramos valores por defecto constraints.anchor = GridBagConstraints.CENTER; constraints.weighty = 0.0;

JButton boton2 = new JButton ("Boton 2"); constraints.gridx = 2; constraints.gridy = 1; constraints.gridwidth = 1; constraints.gridheight = 1; constraints.weighty = 1.0; // El boton 2 debe ocupar la posicin NORTH de su celda. constraints.anchor = GridBagConstraints.NORTH; this.getContentPane().add (boton2, constraints); // Restauramos valores por defecto. constraints.weighty = 0.0; constraints.anchor = GridBagConstraints.CENTER;

JButton boton3 = new JButton ("Boton 3"); constraints.gridx = 0; constraints.gridy = 2; constraints.gridwidth = 1; constraints.gridheight = 1; this.getContentPane().add (boton3, constraints);

JButton boton4 = new JButton ("Boton 4"); constraints.gridx = 2; constraints.gridy = 2; constraints.gridwidth = 1; constraints.gridheight = 1; this.getContentPane().add (boton4, constraints);

JTextField campoTexto = new JTextField ("Campo texto"); constraints.gridx = 1; constraints.gridy = 2; constraints.gridwidth = 1;

95

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ constraints.gridheight = 1; constraints.weightx = 1.0; // El campo de texto debe estirarse slo en horizontal. constraints.fill = GridBagConstraints.HORIZONTAL; this.getContentPane().add (campoTexto, constraints); Bueno, ejecutamos esto, estiramos la ventana, y Sale lo que queramos al principio.

3.6. MANEJO DE EVENTOS


El modelo de eventos que utiliza Swing es el mismo que AWT, el de Java 1.1, aadiendo algunos nuevos eventos para los nuevos componentes. Utilizando igualmente las interfaces Listener, las clases Adapter o las clases annimas para registrar los objetos que se encargaran de gestionar los eventos.

Para la captura de eventos Swing usa clases, cada clase de captura de eventos (event listeners) debe implementar una interfaz concreta en funcin del tipo de eventos que desea capturar Una vez implementado el listener, bastar con indicar ste al componente del cual deseamos capturar los eventos 3.6.1. Elementos del modelo de eventos Los elementos son los siguientes: a) Clase del evento Cuando se produce un evento dicho evento es representado como un objeto de una clase que desciende de EventObject. Los eventos estn organizados en jerarquas de clases de eventos

96

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

b) Fuentes de Eventos (event sources) Las fuentes de eventos (event sources) son objetos que detectan eventos y notifican a los receptores que se han producido dichos eventos Alto Nivel ActionEvent, clicar sobre un botn o elegir un elemento del men. AdjustmentEvent, mover las barras de desplazamiento. ItemEvent, elegir valores. TextEvent, cambiar texto.
Swing incorpora algunos de los nuevos eventos como: AncestorEvent: Antecesor aadido desplazado o eliminado. CaretEvent: El signo de intercalacin del texto ha cambiado. ChangeEvent: Un componente ha sufrido un cambio de estado. DocumentEvent: Un documento ha sufrido un cambio de estado. HyperlinkEvent: Algo relacionado con un vnculo hipermedia ha cambiado. InternalFrameEvent: Un AWTEvent que aade soporte para objetos JInternalFrame. ListDataEvent: El contenido de una lista ha cambiado o se ha aadido o eliminado un intervalo. ListSelectionEvent: La seleccin de una lista ha cambiado. MenuEvent: Un elemento de men ha sido seleccionado o mostrado o bien no seleccionado o cancelado. PopupMenuEvent: Algo ha cambiado en JPopupMenu. TableColumnModelEvent: El modelo para una columna de tabla ha cambiando. TableModelEvent: El modelo de una tabla ha cambiado. TreeExpansionEvent: El nodo de un rbol se ha extendido o se ha colapsado. TreeModelEvent: El modelo de un rbol ha cambiado. TreeSelectionEvent: La seleccin de un rbol ha cambiado de estado. UndoableEditEvent: Ha ocurrido una operacin que no se puede realizar.

Bajo Nivel
ComponentEvent, eventos elementales relacionados con componentes. ContainerEvent, eventos elementales relacionados con contenedores. KeyEvent, eventos relacionados con las pulsaciones sobre el teclado. MouseEvent, eventos relacionados con las pulsaciones del ratn. FocusEvent, eventos relacionados con el focus. WindowEvent, eventos elementales relacionados con ventanas.

Swing incorpora algunos de los nuevos eventos como: MenuKeyEvent MenuDragMouseEvent

c) Receptores de Eventos (event listener)

97

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ Son objetos instanciados de una clase que implementa un interface especfico, denominado interface listener, son invocados cuando ocurre un evento a travs del objeto fuente. Existen ciertos objetos receptores (event Listeners) que son comunes a todos los componentes: .-FocusListener: captura eventos relacionados con la recepcin o prdida del foco .-KeyListener: captura pulsaciones de teclado sobre el componente activo .-MouseListener: captura la entrada o salida del cursor sobre un componente, as como pulsaciones de los botones .-MouseMotionListener: captura movimientos del ratn sobre el componente. Otros son especficos de algunos componentes: ActionListener: captura cierto tipo de accin realizada sobre ciertos componentes. Por ejemplo, pulsar un botn, seleccionar un elemento en una lista desplegable o una opcin en un men ChangeListener: registra los cambios sobre ciertos componentes. Por ejemplo un cambio en el dato de un spinner, o un nuevo valor seleccionado en un slider ItemListener: recoge el cambio de estado en un componente tipo on/off: check boxes, radio buttons y listas desplegables ListSelectionListener: es un listener especfico para detectar las selecciones mltiples realizadas en listas y tablas WindowListener: permite recoger los eventos relacionados con las ventanas (cerrar, minimizar, maximizar, iconizar, etc.) en los frames, frames internos y cuadros de dilogo.

Si la interfaz captura un nico tipo de evento, como ActionListener, normalmente tendr una nica operacin a implementar void actionPerformed (ActionEvent e) En cambio los listeners ms complejos como FocusListener requieren la implementacin de varias operaciones, cada una para un tipo de evento concreto void focusGained (FocusEvent e) void focusLost (FocusEvent e)

Relacin de Eventos con sus oyentes

98

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

Cada interfaz Listener se corresponde con un tipo de evento. As pues, si por ejemplo tenemos que gestionar un evento ContainerEvent existe una interfaz con los mtodos relacionados con el ContainerEvent que son componentAdded() y componentRemoved(). Estos son los mtodos que tiene que implementar el eventListenerObject. Cada vez que se aada o borre un componente de un container se generar el evento ContainerEvent y se ejecutar el mtodo correspondiente cuya implementacin estar en el eventListenerObject. Es muy importante resaltar que el eventListenerObject debe de implementar todos y cada uno de los mtodos incluidos en la interfaz Listener. Pero claro, si la aplicacin del usuario no va a utilizar muchos de ellos, para qu implementarlos? Habr muchos mtodos vacos y para evitar esto se utilizan las llamadas clases Adapter.

99

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ Jerarqua de Interfaces o listeners

d) Registro e implementacin de un Listener Cuando ya disponemos del objeto fuente y del objeto receptor es necesario asociarlos, es decir, hay que registrar el objeto receptor de eventos con el objeto fuente de los mismos: objetoFuenteEventos.add_Tipo_Listener (Tipo_Listener L) Hay dos formas bsicas de implementar un Listener: Hacer que el JFrame que genera o contiene el componente generador del evento sea un listener, haciendo que implemente la interfaz correspondiente (lo ms simple y eficiente) Implementar una pequea clase interior que haga de listener (lo ms flexible) e) Clases Adaptadoras Para las interfaces con ms de una operacin Swing proporciona por comodidad una clase adaptadora (adapter class), que tienen como objetivo implementar nicamente aquellos mtodos que van a hacer falta en
la interfaz de usuario.

Por ello existe una clase adaptadora por cada interface listener que tiene ms de un mtodo:
Hay 7 clases Adapter: ComponentAdapter, ContainerAdapter, FocusAdapter, MouseAdapter, MouseMotionAdapter y WindowAdapter. KeyAdapter,

100

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________


Las clases Adapter derivan de Object y son clases predefinidas con implementaciones vacas para todos los mtodos. Lo que tiene que hacer el programador es hacer que sus eventListenerObject deriven directamente de alguna de estas clases segn el evento y despus implementar nicamente aquellos mtodos que vaya a utilizar en su aplicacin.

La clase adaptadora correspondiente se obtiene sustituyendo Listener por Adapter Ejemplo: WindowListener -> WindowAdapter f) Clases Annimas
Son muy tiles cuando solo se necesita un objeto eventListenerObject que contenga los mtodos de Listener para gestionar el evento adecuado. Un ejemplo podra ser el siguiente: 1. import java.awt.*; 2. import java.awt.event.*; 3. class Ventana extends Frame 4. { 5. public Ventana() 6. { 7. addWindowListener(new WindowAdapter() 8. { 9. public void windowClosing(WindowEvent e) 10. { 11. dispose(); 12. System.exit(0); 13. } 14. }); 15. } 16. public static void main(String args[]) 17. { 18. 19. Ventana mainFrame = new Ventana(); 20. mainFrame.setSize(400, 400); 21. mainFrame.setTitle("Ventana"); 22. mainFrame.setVisible(true); 23. } 24. } Se puede ver como en la lnea 7 se instancia la clase WindowAdapter en un objeto sin nombre dentro del mtodo addWindowListener adems de, aprovechndonos de la sintaxis del lenguaje, implementamos tambin ah los mtodos que nos hagan falta.

101

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

/* Ejemplos de ventanas de dialogo */

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class demo extends JFrame { public demo() { setTitle("Prueba de JOptionPane"); setSize(300,400); //icono y boton OK predeterminados, se pone el ttulo JOptionPane.showMessageDialog(this, "Debe introducir datos en todos los campos", "Error de entrada de datos", JOptionPane.ERROR_MESSAGE); // cuadro de opcin personalizado Object[] textoOpciones = {"Si adelante", "Ahora no","No se que hacer"}; int opcion = JOptionPane.showOptionDialog(this, " Desea realizar la operacin ahora ?", "Mensaje de confirmacin", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, //utilizar el icono predeterminado textoOpciones,textoOpciones[0]); //botn predeterminado setVisible(true); } public static void main(String[] s) { new demo();} }

/* Programa que centra la ventana sonre la pantalla del dispositivo */ import java.awt.*; import javax.swing.*; import java.awt.event.*; class centrado extends JFrame{ public centrado() { try { aaa(); }

102

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________


catch(Exception e) { setVisible(true); } private void aaa() throws Exception { //obtener las dimensiones de la pantalla Toolkit kit = Toolkit.getDefaultToolkit(); Dimension tamaoVtna = kit.getScreenSize(); int alto = tamaoVtna.height; int ancho = tamaoVtna.width; //centrar la ventana en la pantalla this.setSize(ancho/2, alto/2); setLocation(ancho/4, alto/4); //Establecer ttulo e icono Image img = kit.getImage("IMG_2555.JPG"); //gif y jpeg setIconImage(img); setTitle("Ventana centrada respecto a pantalla"); } public static void main(String[] s) { new centrado(); } } e.printStackTrace(); }

103

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________


/* Programa que crea dos botones y un cuadro de texto donde muestra a travs de un texto el botn elegido, se crea un panel personalizado el cual es agregado a la ventana principal a travs del mtodo add() */ import java.awt.*; import java.awt.event.*; import javax.swing.*; public class demoBotones extends JPanel { JButton boton1 = new JButton( "Boton 1" ); JButton boton2 = new JButton( "Boton 2" ); JTextField texto = new JTextField( 20 ); public demoBotones() { ActionListener al = new

ActionListener() {

public void actionPerformed( ActionEvent evt ) { String nombre = ( (JButton)evt.getSource()).getText(); texto.setText( nombre+" Pulsado" ); } }; boton1.addActionListener( al ); boton1.setToolTipText( "Soy el JBoton 1" ); add( boton1 ); boton2.addActionListener( al ); boton2.setToolTipText( "Soy el JBoton 2" ); add( boton2 ); texto.setToolTipText( "Soy el JCampoDeTexto" ); add( texto ); } public static void main( String args[] ) { JFrame ventana = new JFrame( "Tutorial de Java, Swing" ); ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ventana.getContentPane().add( new demoBotones(),BorderLayout.CENTER ); ventana.setSize( 300,100 ); ventana.setVisible( true ); } }

104

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________


/* Programa que crea etiquetas definiendo para cada una de ellas diferentes propiedades, como alineamiento, imgenes, fuentes, etc.*/ import java.awt.*; import java.awt.event.*; import javax.swing.*; class Etiqueta extends JPanel { public Etiqueta() { setLayout( new GridLayout( 2,2 ) ); JLabel etiq1 = new JLabel(); etiq1.setText( "Etiqueta1" ); add( etiq1 ); JLabel etiq2 = new JLabel( "Etiqueta2" ); etiq2.setFont( new Font( "Helvetica", Font.BOLD, 18 ) ); add( etiq2 ); Icon imagen = new ImageIcon( "flor.gif" ); JLabel etiq3 = new JLabel( "Etiqueta3",imagen,SwingConstants.CENTER ); etiq3.setVerticalTextPosition( SwingConstants.TOP ); add( etiq3 ); JLabel etiq4 = new JLabel( "Etiqueta4",SwingConstants.RIGHT ); add( etiq4 ); } public static void main( String args[] ) { JFrame ventana = new JFrame( "Manual de Java-UNP" ); ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ventana.getContentPane().add( new Etiqueta(),BorderLayout.CENTER ); ventana.setSize( 300,150 ); ventana.setVisible( true ); } }

105

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________


/* programa que crea componentes botones de los tipos que maneja java */ import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; import java.lang.reflect.*; public class demoOpciones extends JPanel { static String ids[] = { "Mortadelo","Filemon","Carpanta", "Rompetechos","Pepe Gotera","Otilio", }; static JPanel creaPanelBotones( Class bClass,String ids[] ) { ButtonGroup botones = new ButtonGroup(); JPanel panel = new JPanel(); String titulo = bClass.getName(); //Obtiene nombre de clase y lo almacena en una cadena titulo = titulo.substring( titulo.lastIndexOf('.')+1 ); panel.setBorder( new TitledBorder( titulo ) ); for( int i=0; i < ids.length; i++ ) { AbstractButton botonAbs = new JButton( "fallo" ); try { // Se utiliza el constructor dinmico al que se pasa una cadena como argumento Constructor ctor = bClass.getConstructor( new Class[] { String.class } ); // Se crea un nuevo objeto del tipo del botn botonAbs = ( AbstractButton )ctor.newInstance( new Object[]{ ids[i] } ); } catch( Exception e ) { System.out.println( "No puedo crear " + bClass ); } botones.add( botonAbs ); panel.add( botonAbs ); } return( panel ); } public demoOpciones() { add( creaPanelBotones( JButton.class,ids ) ); add( creaPanelBotones( JToggleButton.class,ids ) ); add( creaPanelBotones( JCheckBox.class,ids ) ); add( creaPanelBotones( JRadioButton.class,ids ) ); } public static void main( String args[] ) { JFrame frame = new JFrame( "Manual de Java - UNP" ); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add( new demoOpciones(),BorderLayout.CENTER ); frame.setSize( 600,300 ); frame.setVisible( true );

106

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________


} }

Si se quieren botones de seleccin nica, los conocidos como botones radio, que tienen la particularidad de que solamente puede haber uno seleccionado, hay que crearse un grupo de botones, aadiendo botones a ese grupo uno a uno. Pero, Swing permite que cualquier AbstractButton pueda ser aadido a un ButtonGroup. En el ejemplo anterior, se crean varios paneles de botones, Para evitar la repeticin del cdigo correspondiente a la incorporacin de cada uno de los botones, en el ejemplo se utiliza la reflexin para generar los grupos de diferentes tipos de botones. Esto se puede ver en creaPanelBotones(), que crea un grupo de botones y un JPanel, y para cada String en el array que figura como segundo argumento de creaPanelBotones(), aade un objeto de la clase indicada por el primero de los argumentos.

/* el siguiente ejemplo, se muestra una lista de valores y cada vez que seleccione uno o mas valores los mostrar en una ventana de dialogo **/ import java.awt.*; import javax.swing.*; import javax.swing.event.*; import java.util.*; import java.awt.event.*; public class demoList2 extends JFrame { JList lista; JScrollPane barraDesplazamiento; public demoList2() { // Crea los tems de una lista String[] items = {"A", "B", "C", "D","E","F"}; lista = new JList(items); 107

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ // Registra la selection de un listener lista.addListSelectionListener(new MyListaDeSelection()); barraDesplazamiento = new JScrollPane(lista); getContentPane().add(barraDesplazamiento,BorderLayout.CENTER); pack(); setTitle("Manual java- UNP"); setVisible(true); } public static void main(String[] s) { new demoList2();//.verElementos(); } // implementa el oyentepara controlar el evento de seleccin class MyListaDeSelection implements ListSelectionListener { public void valueChanged(ListSelectionEvent evento) { if (!evento.getValueIsAdjusting()) { JList list = (JList)evento.getSource(); // Obtiene todos los items seleccionados Object[] selected = list.getSelectedValues(); // Iterate all selected items for (int i=0; i<selected.length; i++) { Object sel = selected[i]; JOptionPane.showMessageDialog(null,sel.toString()); } } } } }

108

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________


/* Este programa define una cadena s a la cual se le aplica diferentes colorespor cada palabra */ import javax.swing.*; import javax.swing.text.*; import java.awt.Color; public class JTextPaneEjemplo { public JTextPaneEjemplo(){ try { String s = "Programacin Java, GIU "; StyleContext sc = new StyleContext(); JFrame f = new JFrame("JTextPane - Manual Java - UNP "); DefaultStyledDocument doc = new DefaultStyledDocument(sc); JTextPane panel = new JTextPane(doc); doc.insertString(0, s, null); // Define el estilo Style rojo = sc.addStyle("ConstantWidth", null); StyleConstants.setForeground(rojo, Color.red); Style verde = sc.addStyle("ConstantWidth", null); StyleConstants.setForeground(verde, Color.green); Style azul = sc.addStyle("ConstantWidth", null); StyleConstants.setForeground(azul, Color.blue); // Aplica el estilo doc.setCharacterAttributes(0, 12, rojo, false); doc.setCharacterAttributes(13, 4, verde, false); doc.setCharacterAttributes(19, 3, azul, false); f.getContentPane().add(new JScrollPane(panel)); f.setSize(400, 300); f.setVisible(true); } catch (Exception e) { System.out.println(e.getMessage()); } } public static void main(String[] args){ JTextPaneEjemplo valod = new JTextPaneEjemplo(); }; }

109

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ /* El siguiente programa permite escribir texto en un objeto multilnea, pudiendo modificar el estilo (color y tamao) de la fuente de acuerdo a la opcin seleccionada en el men. */
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.text.*; public class demoTexto extends JPanel implements ActionListener { private Style estiloRojo,estiloVerde,estiloAzul; private JTextPane texto; private JScrollPane barras; public demoTexto() { setLayout( new BorderLayout() ); add( creaMenu(),BorderLayout.NORTH ); JTextPane texto = creaEditor(); barras=new JScrollPane(texto); add( barras,BorderLayout.CENTER ); } private JMenuBar creaMenu() { JMenuBar menu = new JMenuBar(); JMenu estilo = new JMenu( "Estilo" ); menu.add( estilo ); JMenuItem mi = new JMenuItem( "Rojo" ); //crea el item del men estilo.add( mi ); // agrega el item a la opcion de la barra de mens mi.addActionListener( this ); //registra el item con el oyente mi = new JMenuItem( "Verde" ); estilo.add( mi ); mi.addActionListener( this ); mi = new JMenuItem( "Azul" ); estilo.add( mi ); mi.addActionListener( this ); return( menu ); } public void actionPerformed( ActionEvent evento ) { Style estilo = null; String color = (String)evento.getActionCommand(); //regresa la etiqueta del item seleccionado if( color.equals( "Rojo" ) ) { estilo = estiloRojo; } else if( color.equals( "Azul" ) ) { estilo = estiloAzul; } else if( color.equals( "Verde" ) ) { estilo = estiloVerde;

110

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________


} texto.setCharacterAttributes( estilo,false ); //solo cambia el color del string seleccionado de acuerdo al estilo elegido. } private JTextPane creaEditor() { StyleContext sc = creaEstilos(); DefaultStyledDocument doc = new DefaultStyledDocument( sc ); return( texto = new JTextPane( doc ) ); } private StyleContext creaEstilos() { StyleContext sc = new StyleContext(); estiloRojo = sc.addStyle( null,null ); StyleConstants.setForeground( estiloRojo,Color.red ); estiloVerde = sc.addStyle( null,null ); StyleConstants.setForeground( estiloVerde,Color.green ); StyleConstants.setFontSize( estiloVerde,24 ); estiloAzul = sc.addStyle( null,null ); StyleConstants.setForeground( estiloAzul,Color.blue ); return( sc ); } public static void main( String argv[] ) { JFrame ventana = new JFrame( "Manual Java - UNP" ); ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ventana.getContentPane().add( new demoTexto(),BorderLayout.CENTER ); ventana.setSize( 300,180 ); ventana.setVisible( true ); } }

111

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ /* Programa que muestra el avance de una barra de progreso */ import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.border.*; public class dfemoBarraProgreso extends JPanel { JProgressBar barraProg = new JProgressBar(); JSlider barraSlid = new JSlider( JSlider.HORIZONTAL,0,100,60 ); public dfemoBarraProgreso() { setLayout( new GridLayout(2,1) ); add( barraProg ); barraSlid.setValue( 0 ); barraSlid.setPaintTicks( true ); barraSlid.setMajorTickSpacing( 20 ); barraSlid.setMinorTickSpacing( 5 ); barraSlid.setBorder( new TitledBorder("Desplazame") ); barraSlid.addChangeListener( new ChangeListener() { public void stateChanged( ChangeEvent evt ) { barraProg.setValue(barraSlid.getValue() ); } } ); add( barraSlid ); } public static void main( String args[] ) { JFrame frame = new JFrame( "Manual Java - UNP" ); frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); frame.getContentPane().add( new dfemoBarraProgreso(),BorderLayout.CENTER ); frame.setSize( 300,150 ); frame.setVisible( true ); } }

112

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ /* Programa que demuestra el manejo de teclas */
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; public class demoTeclado extends JFrame implements ActionListener { protected JButton botones[] = new JButton[9]; public demoTeclado() { super( "Manual Java - UNP" ); Container pane = getContentPane(); pane.setLayout( new GridLayout( 3,3 ) ); Border borde = BorderFactory.createLineBorder( Color.black ); KeyStroke arriba = KeyStroke.getKeyStroke( KeyEvent.VK_UP,0 ); KeyStroke abajo = KeyStroke.getKeyStroke( KeyEvent.VK_DOWN,0 ); KeyStroke izqda = KeyStroke.getKeyStroke( KeyEvent.VK_LEFT,0 ); KeyStroke drcha = KeyStroke.getKeyStroke( KeyEvent.VK_RIGHT,0 ); JRootPane rootPane = getRootPane(); rootPane.registerKeyboardAction( this,"arriba",arriba, JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT ); rootPane.registerKeyboardAction( this,"abajo",abajo, JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT ); rootPane.registerKeyboardAction( this,"drcha",drcha, JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT ); rootPane.registerKeyboardAction( this,"izqda",izqda, JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT ); for( int i=0; i < 9; i++ ) { JButton boton; boton = new JButton(); boton.setBorder( borde ); boton.setName( new Integer(i).toString() ); pane.add( boton ); botones[i] = boton; } setSize( 300,200 ); setVisible(true); } public void actionPerformed( ActionEvent evt ) { Component foco = getFocusOwner(); String nombre = foco.getName(); int indice = Integer.parseInt( nombre ); botones[indice].setText( "" ); String accion = evt.getActionCommand(); if( accion.equals( "arriba" ) ) { indice = (indice < 3) ? indice + 6 : indice - 3; } else if( accion.equals( "abajo" ) ) { indice = (indice > 5) ? indice - 6 : indice + 3; } else if( accion.equals( "izqda" ) ) { indice = (indice == 0) ? indice = 8 : indice - 1;

113

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________


} else { // asume drcha indice = (indice == 8) ? indice = 0 : indice + 1; } botones[indice].setText( "X" ); botones[indice].requestFocus(); } static public void main( String argv[] ) { new demoTeclado(); } }

/* programa que a travs de radio botones aplica caractersticas a un texto */


import java.awt.*; import java.awt.event.*; import javax.swing.*; public class RadioButtonTest extends JFrame { private JTextField t; private Font plainFont,boldFont, italicFont,boldItalicFont; private JRadioButton plain,bold, italic,boldItalic; private ButtonGroup radioGroup; private RadioButtonTest() { super("RadioButton Test"); // super establece el titulo de la ventana Container c= getContentPane(); c.setLayout( new FlowLayout()); t= new JTextField("Watch the font style change",25); c.add(t); //aade al conteiner el textfield plain = new JRadioButton("Plain",true); c.add(plain); //aade al conteiner el radiobutton plain bold = new JRadioButton("bold",true); c.add(bold); //aade al conteiner el radiobutton bold italic = new JRadioButton("italic",true); c.add(italic); //aade al conteiner el radiobutton italic

114

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________


boldItalic = new JRadioButton("BoldItalic",true); c.add(boldItalic); //aade al conteiner el radiobutton bolditalic //oyente de eventos RadioButtonHandler RadioButtonHandler handler = new RadioButtonHandler(); //asociamos oyente de evento con boton plain.addItemListener(handler); bold.addItemListener(handler); italic.addItemListener(handler); boldItalic.addItemListener(handler); // crea contenedor de botones radio grupo radioGroup = new ButtonGroup(); //agregamois los botones al grupo radioGroup.add(plain); radioGroup.add(bold); radioGroup.add(italic); radioGroup.add(boldItalic); // crear las fuentes plainFont = new Font("TimesRoman", Font.PLAIN,14); boldFont = new Font("TimesRoman", Font.BOLD,14); italicFont = new Font("TimesRoman", Font.ITALIC,14); boldItalicFont = new Font("TimesRoman", Font.BOLD+Font.ITALIC,14); setSize(300,100); setVisible(true); } private class RadioButtonHandler implements ItemListener { public void itemStateChanged(ItemEvent e){ if (e.getSource()== plain) t.setFont(plainFont); else if (e.getSource()== bold) t.setFont(boldFont); else if (e.getSource()== italic) t.setFont(italicFont); else if (e.getSource()== boldItalic) t.setFont(boldFont); } } public static void main (String args[]) { new RadioButtonTest(); } }

115

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ /* programa que divide una ventana en tres marcos a travs de JSplitPane
import java.awt.*; import javax.swing.*; import java.awt.event.*; public class demoSplit{ public static void main(String[] s) { JButton b1 = new JButton("Botn 1"); JButton b2 = new JButton("Botn 2"); JButton b3 = new JButton("Botn 3"); Box cajaBotones= Box.createVerticalBox(); cajaBotones.add(b1); cajaBotones.add(b2); cajaBotones.add(b3); cajaBotones.add(Box.createVerticalGlue()); JLabel e1 = new JLabel("Etiqueta 1"); JLabel e2 = new JLabel("Etiqueta 2"); Box cajaEtiquetas= Box.createVerticalBox(); cajaEtiquetas.add(e1); cajaEtiquetas.add(e2); cajaEtiquetas.add(Box.createVerticalGlue()); JSplitPane panelSecundario1= new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new JPanel() ,cajaEtiquetas); panelSecundario1.setDividerSize(1); panelSecundario1.setResizeWeight(1); JSplitPane panelSecundario2= new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, cajaBotones,panelSecundario1); panelSecundario2.setDividerSize(1); JSplitPane panelPrincipal= new JSplitPane(JSplitPane.VERTICAL_SPLIT,panelSecundario2, new JPanel()); panelPrincipal.setDividerSize(1); panelPrincipal.setResizeWeight(1); JFrame frame= new JFrame("Manual Java UNP"); frame.setDefaultCloseOperation(JFrame.E XIT_ON_CLOSE); frame.setContentPane(panelPrincipal); frame.setSize(500,400); frame.setVisible(true); } }

*/

116

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ /* Programa que crea una tabla bsica */ import java.awt.*; import javax.swing.*; import javax.swing.event.*; class basicaTabla extends JFrame { public basicaTabla() { Container c=getContentPane(); final String[] namecol={"Sesion","Practica","Aula"}; //Datos Object[][] datos={ {"1","Introduccion y Eclipse","9"}, {"2","Clases y Objetos","9"}, {"3","Paquetes","9"}, {"4","Herencia","9"}, {"5","Concurrencia","9"}, {"6","Entrada y Salida","9"}, {"7","GUI","9"}, {"8","Applets","9"}, {"9","RED 1","9"}, {"10","RED 2","9"}}; JTable tabla=new JTable(datos,namecol); tabla.setFont(new Font("Arial",Font.BOLD,18)); tabla.setRowHeight(24); JScrollPane contiene=new JScrollPane(tabla); c.setLayout(new BorderLayout()); c.add(BorderLayout.CENTER,contiene); setTitle("Temas en Java"); setSize(500,300); setVisible(true); } public static void main(String[] s) {new basicaTabla(); } }

117

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

BIBLIOGRAFA 1. 2. 3. 4.
Cuenca Jimnez Pedro Manuel, "Programacin en Java". Ediciones Anaya Multimedia. 1997. Framin Torres Jos Manuel. "Manual Imprescindible de Java". Ediciones Anaya Multimedia. 1997 Froufe Agustn: Java 2, Manual de Usuario y Tutorial Garci de Jaln Javier, Jos Ignacio Rodrguez, Iigo Mingo, Aitor Imaz, Alfonso Brazlez, Alberto Larzabal, Jess Calleja y Jon Garca. "Aprenda Java como si estuviera en primero". Universidad de Navarra

5. 6. 7. 8. 9. 10. 11. 12. 13.

Gosling J., K.Arnold: Java Didctica y Programacin, Addison-Wesley Primera edicin, Marzo de 1997 "JDK 1.2 Documentation". www.sun.com. 1997. (Documentacin de la API de Java del JDK). Jaworski J, Java2 Todo&Ms, SAMS Publishing - APOGEO Naughton Patrick, Herbert Schildt: Java2, The Complete Reference. Morgan, Mike: "Descubre Java 1.2". Prentice Hall. 1999. Rambaugh J., M. Blaha, W. Premerlani, F. Eddy y W. Lorensen. "Modelado y Diseo Orientados a Objetos. Metodologa OMT". Sanz Alamillo Javier. "Novedades y cambios con Java 2". Suleiman 'Sam' Lalani. "Java, biblioteca del programador". Ediciones McGraw Hill. 1997. Vasquez Julio, Balta Victor: Guia de programacin Java 2

BIBLIOGRAFA ELECTRONICA 14. 15.


Colecciones de Objetos en Java http://www.itapizaco.edu.mx/paginas/JavaTut/froufe/fuentes/java411.java Estudio de la plataforma .NET. Diciembre 2001. http://www.ditec.um.es/cgi-bin/dl/ProyectoNET.pdf

118

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

16.

Fundamentos de swing http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Container.html

17. 18. 19. 20.

Java 2 SDK, Standard Edition Documentation. http://java.sun.com/j2se Java Tutorial: A practical guide for programmers. URL:http://java.sun.com/docs/books/tutorial/essential/io/index.html.
Java Swing http://jungla.dit.upm.es/~santiago/docencia/apuntes/Swing/

La Mquina Virtual JAVA. Enero 2000. http://www.sc.ehu.es/sbweb/fisica/cursoJava/fundamentos/introduccion/virtu al.htm

21. 22. 23. 24.

Mquina Virtual de JAVA. Noviembre 1998. http://www.dcc.uchile.cl/~lbastias/java/JVM.html Package java.io http://www.sun.com/j2se/1.4.2/docs/api/java/io/package-sumary.htm Programacin Java-Ejemplos http://todojava.awardspace.com/ejemplos-java.html
Sun The Swing Tutorial http://java.sun.com/docs/books/tutorial/uiswing

25.

Sun, Traductor: Juan Antonio Palos Swing y JFC http://programacion.com/java/tutorial/swing/

26. 27.
28.

Universidad de Navarra Aprenda Java como si estuviera en primero San Sebastin, Marzo 1999. Universidad de Las Palmas de Gran Canaria Tutorial de Java AWT http://www.ulpgc.es/otros/tutoriales/java/Cap4/awt.html

Tutorial de Java http://www.wikilearning.com/tutorial/tutorial_de_java/3938

119

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

ANEXOS
/* Programa que demuestra el uso del teclado a travs de los respectivos eventos */
import javax.swing.*; import java.awt.event.*; import java.awt.BorderLayout; import java.awt.Dimension; public class KeyEventDemo extends JFrame implements KeyListener, ActionListener { JTextArea displayArea; JTextField typingArea; static final String newline = "\n"; public KeyEventDemo() { JButton button = new JButton("Clear"); button.addActionListener(this); typingArea = new JTextField(20); typingArea.addKeyListener(this); displayArea = new JTextArea(); displayArea.setEditable(false); JScrollPane scrollPane = new JScrollPane(displayArea); scrollPane.setPreferredSize(new Dimension(375, 125)); JPanel contentPane = new JPanel(); contentPane.setLayout(new BorderLayout()); contentPane.add(typingArea, BorderLayout.NORTH); contentPane.add(scrollPane, BorderLayout.CENTER); contentPane.add(button, BorderLayout.SOUTH); getContentPane().add(contentPane); pack(); setVisible(true); } public void keyTyped(KeyEvent e) { displayInfo(e, "KEY TYPED: "); } public void keyPressed(KeyEvent e) { displayInfo(e, "KEY PRESSED: "); } public void keyReleased(KeyEvent e) { displayInfo(e, "KEY RELEASED: "); } public void actionPerformed(ActionEvent e) { displayArea.setText(""); typingArea.setText("");

120

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________


typingArea.requestFocus(); }

protected void displayInfo(KeyEvent e, String s){ String charString, keyCodeString, modString, tmpString; char c = e.getKeyChar(); int keyCode = e.getKeyCode(); int modifiers = e.getModifiers(); if (Character.isISOControl(c)) { charString = "key character = " + "(an unprintable control character)"; } else { charString = "key character = '" + c + "'"; } keyCodeString = "key code = " + keyCode + " (" + KeyEvent.getKeyText(keyCode) + ")"; modString = "modifiers = " + modifiers; tmpString = KeyEvent.getKeyModifiersText(modifiers); if (tmpString.length() > 0) { modString += " (" + tmpString + ")"; } else { modString += " (no modifiers)"; } displayArea.append(s + newline + " " + charString + newline + " " + keyCodeString + newline + " " + modString + newline); } public static void main(String[] s) { new KeyEventDemo(); } }

121

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ /* Programa que crea objetos y los agrega a un vector, despus sem realizan operaciones de eliminar, obtener los elementos en las diferentes ubicaciones */
import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.util.*;

// para el vector

public class Ejemplo16 extends JFrame implements ActionListener{ // declarar objetos de la GUI JLabel lblNombre, lblPosicion; JTextField txtNombre; JButton btnAlFinal, btnAlInicio, btnSacarUno; JButton btnSacarTodos, btnPrimero, btnUltimo; JButton btnEmpiezaCon, btnCapacidad; JPanel panel1=new JPanel(); JPanel panel2=new JPanel(); JPanel panel3=new JPanel(); JPanel panel4=new JPanel(); JTextArea txtS; Vector amigos; public Ejemplo16() { getContentPane().setLayout(new BorderLayout()); // coloca color de fondo personalizado getContentPane().setBackground(new Color(10,200,200)); // crear y ubicar los objetos de la GUI panel1.setLayout(new FlowLayout()); lblNombre = new JLabel("Escriba un Nombre"); txtS = new JTextArea(10,20); txtNombre = new JTextField(20); panel1.add(lblNombre); panel1.add(txtNombre); panel1.add(txtS); getContentPane().add(panel1,BorderLayout.NORTH); btnAlFinal = new JButton("Agregar al Final"); btnAlFinal.addActionListener(this); btnAlInicio = new JButton("Agregar al Inicio"); btnAlInicio.addActionListener(this); panel2.setLayout(new FlowLayout()); panel2.add(btnAlFinal); panel2.add(btnAlInicio); getContentPane().add(panel2,BorderLayout.SOUTH); btnSacarUno = new JButton("Remover"); btnSacarUno.addActionListener(this);

122

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________


btnSacarTodos = new JButton("Remover todo"); btnSacarTodos.addActionListener(this); btnPrimero = new JButton("Obtiene el Primero"); btnPrimero.addActionListener(this); btnUltimo = new JButton("Obtiene el Ultimo"); btnUltimo.addActionListener(this); btnEmpiezaCon = new JButton("Obtiene el que empieza con"); btnEmpiezaCon.addActionListener(this); btnCapacidad = new JButton("Capacidad y Tamao"); btnCapacidad.addActionListener(this); panel3.setLayout(new GridLayout(3,3)); panel3.add(btnSacarUno); panel3.add(btnSacarTodos); panel3.add(btnPrimero); panel3.add(btnUltimo); panel3.add(btnEmpiezaCon); panel3.add(btnCapacidad); getContentPane().add(panel3,BorderLayout.CENTER); panel4.setLayout(new FlowLayout()); lblPosicion = new JLabel(); lblPosicion.setFont(new Font("Arial",Font.BOLD,12)); panel4.add(lblPosicion); getContentPane().add(panel4,BorderLayout.EAST); amigos = new Vector(); setTitle("VECTORES EN JAVA"); setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(500,500); setVisible(true); } public void actionPerformed(ActionEvent e) { // programacion de cada boton if (e.getSource().equals(btnAlFinal)) alFinal(); if (e.getSource().equals(btnAlInicio)) alInicio(); if (e.getSource().equals(btnSacarUno)) sacarUno(); if (e.getSource().equals(btnSacarTodos)) sacarTodos(); if (e.getSource().equals(btnPrimero)) elPrimero(); if (e.getSource().equals(btnUltimo)) elUltimo(); if (e.getSource().equals(btnEmpiezaCon)) empiezaCon(); if (e.getSource().equals(btnCapacidad)) capacidad(); } //---------------

123

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________


void alFinal() { // leer nombre String nombre = txtNombre.getText(); if (nombre.length()==0) lblPosicion.setText("Ingrese un Nombre"); else { lblPosicion.setText(""); // agregar al final amigos.addElement(nombre); // muestra contenido del vector muestraVector(); } txtNombre.setText(""); txtNombre.requestFocus(); } //--------------void alInicio() { // leer nombre String nombre = txtNombre.getText(); if (nombre.length()==0) lblPosicion.setText("Ingrese un Nombre"); else { lblPosicion.setText(""); // agregar al final amigos.add(0,nombre); // muestra contenido del vector muestraVector(); } txtNombre.setText(""); txtNombre.requestFocus(); } void sacarUno() { // leer nombre String nombre = txtNombre.getText(); if (nombre.length()==0) lblPosicion.setText("Ingrese un Nombre"); else { lblPosicion.setText(""); // si lo contiene if (amigos.contains(nombre)) { // saca el nombre del vector amigos.remove(nombre); // muestra contenido del vector muestraVector(); } else lblPosicion.setText("Nombre no encontrado"); } } void sacarTodos() { if (amigos.isEmpty()) lblPosicion.setText("El vector no tiene elementos");

124

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________


else { lblPosicion.setText(""); amigos.clear(); muestraVector();

} } //-------------void elPrimero() { // obtiene el primero del vector como String String nombre = amigos.firstElement().toString(); // muestra nombre obtenido txtNombre.setText(nombre); txtNombre.selectAll(); } //-------------void elUltimo() { // obtiene el ultimo del vector como String String nombre = amigos.lastElement().toString(); // muestra nombre obtenido txtNombre.setText(nombre); txtNombre.selectAll(); } //-------------void empiezaCon() { // leer iniciales String nombre = txtNombre.getText(); if (nombre.length()==0) lblPosicion.setText("Ingrese un Nombre"); else { int indexEncontrado=-1; String elemento=""; for (int i=0; i < amigos.size(); i++) { // obtiene elemento del arreglo como String elemento=amigos.elementAt(i).toString(); // si empieza con el nombre ingresado if (elemento.startsWith(nombre)) { indexEncontrado=i;//guarda indice break;// sale del for } } // si lo encontro if (indexEncontrado != -1) { lblPosicion.setText("Posicion: "+indexEncontrado); txtNombre.setText(elemento); txtNombre.selectAll(); } else // no lo encontro lblPosicion.setText("Ninguno empieza con "+nombre); }

125

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________


txtNombre.setText(""); txtNombre.requestFocus(); } //---------------void capacidad() { // obtiene capacidad int capa= amigos.capacity(); // obtiene el tamao int tama= amigos.size(); // muestra capacidad y tamao lblPosicion.setText("Tamao: "+tama+", Capacidad: "+capa); } //---------------void muestraVector() { // limpia area txtS.setText("contenido del vector:\n"); // obtiene tamao int n=amigos.size(); // muestra cada elemento for (int i=0; i < n; i++) txtS.append(amigos.elementAt(i)+"\n"); // muestra tamao del vector lblPosicion.setText("Nmero de elementos: "+ n); } public static void main(String[] s) { new Ejemplo16(); } }

126

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ /* Programa que aumenta o disminuye el tamao de la imagen */ import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; import java.util.*; public class Test extends JFrame { private DefaultBoundedRangeModel modelo = new DefaultBoundedRangeModel(100,0,0,100); private JSlider deslizador = new JSlider(modelo); private JLabel salida = new JLabel("100%"); private ImageIcon imagen = new ImageIcon("splash.jpg"); private vistaImagen VistaImagen = new vistaImagen(imagen, modelo); public Test() { super("Manual Java - UNP"); Container container = getContentPane(); JPanel panel = new JPanel(); panel.add(new JLabel("Tamao de la imagen : ")); panel.add(deslizador); panel.add(salida); container.add(panel, BorderLayout.NORTH); container.add(VistaImagen, BorderLayout.CENTER); modelo.addChangeListener(new salidaSynchronizer()); } public static void main(String args[]) { Test zoom = new Test(); zoom.setBounds(0,0,400,350); zoom.show(); } class salidaSynchronizer implements ChangeListener { public void stateChanged(ChangeEvent e) { String s = Integer.toString(modelo.getValue()); salida.setText(s + "%"); salida.revalidate(); } }} class vistaImagen extends JScrollPane { private JPanel panel = new JPanel(); private Dimension tamanioOriginal = new Dimension(); private Image imagenOriginal; private ImageIcon icono; public vistaImagen(ImageIcon icono, BoundedRangeModel modelo) { panel.setLayout(new BorderLayout());

127

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ panel.add(new JLabel(icono)); this.icono = icono; this.imagenOriginal = icono.getImage(); setViewportView(panel); modelo.addChangeListener(new ModelListener()); tamanioOriginal.width = icono.getIconWidth(); tamanioOriginal.height = icono.getIconHeight(); } class ModelListener implements ChangeListener { public void stateChanged(ChangeEvent e) { BoundedRangeModel modelo = (BoundedRangeModel)e.getSource(); if(modelo.getValueIsAdjusting()) { int min = modelo.getMinimum(), max = modelo.getMaximum(), span = max - min, value = modelo.getValue(); double multiplicador = (double)value / (double)span; multiplicador = multiplicador == 0.0 ? 0.01 : multiplicador; Image escalado = imagenOriginal.getScaledInstance( (int)(tamanioOriginal.width * multiplicador), (int)(tamanioOriginal.height * multiplicador), Image.SCALE_FAST); icono.setImage(escalado); panel.revalidate(); panel.repaint(); } } }}

128

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.table.*; class demoTabla extends JPanel { //TablaProcesos
private JTable tabla; private JScrollPane panelScroll; private String titColumna[]; private String datoColumna[][];

public demoTabla() {
setLayout( new BorderLayout() ); CreaColumnas(); CargaDatos(); tabla = new JTable( datoColumna,titColumna ); panelScroll = new JScrollPane( tabla ); add( panelScroll, BorderLayout.CENTER ); }

public void CreaColumnas() {


titColumna = new String[5]; titColumna[0] = "Proceso"; titColumna[1] = "Estado"; titColumna[2] = "Tamao"; titColumna[3] = "Particin Asignada"; titColumna[4] = "Proceso N";

} // Creamos los datos para cada uno de los elementos de la tabla public void CargaDatos() {
datoColumna = new String[100][5]; for ( int iY=0; iY < 100; iY++ ) { for ( int iX=0; iX < 5; iX++ ) { datoColumna[iY][iX] = "" + iX + "," + iY; } } }

public static void main( String args[] ) {


JFrame ventana = new JFrame( "Manual Java UNP" ); ventana.getContentPane().add( new demoTabla(),BorderLayout.CENTER ); ventana.setSize( 300,180 ); ventana.setVisible( true );

} }

129

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________

/* Programa que crea dos solapas y en una de las solapas comprueba los diferentes aspectos (Look) de una aplicacin swing */
import java.awt.*; import javax.swing.*; import java.awt.event.*; public class demoPestana extends JFrame{ JTabbedPane tabPane; public demoPestana() tabPane = new JTabbedPane(); tabPane.addTab("Panel con Radio Botones", new multiPlataforma(this)); tabPane.addTab("Contenido de Archivo", new demoTablaObjeto()); tabPane.setToolTipTextAt(0,"Cambia de Aspecto la Interfaz"); tabPane.setToolTipTextAt(1,"Muestra el contenido de una Tabla"); tabPane.setIconAt(0,new ImageIcon("estrei.gif")); tabPane.setIconAt(1,new ImageIcon("bolita.gif")); getContentPane().add(tabPane, BorderLayout.CENTER); setTitle("Manual Java UNP"); setSize(600,600); setVisible(true); } public static void main(String[] s) new demoPestana();

{ } }

class multiPlataforma extends JPanel{ static String metal= "Metal"; static String metalClaseNombre = "javax.swing.plaf.metal.MetalLookAndFeel"; static String motif = "Motif";

130

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________


static String motifClaseNombre = "com.sun.java.swing.plaf.motif.MotifLookAndFeel"; static String windows = "Windows"; static String windowsClaseNombre = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel"; JRadioButton metalButton, motifButton, windowsButton; public multiPlataforma(JFrame f) { JButton prueba=new JButton("PROBANDO LOOK"); prueba.setMnemonic('p'); metalButton = new JRadioButton(metal); metalButton.setMnemonic('e'); metalButton.setActionCommand(metalClaseNombre); motifButton = new JRadioButton(motif); motifButton.setMnemonic('m'); motifButton.setActionCommand(motifClaseNombre); windowsButton = new JRadioButton(windows); windowsButton.setMnemonic('w'); windowsButton.setActionCommand(windowsClaseNombre); //Agrupa radio buttons ButtonGroup grupo = new ButtonGroup(); grupo.add(metalButton); grupo.add(motifButton); grupo.add(windowsButton); //Registra los radios con oyente ActionListener RadioListener myListener = new RadioListener(f); metalButton.addActionListener(myListener); motifButton.addActionListener(myListener); windowsButton.addActionListener(myListener); add(prueba); add(metalButton); add(motifButton); add(windowsButton); } //Clase que procesa eventos por ActionListener class RadioListener implements ActionListener { JFrame marco; RadioListener(JFrame f){marco=f; } public void actionPerformed(ActionEvent e) { String nombre = e.getActionCommand(); try { //UIManager determina el look&feel de cada objeto UIManager.setLookAndFeel(nombre); SwingUtilities.updateComponentTreeUI(marco); }catch (Exception exc) { System.err.println("Could not load LookAndFeel: " + nombre);

131

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________


} } } }//fin de clase multiPlataforma

class demoTablaObjeto extends JPanel { private JTable tabla; private JScrollPane panelScroll; private String titColumna[]; public String datoColumna[][]; leeObjeto lector; JButton btnAbrir; public demoTablaObjeto() {

//TablaProcesos

btnAbrir=new JButton("ABRIR"); btnAbrir.addActionListener(new MyListenerAbrir()); setLayout( new BorderLayout() ); CreaColumnasFilas(); tabla = new JTable( datoColumna,titColumna ); panelScroll = new JScrollPane( tabla ); add( panelScroll, BorderLayout.CENTER ); add(btnAbrir,BorderLayout.SOUTH); } public void CreaColumnasFilas() { titColumna = new String[2]; titColumna[0] = "Codigo"; titColumna[1] = "Marca"; datoColumna = new String[30][2]; } // Creamos los datos para cada uno de los elementos de la tabla public void CargaDatos() { String name=JOptionPane.showInputDialog(this,"Nombre del Archivo?"); try{ leeObjeto x=new leeObjeto(name); try{ x.obtieneDeArchivo(datoColumna); }catch(ClassNotFoundException c){ } }catch(IOException b){ } }

132

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________


}

class MyListenerAbrir implements ActionListener{ public void actionPerformed(ActionEvent e) { CargaDatos(); } } class leeObjeto { celular aux; FileInputStream entrada; ObjectInputStream entObjeto; String narchi; public leeObjeto(String narchi)throws IOException { entrada =new FileInputStream(narchi); entObjeto=new ObjectInputStream(entrada); } public void obtieneDeArchivo(String[][] dc)throws IOException,ClassNotFoundException { int f=0; try { while(true){ aux=(celular)entObjeto.readObject(); dc[f][0]= aux.getCodigo(); dc[f][1]= aux.getMarca(); f++; } }catch(EOFException e){ System.out.println("Termino la lectura de Objetos"); entObjeto.close(); } } } }

import java.io.*; class celular implements Serializable{ private String codigo; private String marca; public celular(String c,String m) { codigo=c; marca=m; } String getCodigo(){return codigo;} String getMarca(){return marca;}

133

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________ void setCodigo(String c){codigo=c;} void setMarca(String m){marca=m;} }

/* Programa que selecciona un color de tres formas y lo aplica al fonde de la ventana */


//colores con JColorChooser. import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MostrarColores2 extends JFrame { private JButton cambiarColorBoton; private Color color = Color.LIGHT_GRAY; private Container contenedor; // configurar GUI public MostrarColores2() { super( "Manual Java UNP" ); contenedor = getContentPane(); contenedor.setLayout( new FlowLayout() ); // configurar cambiarColorBoton y registrar su manejador de eventos cambiarColorBoton = new JButton( "Cambiar color" ); cambiarColorBoton.addActionListener( new ActionListener() { // clase interna annima // mostrar JColorChooser cuando el usuario haga clic en el botn public void actionPerformed( ActionEvent evento ) { color = JColorChooser.showDialog( MostrarColores2.this, "Seleccione un color", color );

134

Universidad Nacional de Piura Manual de Programacin en Java ______________________________________________________________________


// establecer color predeterminado, si no se devuelve un color if ( color == null ) color = Color.LIGHT_GRAY; // cambiar color de fondo del panel de contenido contenedor.setBackground( color ); } } // fin de la clase interna annima ); // fin de la llamada a addActionListener contenedor.add( cambiarColorBoton ); setSize( 400, 130 ); setVisible( true ); } public static void main( String args[] ) { MostrarColores2 aplicacion = new MostrarColores2(); aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); } }

135

Vous aimerez peut-être aussi