Awt & Swing
Awt & Swing
Awt & Swing
AWT & Swing. Dos vas para la construccin de Interfaces Grficas de Usuario en Java
Informacin de los autores: Luis Bazo Garca Departamento de Informtica y Automtica Facultad de Ciencias - Universidad de Salamanca Plaza de la Merced S/N 37008 - Salamanca luisbazo2000@yahoo.es Ral Garca Neila Departamento de Informtica y Automtica Facultad de Ciencias - Universidad de Salamanca Plaza de la Merced S/N 37008 - Salamanca wickermorgan@hotmail.com
Este documento puede ser libremente distribuido. 2003 Departamento de Informtica y Automtica - Universidad de Salamanca.
Resumen
Una breve introduccin hacia el conocimiento de AWT y Swing dos bibliotecas de clases orientadas a la elaboracin de Interfaces Graficas de Usuario en Java. En este informe, se comenta brevemente el funcionamiento de los modelos de componentes y eventos que incorporan las citadas bibliotecas. Adems de resear las principales novedades de Swing respecto a AWT.
Abstract
Brief introduction towards the knowledge of AWT and Swing two libraries of classes oriented to the elaboration of GUI in Java. In this report, one briefly comments the operation of the models of components and events that incorporate the mentioned libraries. It is commented too the main new features of Swing with respect to AWT.
AWT/SWING
Tabla de Contenido
1. 2.
Cmo se gestiona un evento _________________________ 2 Componentes y jerarqua ___________________________ 2 Eventos y jerarqua ________________________________ 2 Relacin componentes y eventos _____________________ 3
2.4. Pasos para crear una interfaz grfica con AWT _________________ 4 2.5. Interfaces Listener _________________________________________ 6 2.6. Clases Adapter ____________________________________________ 7 2.7. Clases Annimas ___________________________________________ 7 2.8. Clases Componentes y Eventos _______________________________ 8 2.9. Layout Managers __________________________________________ 11 2.10. Grficos y animaciones _________________________________ 12 2.10.1 2.10.2. 3. Clase Graphics ____________________________________ 12 Animaciones con AWT _____________________________ 13
Swing ______________________________________________ 13
3.1. Un poco de historia _________________________________________ 13 3.2. Eventos Swing _____________________________________________ 13 3.3. Modelos de componentes Swing _______________________________ 14 3.4. Un primer programa con Swing _______________________________ 15 3.5. Descripcin de algunos componentes Swing _____________________ 15 3.6. Nuevos Layouts ____________________________________________ 16 3.7. Look & Feel _______________________________________________ 17 3.8. Otras nuevas caractersticas __________________________________ 18 3.8.1. 3.8.2. 3.8.3. Action ____________________________________________ 18 Modelos de datos y estados separados __________________ 18 Soporte para tecnologas asistivas _____________________ 18
4. 5.
ii
AWT-SWING
1. Introduccin
Al programar en Java no se parte de cero. Cualquier aplicacin que se desarrolle se apoya en un gran nmero de clases existentes. Algunas de ellas las ha podido hacer el propio usuario, otras pueden ser comerciales, pero siempre hay un nmero muy importante de clases que forman parte del propio lenguaje (el API o Application Programming Interface de Java). Java incorpora muchos aspectos que en cualquier otro lenguaje son extensiones propiedad de empresas de software o fabricantes de ordenadores (threads, ejecucin remota, componentes, seguridad, acceso a bases de datos, etc.). El concepto de API muestra la importancia de una buena construccin en las bibliotecas de clases, poniendo de manifiesto que un desarrollo orientado a la reutilizacin de las clases puede dar lugar a herramientas cada vez ms potentes que facilitan el diseo de conceptos y paradigmas, que partiendo de cero seran prcticamente imposibles. Uno de los aspectos que ha cobrado mayor relevancia en la informtica actual en los ltimos aos es el desarrollo de aplicaciones con interfaces ms amigables, asimilables e intuitivas para el usuario. Por lo tanto, el desarrollo de unas bibliotecas para la creacin de GUIs (Guide User Interfaces) potentes y fciles de utilizar ha supuesto un gran avance en el campo del desarrollo de aplicaciones. El gran apogeo de Java y la gran cantidad de facilidades que da su extensa documentacin, unido a la especial relevancia de la construccin de interfaces grficas en la actualidad, hacen de AWT y Swing dos claros ejemplos de la importancia de conceptos como la reutilizacin de software y de las facilidades que ofrece el desarrollo orientado a objetos.
2. AWT
El Abstract Windows Toolkit es una coleccin de clases orientadas a la construccin de interfaces grficas de usuario (GUI) en Java.
2.2.1
Cuando hacemos algo con algn componente se produce un determinado tipo de evento que el sistema operativo transmite al AWT. Este reacciona creando un objeto de una determinada clase de evento, derivada de AWTEvent.
-1-
2.2.2
El evento tendr que ser gestionado por algn mtodo y esto se consigue gracias a que el modelo de eventos de Java se basa en que los objetos sobre los que se producen los eventos (event sources) avisan a los objetos que gestionan los eventos (event listeners) para que acten en consecuencia. Los objetos gestores de eventos deben de disponer de los mtodos adecuados para saber responder. Java obliga a los event listeners a implementar los mtodos de las interfaces Listener que Java proporciona para cada tipo de evento. Esto es que Java dispone de una interfaz Listener para cada evento con unos determinados mtodos (cabeceras) que el usuario tendr que implementar en sus objetos event listeners dentro de su aplicacin interactiva.
Para aadir un componente a un contenedor se utiliza la el mtodo add () de la clase Container. containerName.add (componentName);
2.3.2
Eventos y jerarqua
Todos los eventos de AWT son objetos de clases que pertenecen a una jerarqua como la de la figura. Las clases de la jerarqua se encuentran se encuentran definidas en el package java.awt.event
AWT/SWING
Bazo y Garca
En AWT existen dos tipos de eventos, los eventos de alto nivel y los eventos de bajo nivel. Los eventos de alto nivel suelen implicar muchos de bajo nivel. Los de alto nivel son: ActionEvent, clicar sobre un botn o elegir un elemento del men. AdjustmentEvent, mover las barras de desplazamiento. ItemEvent, elegir valores. TextEvent, cambiar texto. Los de bajo nivel son: 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.
2.3.3
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. Component Button Checkbox Choice Eventos Generados ActionEvent ItemEvent ItemEvent Significado Clicar en el botn Seleccionar o deseleccionar un item Seleccionar o deseleccionar un item Seleccionar o deseleccionar un item
CheckboxMenuItem ItemEvent
AWT/SWING
Component
Mover, cambiar tamao, mostrar u ocultar un componente Obtener o perder el focus Pulsar o soltar una tecla Pulsar o soltar un botn del ratn; entrar o salir de un componente; mover o arrastrar el ratn Aadir o eliminar un componente de un container Hacer doble click sobre un item de la lista Seleccionar o deseleccionar un item de la lista Seleccionar un item de un men Cambiar el texto Terminar de editar un texto pulsando Intro Acciones sobre una ventana: abrir, cerrar, iconizar, restablecer e iniciar el cierre
Container List
Hay que considerar que porque un componente no se relacione con ningn evento esto no quiere decir que no los pueda recibir. Una clase que recibe un evento puede transmitrselo a sus sub-clases.
AWT/SWING
Bazo y Garca
7. 8. 9. }
System.exit(0);
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. 24. 25. 26. 27. } public static void main(String args[]) { Ventana mainFrame = new Ventana() ; }
Este ejemplo es el que se va a tomar para explicar los aspectos ms importantes de AWT modificndolo en el caso que sea necesario. 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.
AWT/SWING
AdjustementListener adjustementValueChanged()
AWT/SWING
Bazo y Garca
TextEvent WindowEvent
TextListener WindowListener
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. En el ejemplo de arriba tendramos que implementar todos los mtodos correspondientes a la interfaz WindowListener y no solo windowClosing() como est hecho en el ejemplo(el ejemplo esta hecho con clases Adapter).
AWT/SWING
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. System.out.println("Starting Ventana..."); 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.
AWT/SWING
Bazo y Garca
Clase Container: Una clase muy general. Nunca se crea un objeto de esta clase pero heredan sus mtodos las clases Frame y Panel. Clase ContainerEvent: Se genera cada vez que un Component se aade o se retira de un Container. Este evento solo tiene papel de aviso no es necesario gestionarlo. Clase Window: Los objetos de la clase Window son ventanas de mximo nivel sin bordes y sin barras de men. Son ms interesantes las clases que derivan de ella Frame y Dialog. Clase WindowEvent: Se produce cada vez que se abre, cierra, iconiza, restaura, activa o desactiva una ventana. Clase Frame: Es una ventana con un borde y que puede tener una barra de mens. Si una ventana depende de otra ventana es mejor utilizar una Window que un Frame. Clase Dialog: Es una ventana que depende de otra ventana ( una Frame) si una Frame se cierra se cierra tambin los Dialogs que depende de ella. Si se minimiza sus Dialogs desparecen; si se restablece sus Dialogs aparecen de nuevo. Por defecto los Dialogs son no modales es decir, no requieren atencin inmediata del usuario. Clase FileDialog: Muestra una ventana de dialogo en la cual se puede seleccionar un fichero. Las constantes enteras LOAD y SAVE definen el modo de apertura del fichero. Clase Panel: Un panel es un Container de propsito general se puede utilizar tal cual para contener otras componentes y para crear sub-clases de finalidad mas especificas. No tiene mtodos propios y suele utilizar los heredados de Component y Container. Un Panel puede contener otros Panel una gran ventaja respecto a los otros tipos de containers. Clase Button: Lo ms importante es que al clicar sobre l se genera un evento de la clase ActionEvent. El aspecto de un Button depende de la plataforma pero la funcionalidad es la misma. Se pueden cambiar el texto y el color del Button si se desea. Clase ActionEvent: Estos eventos se producen al clicar con el ratn en un botn (Button), al elegir un comando de un men (MenuItem), al hacer doble clic en un elemento de una lista (List), y al pulsar intro para introducir texto en una caja de texto (TextField). Clase Canvas: Una Canvas es una zona rectangular de pantalla en la que se puede dibujar y en la que se pueden generar eventos. Las Canvas permiten realizar realizar dibujos, mostrar imgenes y crear componentes a medida de modo que muestren un aspecto similar en todas las plataformas. Component Checkbox y Clase CheckboxGroup: Los objetos de la clase Checkbox son botones de opcin o de seleccin con dos posibles valores on y off. La clase CheckboxGroup permite la opcin de agrupar varios Checkbox de modo que uno y solo uno este en on. Al cambiar la seleccin de un Checkbox se produce un ItemEvent. Clase ItemEvent: Se produce un ItemEvent cuando ciertos componentes cambian de estado (on/off). Clase Choice:
AWT/SWING
Permite elegir un item de una lista desplegable los objetos Choice ocupan menos espacio en pantalla que los Checkbox. Al elegir un item se genera un ItemEvent. Clase Label: La clase Label introduce en un container un texto no editable y no seleccionable. Clase List: Viene definida por una zona de pantalla con varias lneas de las que se muestran solo algunas y entre las que se puede hacer una seleccin simple y mltiple. Las List generan eventos de la clase ActionEvent e ItemEvents. Clase Scrollbar: Es una barra de desplazamiento con un cursor que permite introducir y modificar valores, con pequeos y grandes incrementos. Al cambiar el valor de la Scrollbar se produce un AdjustementEvent. Clase AdjustementEvent: Hay cinco tipos de AdjustementEvent: track (se arrastra el cursor de la Scrollbar), unit increment y unit decrement (se clica en las flechas de la Scrollbar), block increment y block decrement (se clica encima o debajo del cursor). Clase ScrollPane: Es como una ventana de tamao limitado en la que se puede mostrar un componente de mayor tamao con dos Scrollbars que son visibles solo si son necesarias por defecto. Clase TextArea y TextField: Ambas componentes se heredan de la clase TextComponent y muestran texto seleccionable y editable. TextArea ofrece posibilidades de edicin de texto seleccionables adems puede estar compuesta de varias lneas. No se pueden crear objetos de la clase TextComponent porque su constructor no es public. Reciben eventos TextEvent y todos los de sus super-clase. Clase TextEvent: Se produce un TextEvent cada vez que cambia algo en un TextComponent. Se puede desear evitar ciertos caracteres y para eso es necesario gestionar los eventos correspondientes. Clase KeyEvent: Se produce un KeyEvent al pulsar sobre el teclado. Hay dos tipos key-typed que representa la introduccin de un carcter Unicode; y key-pressed y key-released que representan pulsar o soltar una tecla. Mens: Los mens de Java no descienden de Component sino de MenuComponent pero tienen un comportamiento similar pues aceptan Events. Para crear un men se debe crear primero una MenuBar; despus se crean los Menus y los MenuItem. Los MenuItems se aaden al Menu correspondiente; los Menus se aaden a la MenuBar y la MenuBar se aade a un Frame. Tambin puede aadirse un Menu a otro Menu para crear un sub-men, del modo que es habitual en Windows. La clase Menu es subclase de MenuItem. Esto es as precisamente para permitir que un Menu sea aadido a otro Menu. Clase MenuShortcut: Derivada de Object, representa las teclas aceleradoras que pueden utilizarse para activar los mens desde teclado, sin ayuda del ratn. Clase Menubar: Es un contenedor de objetos Menu. Clase Menu:
AWT/SWING 10
Bazo y Garca
El objeto Menu define las opciones que aparecen al seleccionar uno de los mens de la barra de mens. En un Menu se pueden introducir objetos MenuItem, otros Menu, objetos CheckboxMenuItem y separadores. Clase MenuItem: Representa las distintas opciones de un men. Al seleccionar un objeto MenuItem se generan eventos del tipo ActionEvent. Clase CheckboxMenuItem: Son items de un Menu que pueden estar activados o no. No generan ActionEvent, generan ItemEvent de modo similar a la clase CheckBox. Menus Pop-Up: Son mens que aparecen en cualquier parte de la pantalla al cliclar con el botn derecho del ratn (pop-up trigger) sobre un componente determinado.
11
AWT/SWING
2.10
La clase Component tiene tres mtodos muy importantes paint (),repaint() y update(). Mtodo paint(Graphics g) El mtodo paint que esta definido en la clase Component no hace nada por defecto y hay que redefinirlo en alguna de sus clases derivadas. Este mtodo se llama automticamente cuando se pinta la ventana por primera vez y cada vez que AWT entiende que debe ser redibujada. Mtodo update(Graphics g) Cuando se llama al mtodo update se redibuja la ventana con el color de fondo y luego se llama al mtodo paint. Este mtodo puede ser llamado por el programador explcitamente. mtodo repaint() Es el mtodo mas utilizado por el programador. Se puede utilizar de las cuatro formas siguientes: repaint() .- Se llama al mtodo update. repaint(long time) .- Se especifica el numero de milisegundos transcurridos los cuales se llama al mtodo update. repaint(int x, int y, int w, int h) .- Se especifica la zona sobre la cual hay que aplicar update. repaint(long time, int x, int y, int w, int h) .Combinacin de las dos modalidades anteriores
2.10.1
Clase Graphics
La clase Graphics que define un objeto que se pasa como nico argumento a los mtodos update y paint, nos permite realizar dos cosas : dibujo de primitivas grficas y dibujos en gif y jpeg. Las primitivas grficas son unos mtodos definidos en la clase Graphics que nos permiten dibujar lneas, polgonos simples, texto, ... utilizando como coordenadas pixels como se muestra en la figura. La clase Graphics tambin permite incorporar imgenes en formato gif y jpeg. Para conseguir esto hay que seguir los siguientes pasos. Crear un objeto Image y llamar al mtodo getImage de la siguiente forma: Image miImagen=getImage(Imagen.gif) Una vez cargada la imagen hay que representarla. Se redefine el mtodo paint y se utiliza el mtodo DrawImage de la clase Graphics. Este mtodo es polimorfo, pero casi siempre hay que incluir en sus parmetros el nombre del objeto Image creado, las dimensiones de dicha imagen y un objeto ImageObserver. ImageObserver es un interfaz que declara mtodos para observar el estado de la carga y visualizacin de la imagen.
AWT/SWING
12
Bazo y Garca
2.10.2
Con AWT se pueden hacer animaciones de una forma muy sencilla: se define el mtodo paint repetidas veces haciendo que dibuje una imagen diferente a la anterior. Una forma de hacer esto declarando una clase Thread con un bucle infinito que duerma x milisegundos entre dibujo y dibujo. El problema es que se suele producir un parpadeo o flipper, aunque existen varias tcnicas de evitar este problema como redefinir el mtodo update cambiando solo aquello que hay que repintar o utilizando la tcnica de doble buffer.
3 Swing
Swing es un paquete Java para la generacin de la GUI en aplicaciones reales de gran tamao, viene a complementar y ampliar al modelo de componentes y eventos de AWT, basndose en este. Es una de las APIs del JFC (Java Foundation Classes).
13
AWT/SWING
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.
AWT/SWING
14
Bazo y Garca
Otro mejora importante es que ahora todos los componentes pueden presentar una pequea leyenda de texto con una breve explicacin, que es conocida como tooltip.
Este es el cdigo de un sencillo programa hecho utilizando Swing a modo de Hola Mundo. 1. import java.awt.*; 2. import java.awt.event.*; 3. import javax.swing.*; 4. public class UnJBoton { 5. public static void main(String args[]) { 6. Frame f = new Frame(); 7. JButton b = new JButton("Pulsame"); 8. f.add(b); 9. f.pack(); 10. f.setVisible(true); 11. b.addActionListener(new ActionListener() { 12. public void actionPerformed(ActionEvent e) { System.out.println("HOLA"); 13. 14. 15. 16. } }); } }
En las lneas 1,2,3 se importan los packages de AWT y Swing necesarios para la aplicacin. Desde la lnea 4 hasta el final del programa se implementa la clase UnJBoton en donde se instancia un objeto de tipo Frame (contenedor), se instancia tambin un Jbutton y se aade al contenedor Frame con el mtodo add. En la lnea 9 de dicha clase se utiliza el mtodo pack que establece un tamao por defecto al Frame que hemos creado. SetVisible, una lnea ms abajo muestra el Frame por pantalla y a continuacin mediante una clase annima registramos el objeto que gestionara el evento ActionEvent. La gestin de este evento es que cuando el usuario pulse el botn plsame se escribe por la salida estndar HOLA.
15
AWT/SWING
encarga de proporcionar barras de desplazamiento a todo el resto de componentes grficos existente. Japplet: Se trata de la reimplementacin de la clase applet para que sta pueda aprovechar todas las nuevas caractersticas existentes. Jbutton: botn que adems de texto puede contener imgenes en cualquier posicin en relacin con el texto. JtoggleButton: se trata de una clase que no tiene equivalentes en AWT. Representa un botn que se mantiene presionado aunque dejemos de presionar con nuestro ratn sobre l, pero visualmente no se difiere de un Jbutton cuando no est activado. Jlabel: etiqueta de texto que puede contener imgenes en cualquier posicin en relacin con el texto. JtextField: Componente que sirve para conseguir la entrada de texto por parte del usuario. JtextPane: se trata tambin de un panel para visualizar texto, con la salvedad de que tiene la capacidad de mutar en relacin al tipo de texto que se desee mostrar para poder visualizarlo correctamente. Jlist: presenta una lista de elementos de entre los que se puede elegir uno o varios simultneamente. JdesktopPane: se trata de un panel base para el desarrollo de aplicaciones MDI. JinternalFrame: este panel no es una ventana en s, sino que simula una ventana interior a un JdesktopPane. Como ventana interior puede ser movida, cerrada, o iconizada. Jtable: este componente presenta una rejilla en la que se puede colocar cualquier componente Swing. JcheckBox: es similar al componente checkbox que encontramos en cualquier lenguaje y que permite mostrar al usuario si la opcin est seleccionada o no. JpasswordField: se encuentra justo por debajo de Jtextfield en la jerarqua de componentes, y permite la edicin de texto sin realizar un eco de los caracteres tecleados en pantalla, que son sustituidos por un carcter *. JtextArea: hereda de JtextComponent, con la diferencia es que un rea de texto permite la edicin de mltiples lneas. Hay que tener en cuenta que si queremos tener la capacidad de desplazarnos a lo largo de un texto que no cabe en el componente tendremos que colocar el JtextArea en un JscrollPane. JprogressBar: las barras de progreso permiten ver de forma grfica la evolucin de una tarea. Normalmente el avance se mide en porcentaje y la barra se acompaa de la visualizacin en texto del valor de dicho porcentaje. Java incorpora otra posibilidad para esta tarea: un monitor de progreso, que permite ver el avance de un proceso de forma ms sencilla que las barras. Adems al ser mostradas en un cuadro de dialogo, el usuario puede cerrarlas en cualquier momento e incluso llegar a cancelar el proceso. JcomboBox: es similar al Choice de AWT. Dispone de una lista desplegable de posibles valores, pero si no encontramos entre ellos el valor que buscamos, podemos teclearlo(si hemos habilitado la opcin con setEditable(true)). Este control de Swing presenta una facilidad aadida: cuando pulsamos la inicial de la opcin que buscamos, nos lleva directamente al primer trmino de la lista que empiece por dicha letra.
AWT/SWING
16
Bazo y Garca
BoxLayout: Es similar al FlowLayout de AWT, con la diferencia de que con l se pueden especificar los ejes (x o y). Viene incorporada en el componente Box, pero est disponible como una opcin en otros componentes. OverlayLayout: Todos los componentes se aaden encima de cada componente previo. SpringLayout: El espacio se asigna en funcin de una serie de restricciones asociadas con cada componente. ScrollPaneLayout. ViewportLayout.
17
AWT/SWING
AWT/SWING
18
Bazo y Garca
4. Conclusiones
A lo largo de este informe se han comprobado las similitudes y diferencias entre ambos APIs para la creacin de interfaces grficas. Bsicamente, Swing viene a ser una ampliacin y revisin de AWT. Ambas bibliotecas de clases comparten aspectos como el manejo de eventos, jerarquas similares de componentes, la representacin de grficas bsicas e imgenes... Adems, Swing aade nuevas funcionalidades a los antiguos componentes, aade nuevos componentes, introduce el concepto de Look & Feel, da soporte a el paradigma MVC; en resumen, aprovecha el camino recorrido por AWT respondiendo a sus deficiencias y a las nuevas necesidades. Esto pone de manifiesto que las capacidades y respuestas que ofrece Swing son fruto de una suma de trabajos anteriores a l, lo que indica la importancia en la construccin de software de las buenas prcticas de la ingeniera del software, que facilitan conceptos tan tiles como la reutilizacin, la portabilidad entre plataformas, la escalabilidad... en resumen al software de calidad. En resumen, AWT y Swing son un gran ejemplo de la buena puesta en marcha de las prcticas de la ingeniera del software y de la orientacin a objeto.
5. Referencias
[1] Java Swing http://jungla.dit.upm.es/~santiago/docencia/apuntes/Swing/ [2] Sun The Swing Tutorial http://java.sun.com/docs/books/tutorial/uiswing [3] Sun, Traductor : Juan Antonio Palos Swing y JFC http://programacion.com/java/tutorial/swing/ [4] Universidad de Navarra Aprenda Java como si estuviera en primero San Sebastin, Marzo 1999 [5] Universidad de Las Palmas de Gran Canaria Tutorial de Java AWT http://www.ulpgc.es/otros/tutoriales/java/Cap4/awt.html
19
AWT/SWING