Está en la página 1de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV.

Elementos de una interfaz grfica

Introduccin a la Construccin de Interfaces Grficas de Usuario en Java

1 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

INDICE
1. Introduccin: Java Foundation Clases (JFC)..........................................5 1.1. 1.2. El API de Swing .................................................................6 MVC (Model-View-Controller) ..............................................8 Modelo ................................................................................8 Vista ...................................................................................9 Controlador .........................................................................9 1.3. Delegados UI y PLAF ..........................................................9

Pluggable look-and-feel .......................................................... 10 2. Componentes Grficos .................................................................... 11 2.1. JFrame........................................................................... 15

Crear y configurar un Frame ................................................... 15 2.2. JPanel ............................................................................ 16

Otros Contenedores ............................................................... 16 2.3. JButton .......................................................................... 18

Seleccionar u Obtener el Contenido de un Botn ........................ 19 Ajuste de la Apariencia del Botn ............................................. 20 2.4. JLabel ............................................................................ 21

Seleccionar u Obtener el Contenido de la Etiqueta ...................... 21 Ajuste Fina de la Apariencia de la Etiqueta ................................ 22 2.5. JTextField ....................................................................... 22

2 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

Seleccionar u Obtener el Contenido de un Campo de Texto.......... 23 Ajuste de la Apariencia de un Campo de Texto ........................... 24 2.6. JComboBox .................................................................... 24

Seleccionar u Obtener tems de la Lista del ComboBox ............... 25 Personalizar la Configuracin del ComboBox .............................. 25 2.7. JRadioButton .................................................................. 26

Mtodos y Constructores ms utilizados de ButtonGroups............ 26 2.8. 2.9. JCheckBox...................................................................... 27 JMenuBar ....................................................................... 27

Crear y Configurar Barras de Men........................................... 27 Crear y Rellenar Mens .......................................................... 28 Implementar tems de Men ................................................... 29 2.10. 2.11. 3. Otros Componentes ...................................................... 30 Cmo funciona el dibujo ................................................ 32

Manejo de eventos ......................................................................... 33 Accin que resulta en el evento ......................................... 33 Tipo de oyente ................................................................ 33 ActionListener .............................................................. 33 3.1. 3.2. 3.3. Hilo de despacho de eventos (Event-dispatching thread) ....... 35 Actions........................................................................... 35 Entrada de teclado, KeyStrokes, y Actions........................... 36

3 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

3.4. 3.5. 3.6. 3.7. 3.8. 4.

Modelo de datos .............................................................. 37 AWT vs Swing ................................................................. 38 Adaptadores ................................................................... 38 JButton .......................................................................... 38 JCheckBox...................................................................... 38

Direcciones Web............................................................................. 38

4 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

1. Introduccin: Java Foundation Clases (JFC)


El conjunto de las bibliotecas para la construccin de la interfaz de usuario que nos proporciona Java se denomina Java Foundation Classes (JFC). Este conjunto extiende las bibliotecas originales que se denominaban Abstract Window Toolkit (AWT). Entre las interfaces de programacin (API) que abarca JFC se incluyen los siguientes: JFC/Swing components. Incluye todo tipo de componentes grficos, ventanas, botones, desplegables, campos de texto, etc. Pluggable Look and Feel. Ofrece a cualquier componente una amplia seleccin de aspectos y comportamientos. Accessibility API. Permite tecnologas asistivas como lectores de pantalla y display Braille para obtener informacin desde la interfaz de usuario. Java 2D API. Permite a los desarrolladores incorporar fcilmente grficos 2D de alta calidad, texto, e imgenes en aplicaciones y applets Java. Drag and Drop. Proporciona la habilidad de arrastrar y soltar entre aplicaciones Java y aplicaciones nativas. AWT (Abstract Window Toolkit). Contiene el API Internationalization. Permite adaptar las aplicaciones java a varios lenguajes sin hacer cambios en el cdigo.

La caracterstica ms notable de los componentes Swing es que estn escritos al 100% en Java y no dependen de componentes nativos, como sucede con casi todos los componentes AWT. Esto significa que un botn Swing y un rea de texto se vern y funcionarn idnticamente en las plataformas Macintosh, Solaris, Linux y Windows. Nota respecto a las versiones: Las tres primeras API estn implementadas en Java, sin cdigo nativo, y existen desde la versin JDK 1.1. Las dos siguientes slo estn a partir de la versin Java2

5 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

1.1. El API de Swing


Swing consiste en 16 paquetes, cada uno de los cuales con un propsito concreto. javax.swing Es el paquete de ms alto nivel, que contiene los componentes, adaptadores, los modelos por defecto de los componentes, y las interfaces para todos los modelos. javax.swing.border Clases e interfaces que se usan para definir estilos de bordes especficos. Observe que los bordes pueden ser compartidos por cualquier nmero de componentes Swing, ya que no son componentes por s mismos. javax.swing.colorchooser Contiene clases de soporte para el componente seleccionador de color. javax.swing.event Contiene los tipos de eventos y listeners (oyentes) especficos de Swing. Adems los componentes Swing pueden generar sus propios eventos. javax.swing.filechooser Contiene clase de soportes para el componente seleccionador de ficheros. javax.swing.plaf PLAF (pluggable look-and-feel) contiene las clases de Interfaz de Usuario que implementan los diferentes look-and-feel para los componentes. stas estn orientadas a desarrolladores que, por una razn u otra, no pueden usar uno de los look-and-feel existentes. javax.swing.plaf.basic

6 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

Consiste en la implementacin del Basic look-and-feel, encima del cual se construyen los look-and- feels que provee Swing. Normalmente deberemos usar las clases de este paquete si queremos crear nuestro look-and-feel personal. javax.swing.plaf.metal Metal es el look-and-feel por defecto de los componentes Swing. Es el nico look-and-feel que viene con Swing y que no est diseado para ser consistente con una plataforma especfica. javax.swing.plaf.multi Es el Multiplexing look-and-feel. No se trata de una implementacin normal de look-and-feel ya que no define ni el aspecto ni el comportamiento de ningn componente. Ms bien ofrece la capacidad de combinar varios lookand-feels para usarlos simultneamente. javax.swing.table Contiene las clases e interfaces para soportar el componente tabla. javax.swing.text Contiene las clases de soporte para el framework documento. javax.swing.text.html Contiene las clases de soporte para crear editores de texto HTML. javax.swing.text.html.parser Soporte para analizar gramaticalmente HTML. javax.swing.text.rtf Contiene soporte para documentos RTF. javax.swing.tree Clases e interfaces que dan soporte al componente tree. Este componente se usa para mostrar y manejar datos que guardan alguna jerarqua. 7 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

javax.swing.undo El paquete undo contiene soporte para implementar y manejar la funcionalidad deshacer/rehacer.

1.2. MVC (Model-View-Controller)


MVC es una descomposicin orientada a objeto del diseo de interfaces de usuario. Los componentes se descomponen en tres partes: un modelo, una vista, y un controlador.

Modelo El modelo es el responsable de conservar todos los aspectos del estado del componente. Esto incluye, por ejemplo, aquellos valores como el estado pulsado/no pulsado de un botn, los datos de un carcter de un componente de texto y como esta estructurado, etc. Un modelo puede ser responsable de comunicacin indirecta con la vista y el controlador. Por indirecta queremos decir que el modelo no conoce su vista y controlador--no mantiene referencias hacia ellos. En su lugar el modelo enviar notificaciones o broadcasts (lo que conocemos como eventos). En la figura anterior esta comunicacin indirecta se representa con lneas de puntos.

8 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

Vista La vista determina la representacin visual del modelo del componente. Esto es el aspecto(look) del componente. Por ejemplo, la vista muestra el color correcto de un componente, tanto si el componente sobresale como si est hundido (en el caso de un botn), y el renderizado de la fuente deseada. La vista es responsable de mantener actualizada la representacin en pantalla y debe hacerlo recibiendo mensajes indirectos del modelo o mensajes directos del controlador. Controlador El controlador es responsable de determinar si el componente debera reaccionar a algn evento proveniente de dispositivos de entrada, tales como el teclado o el ratn. El controlador es el comportamiento(feel) del componente, y determina que acciones se ejecutan cuando se usa el componente. El controlador puede recibir mensajes directos desde la vista, e indirectos desde el modelo. Esta arquitectura va a permitir a los componentes Swing: Personalizar el aspecto(look) y el comportamiento(feel) sin modificar el modelo. Personalizar y reemplazar el modelo de datos de un componente.

Los componentes Swing estn basados en una versin ms moderna de este diseo. El componente se comporta como un mediador entre el/los modelo(s), la vista y el controlador. No es ni la M, ni la V, ni la C, aunque puede ocupar el lugar de una o incluso todas estas partes si lo diseamos para ello.

1.3. Delegados UI y PLAF


Swing empaqueta todos los controladores y vistas de un componente dentro de un objeto denominado delegado UI. Por esta razn, la arquitectura subyacente de Swing se denomina ms acertadamente como modelo-delegado que como modelo-vista-controlador. Idealmente, la comunicacin entre el modelo y el delegado UI es indirecta, permitiendo as tener asociado ms de un modelo a un delegado UI, y viceversa.

9 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

La mayor parte de los delegados UI se construyen de manera que conocen un componente y su(s) modelo(s) slo mientras llevan a cabo tareas de dibujo o de vista-controlador. Swing evita normalmente asociar delegados UI a un componente determinado (a causa de la instancia esttica).

Pluggable look-and-feel
Swing incluye varios conjuntos de delegados UI. Cada conjunto contiene implementaciones de UI para casi todos los componentes Swing y podemos llamar a estos conjuntos una implementacin de look-and-feel o pluggable look-andfeel (PLAF). Hay tres implementaciones de pluggable look-and-feel que descienden de Basic look-and- feel: Windows: com.sun.java.swing.plaf.windows.WindowsLookAndFeel CDE\Motif: com.sun.java.swing.plaf.motif.MotifLookAndFeel Metal (por defecto): javax.swing.plaf.metal.MetalLookAndFeel

Hay tambin un MacLookAndFeel que simula las interfaces de usuario de Macintosh, pero no viene con Java 2 y se debe descargar separadamente. Las libreras de los Windows y Macintosh pluggable look-and-feel slo se soportan en la plataforma correspondiente. Para cambiar el look-and-feel actual de una aplicacin, tenemos simplemente que llamar al mtodo setLookAndFeel() de UIManager, pasndole

10 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

el nombre completo del LookAndFeel que vamos a usar. El cdigo siguiente se puede usar para llevar esto a cabo en tiempo de ejecucin:
try { UIManager.setLookAndFeel( "com.sun.java.swing.plaf.motif.MotifLookAndFeel"); SwingUtilities.updateComponentTreeUI(myJFrame); } catch (Exception e) { System.err.println("Could not load LookAndFeel"); } SwingUtilities.updateComponentTreeUI() informa a todos los hijos del componente especificado que el look-and-feel ha cambiado y que necesitan reemplazar sus delegados UI por los del tipo especificado.

2. Componentes Grficos
Swing desciende de un mismo padre llamado JComponent que desciende de la clase de AWT Container. Es por ello que Swing es ms una capa encima de AWT que una sustitucin del mismo. El paquete Swing define dos tipos de componentes. Contenedores de alto nivel o peso pesado (JFrame, JApplet,
JWindow, JDialog)

Componentes de peso ligero (Jcualquier-cosa, como JButton, JPanel, y


JMenu)

Por ejemplo, un componente pesado java.awt.Button ejecutndose sobre la plataforma Java para Unix mapea el botn Motif real. En esta relacin es botn Motif es llamado "par" del java.awt.Button. Si hemos creado dos java.awt.Button en una aplicacin, tambin se crearn dos "pares" y dos botones Motif. La plataforma Java comunica con los botones Motif usando el JNI. Para cada componente aadido a la aplicacin, hay una pila adicional

11 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

unida al sistema de ventanas local, que es por lo que estos componentes se llaman de peso pesado. Los componentes de peso ligero no tienen "pares" y emulan a los componentes del sistema local de ventanas. Un botn de peso ligero est representado por un rectngulo con una etiqueta dentro que acepta eventos del ratn. Aadir ms botones significa dibujar ms rectngulos. Un componente de peso ligero necesita dibujarse sobre algo, y una aplicacin escrita en Java necesita interactuar con el controlador de ventanas local para que la ventana principal de la aplicacin pueda ser cerrada o minimizada. Esto es porque los componentes padres de nivel superior mencionados arriba (JFrame, JApplet, y otros) estn implementado como componentes de peso pesado, es decir, necesitan ser mapeados sobre un componente en el sistema local de ventanas. Cada aplicacin o applet Swing necesita al menos un componente contenedor de peso pesado (un JFrame, JWindow, JApplet, o JDialog). Existe principalmente para proporcionar espacio para que se dibujen otros componentes Swing. Un contenedor intermedio (un JPanel, JscrollPane, JtabbedPane) simplifica el posicionamiento de los componentes. o

Los componentes atmicos (JButton, JLabel, o JTextField) no contienen otros componentes Swing, sino que son entidades auto-suficientes que representan informacin para el usuario. Frecuentemente, los componentes atmicos tambin obtienen entrada del usuario. A continuacin se presentan dos grficos componentes implementados en el paquete Swing. con la jerarqua de

12 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

13 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

En las siguientes subsecciones veremos algunos de estos componentes a travs de ejemplos y su correspondiente cdigo en Java. Para utilizar y modificar dichos componentes es necesario importar el paquete Swing

import javax.swing.*;

14 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

2.1. JFrame
Es un contenedor Swing de alto nivel que proporciona ventanas para applets y aplicaciones. Un frame tiene decoraciones como un borde, un ttulo, y botones para cerrar y minimizar la ventana. Un programa tpico simplemente crea un frame, aade componentes al panel de contenido, y quizs aade una barra de men.

Crear y configurar un Frame


Mtodo JFrame() JFrame(String) Propsito Crea un frame. El argumento proporciona el ttulo del frame. String

Selecciona u obtiene la operacin que ocurre cuando el usuario pulsa el botn de cerrar la ventana. Las posibles elecciones son. void setDefaultCloseOperation(int) int getDefaultCloseOperation()
DO_NOTHING_ON_CLOSE HIDE_ON_CLOSE (por defecto) DISPOSE_ON_CLOSE

Estas constantes estn definidas en el interface

WindowConstants.

public class MiFrame extends JFrame{ //constructor public MiFrame(String label) { super(label); // Ttulo de la ventana try {

UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName() ); }

15 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

catch (Exception exc) { System.err.println("Error loading L&F: " + exc); } setDefaultCloseOperation(EXIT_ON_CLOSE); //necesario para ver la ventana setSize(400, 400); pack(); setVisible(true); }

Actividad: Mirar aquellas propiedades del JFrame en su API, que estn relacionadas con su aspecto fsico (posicionamiento en la pantalla, tipo de cursor, tipo de letra, color, ...).

Actividad: Crear una ventana cuyo ttulo ser Conversor de divisas.

2.2. JPanel
Los paneles son los contenedores de propsito general ms frecuentemente utilizados. Implementados con la clase JPanel, los paneles no aaden casi ninguna funcionalidad ms all de las que tienen los objetos JComponent. Normalmente se usan para agrupar componentes, porque los componentes estn relacionados o slo porque agruparlos hace que la distribucin sea ms sencilla. Un panel puede usar cualquier controlador de distribucin, y se les puede dotar de bordes fcilmente.

Otros Contenedores
JPanel es slo una de las varias clases de contenedores que se pueden utilizar. Existen algunos contenedores de propsito especial que podramos utilizar en lugar de un JPanel.

16 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

Box

Automticamente utiliza un BoxLayout para distribuir sus componentes. La ventaja de Box es que es de peso superligero, ya que desciende directamente de la clase Container. Su desventaja es que no es un verdadero componente Swing -- no hereda el API que soporta caractersticas como los bordes de la caja, ni la seleccin sencilla de los tamaos mximo, mnimo y preferido.

Proporciona una tercera dimensin, profundidad, para posicionar componentes. Los paneles con capas no tienen controladores de JLayeredPane distribucin pero pueden ser utilizados para colocar los componentes en capas en un JPanels. Un tipo de layeredpane, JDesktopPane, est diseado especficamente para manejar frames internos. JScrollPane JSplitPane Proporciona una vista desplazable de un componente grande. Muestra dos componentes modificados por el usuario. cuyos tamaos relativos pueden ser

JTabbedPane

Permite a varios componentes, normalmente objetos JPanel, compartir el mismo espacio.

El panel de contenido por defecto de un Jframe es Container que, como regla, contiene todos los componentes no-mens de la ventana. Se puede encontrar el panel de contenido utilizando un mtodo llamado getContentPane. De forma similar, se puede cambiar el panel de contenido -- quizs para que sea un JPanel que hayamos creado -- utilizando setContentPane. El controlador de disposicin por defecto para el panel de contenido de un frame es java.awt.BorderLayout. Un BorderLayout tiene cinco reas: north, south, east, west, y center.

Para aadir componentes al panel se utiliza el mtodo add(componente, area). Por defecto, un BorderLayout no pone espacios entre los componentes 17 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

que maneja. Podemos especificar los bordes (en pixels) usando el siguiente constructor.
public BorderLayout(int horizontalGap, int verticalGap) public class MiFrame extends JFrame{ //constructor public MiFrame(String label) { //... panelBotones=new JPanel(); panelBotones.setLayout(new GridLayout(1, 0)); panelBotones.add(new JButton(Boton 1)); Container contenedor=getContentPane(); contenedor.add(panelBotones,BorderLayout.SOUTH); } }

Actividad: Mirar el layout GridLayout de java.awt.

2.3. JButton
Un botn Swing puede mostrar tanto texto como una imagen. Cmo se implemente el manejo de eventos depende del tipo de botn utilizado y de cmo se utiliza. Generalmente, implementamos un action listener (ver seccin Manejo de Eventos), que es notificado cada vez que el usuario pulsa el botn. Las siguientes tablas listan los mtodos y constructores ms utilizados de JButton. El API para utilizar botones se divide en tres categoras: Seleccionar u obtener el contenido de un botn Ajuste de la apariencia del botn

18 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

Implementar la funcionalidad del botn

Seleccionar u Obtener el Contenido de un Botn


Mtodo o Constructor JButton(String, Icon) JButton(String) JButton(Icon) JButton() void setText(String) String getText() void setIcon(Icon) Icon getIcon() void setDisabledIcon(Icon) Icon getDisabledIcon() void setPressedIcon(Icon) Icon getPressedIcon() void setSelectedIcon(Icon) Selecciona u obtiene la imagen mostrada por el botn cuando est seleccionado. Si no se void especifica una imagen de botn desactivado setDisabledSelectedIcon(Icon) seleccionado, el aspecto y comportamiento crea una manipulando la imagen de seleccionado. Icon getDisabledSelectedIcon() Icon getSelectedIcon() setRolloverEnabled(boolean) boolean getRolloverEnabled() Utiliza setRolloverEnabled(true) y setRolloverIcon(someIcon) para hacer que el botn muestre el icono especificado cuando el cursor pasa sobre l. Selecciona u obtiene el texto mostrado en el botn. Selecciona u obtiene la imagen mostrada por el botn cuando no est seleccionado o pulsado. Selecciona u obtiene la imagen mostrada por el botn cuando est desactivado. Si no se especifica una imagen, el aspecto y comportamiento crea una por defecto. Seleccion u obtiene la imagen mostrada por el botn cuando est pulsado. Crea un ejemplar de JButton, lo inicializa para tener el texto/imagen especificado. Propsito

19 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

void setRolloverIcon(Icon)
Icon getRolloverIcon() void setRolloverSelectedIcon(Icon) Icon getRolloverSelectedIcon()

Ajuste de la Apariencia del Botn


Mtodo o constructor void setHorizontalAlignment(int) void setVerticalAlignment(int) int getHorizontalAlignment() int getVerticalAlignment() void setHorizontalTextPosition(int) void setVerticalTextPosition(int) int getHorizontalTextPosition() int getVerticalTextPosition() void setMargin(Insets) Insets getMargin() void setFocusPainted(boolean) boolean isFocusPainted() void setBorderPainted(boolean) boolean isBorderPainted() Selecciona u obtiene el nmero de pixels entre el borde del botn y sus contenidos. Selecciona u obtiene si el botn debera parecer diferente si obtiene el foco. Selecciona u obtiene si el borde del botn debera dibujarse. Propsito

Selecciona u obtiene dnde debe situarse el contenido del botn. La clase AbstractButton permite uno de los siguientes valores para alineacin horizontal: LEFT, CENTER (por defecto), y LEFT. Para alineacin vertical: TOP, CENTER (por defecto), y BOTTOM.

Selecciona u obtiene dnde debera situarse el texto del botn con respecto a la imagen. La clase AbstractButton permite uno de los siguientes valores para alineacin horizontal: LEFT, CENTER (por defecto), y LEFT. Para alineacin vertical: TOP, CENTER (por defecto), y BOTTOM.

20 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

Actividad: Crear tres botones Inicializar, Calcular y Salir. Colocarlos en la parte inferior de la ventana. Utilizar la mayor parte de los mtodos de las tablas anteriores.

2.4. JLabel
Si necesitamos crear un componente que muestre un sencillo texto o una imagen, reaccionando opcionalmente a la entrada del usuario, podemos hacerlo utilizando un ejemplar de JLabel o de una subclase personalizada de JLabel. Si el componente interactivo tiene estado, probablemente deberamos utilizar un botn en vez de una etiqueta.

Seleccionar u Obtener el Contenido de la Etiqueta


Mtodo JLabel(Icon) JLabel(Icon, int) JLabel(String) JLabel(String, Icon, int) JLabel(String, int) JLabel() void setText(String) String getText() void setIcon(Icon) Icon getIcon() Selecciona u obtiene el texto mostrado por la etiqueta. Selecciona u obtiene la imagen mostrada por la etiqueta. Crea un ejemplar de JLabel, inicializndolo para tener texto/imagen/alineamiento especificados. El argumento int especifica el alineacin horizontal del contenido de la etiqueta dentro de su rea de dibujo. El alineacin horizontal debe ser una de las siguientes constantes definidas en el interface SwingConstants (que implementa JLabel): LEFT, CENTER, o LEFT. Propsito

void Selecciona u obtiene la letra que debera ser la tecla setDisplayedMnemonic(char) alternativa. Esto es muy til cuando una etiqueta describe un componente (como un campo de texto) char que tiene un tecla alternativa pero no puede getDisplayedMnemonic() mostrarla. void setDisabledIcon(Icon) Selecciona u obtiene la imagen mostrada por la etiqueta cuando est desactivada. Si no se especifica

21 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

Icon getDisabledIcon()

esta imagen, el aspecto y comportamiento crea una manipulando la imagen por defecto.

Ajuste Fina de la Apariencia de la Etiqueta


Mtodo void setHorizontalAlignment(int) void setVerticalAlignment(int) int getHorizontalAlignment() int getVerticalAlignment() void setHorizontalTextPosition(int) void setVerticalTextPosition(int) int getHorizontalTextPosition() int getVerticalTextPosition() void setIconTextGap(int) int getIconTextGap() Selecciona u obtiene el nmero de pixels entre el texto de la etiqueta y su imagen. Propsito Selecciona u obtiene donde debera mostrarse el contenido de la etiqueta. El Interface SwingConstants define tres posibles valores para el alineamiento horizontal: LEFT (por defecto para etiquetas de slo texto), CENTER (por defecto para etiquetas de slo imagen), o LEFT; y tres para alineacin vertical: TOP, CENTER (por defecto), y BOTTOM.

Selecciona u obtiene dnde debera mostrarse el texto del botn con respecto a su imagen. El interface SwingConstants define tres posibles valores para posicin horizontal: LEFT, CENTER, y LEFT (por defecto); y tres para posicin vertical: TOP, CENTER (por defecto), y BOTTOM.

Actividad: Crear una etiqueta con el texto Cantidad. Posicionarla en la parte de arriba de la ventana. Mirar el API de JComponent y Component para tratar con la apariencia del texto.

2.5. JTextField
Los componentes de texto muestran algn texto y opcionalmente permiten que el usuario lo edite. Los paquetes Swing proporcionan cinco componentes de texto y proporcionan clases e interfaces para conseguir los requerimientos ms complejos. Sin importar sus diferentes usos capacidades,

22 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

todos los componentes de texto Swing descienden de la misma superclase,


JtextComponent.

Las siguientes tablas listan los constructores y mtodos ms comnmente utilizados de JTextField. Otros mtodos a los que se podra llamar estn definidos en las clases JComponent y Component. Estos incluyen los mtodos setForeground, setBackground, y setFont. Adems, podras querer llamar a algunos de los mtodos definidos en la clase padre de JTextField, JTextComponent.

Seleccionar u Obtener el Contenido de un Campo de Texto


Mtodo o Constructor JTextField() JTextField(String) JTextField(String, int) JTextField(int) JTextField(Document, String, int) void setText(String) String getText() Seleccion u obtiene el texto mostrado por el campo de texto. Crea un ejemplar de JTextField, inicializando su contenido al texto especificado. El argumento int seleccionar el nmero de columnas. Esto se utiliza para definir la anchura preferida del componente y podra no ser el nmero de columnas realmente mostradas. Propsito

23 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

Ajuste de la Apariencia de un Campo de Texto


Mtodo o Constructor void set Editable(boolean) boolean is Editable() void setForeground(Color) Color getForeground() void setBackground(Color); Color getBackground() void setFont(Font); Font getFont() void setColumns(int); int getColumns() Propsito Selecciona u obtiene si el usuario puede editar el texto del campo del texto. Selecciona u obtiene el color del texto en el campo de texto. Selecciona u obtiene el color del fondo del campo de texto Selecciona u obtiene la fuente utilizada por el campo de texto. Selecciona u obtiene el nmero de columnas mostradas por el campo de texto. Obtiene la anchura de las columnas del campo de texto. Este valor es establecido implcitamente por la fuente usada. Selecciona u obtiene cmo se alinea el texto horizontalmente dentro de su rea. Se puede utilizar JTextField.LEFT, JTextField.CENTER, y JTextField.LEFT como argumentos.

int getColumnWidth()

void setHorizontalAlignment(int); int getHorizontalAlignment()

Actividad: Crear un campo de texto para introducir la cantidad a convertir. Ese campo ir despus de la etiqueta creada en el apartado anterior.

2.6. JComboBox
Permite al usuario seleccionar un valor desde una lista. Puede ser editable o no.

24 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

Las siguientes tablas listan los mtodos y constructores ms utilizados de JComboBox.

Seleccionar u Obtener tems de la Lista del ComboBox


Mtodo JComboBox(ComboBoxModel) JComboBox(Object[]) Crea un ComboBox con una lista predeterminada. JComboBox(Vector) JComboBox() void addItem(Object) void insertItemAt(Object, int) Object getItemAt(int) Obtiene un tem de la lista. Object getSelectedItem() void removeAllItems() void removeItemAt(int) void removeItem(Object) int getItemCount() void setModel(ComboBoxModel) ComboBoxModel getModel() Obtiene el nmero de tems de la lista. Selecciona u obtiene el modelo de datos que proporciona los tems de la lista. Elimina uno o ms tems de la lista. Aade o inserta un tem en la lista. Propsito

Personalizar la Configuracin del ComboBox


Mtodo Propsito

25 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

void setEditabe(boolean) boolean is Editable() void setRenderer(ListCellRenderer)

Selecciona u Obtiene si el usuario puede teclear en el ComboBox.

Selecciona u obtiene el objeto responsable para crear el tem seleccionado en el ComboBox. ListCellRenderer getRenderer() Utilizado cuando el ComboBox no es editable. void setEditor(ComboBoxEditor) Selecciona u obtiene el objeto responsable del pintado y edicin del tem seleccionado en el ComboBox. Esto slo se utiliza cuando el ComboBoxEditor getEditor() ComboBox es editable.

Actividad: Crear una lista desplegable con un conjunto de divisas. Ser no editable y se situar detrs del campo de texto.

2.7. JRadioButton
Los Botones de Radio son grupos de botones en los que, por convencin, slo uno de ellos puede estar seleccionado. Swing soporta botones de radio con las clases JRadioButton y ButtonGroup. Para cada grupo de botones de radio, se necesita crear un ejemplar de cuidado de desactivar la seleccin anterior cuando el usuario selecciona otro botn del grupo.
ButtonGroup y aadirle cada uno de los botones de radio. El ButtonGroup tiene

Mtodos y Constructores ms utilizados de ButtonGroups


Mtodo ButtonGroup() void add(AbstractButton) void remove(AbstractButton) Aade un botn a un grupo, o elimina un botn de un grupo. Propsito Crea un ejemplar de ButtonGroup.

26 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

Actividad: Crear dos radiobuttons cuyo texto ser Todos y Seleccionados. Este grupo de botones se situar en la parte central de la ventana.

2.8. JCheckBox
Los Checkboxes son similares a los botones de radio, pero su modelo de seleccin es diferente, por convencin. Cualquier nmero de checkboxes en un grupo -- ninguno, alguno o todos -- puede ser seleccionados.

Actividad: Crear por cada una de las divisas que se van a calcular un checkbox con su nombre y un campo donde poder mostrar el resultado de la cantidad a convertir. Este conjunto de componentes ir en la parte central de la ventana, debajo de los botones de radio.

2.9. JMenuBar
Los mens son los nicos en que, por convencin, no se sitan con los otros componentes en el UI. En su lugar, aparecen en una barra de men o en un men desplegable. Una barra de men contiene uno o ms mens, y tiene una posicin dependiente de la plataforma -- normalmente debajo de la parte superior de la ventana. Un men desplegable es un men que es invisible hasta que el usuario hace una accin del ratn especfica de la plataforma, como pulsar el botn derecho del ratn sobre un componente. Entonces el men desplegable aparece bajo el cursor. Las siguientes tablas listan los mtodos y constructores ms utilizados de JMenuBar. El API se divide en estas categoras.

Crear y Configurar Barras de Men


Mtodo JMenuBar() void Crea una barra de men. Selecciona u obtiene la barra de men de un applet, Propsito

27 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

setJMenuBar(JMenuBar) JMenuBar getJMenuBar() (en JApplet, JDialog, JFrame, JRootPane) void setMenuBar(JMenuBar) JMenuBar getMenuBar() (en JInternalFrame)

dialog, frame, o root pane. En las siguientes versiones de Swing y del JDK 1.2, los frames internos tambin soportarn estos mtodos.

Selecciona u obtiene la barra de men de un Frame interno. En las siguientes versiones de Swing y del JDK 1.2, este mtodo ser anulado y deberamos utilizar setJMenuBar/getJMenuBar.

Crear y Rellenar Mens


Mtodo JMenu() JMenuItem add(JMenuItem) JMenuItem add(Action) void add(String) void addSeparator() JMenuItem insert(JMenuItem, int) JMenuItem insert(Action, int) void insert(String, int) void insertSeparator(int) void remove(JMenuItem) Elimina el tem o tems especificados del men. Si el argumento es un entero, especifica la posicin del tem a eliminar. Inserta un tem de men o un separador en un men, en la posicin especificada. El primer tem de men es la posicin 0, el segundo la posicin 1, etc. Los argumentos JMenuItem, Action, y String se tratan de la misma forma que en los correspondientes mtodos add. Crea un men. Aade un tem de men al final del men. Si el argumento es un objeto Action, el men crea un tem de men como se describe en Cmo usar Actions. Si el argumento es un string, el men crea automticamente un objeto JMenuItem que muestra el texto especificado. Aade un separador la final del men. Propsito

28 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

void remove(int) void removeAll()

Implementar tems de Men


Mtodo JMenuItem() JMenuItem(Icon) JMenuItem(String) JMenuItem(String, Icon) JMenuItem(String, int) JCheckBoxMenuItem() JCheckBoxMenuItem(Icon) JCheckBoxMenuItem(String) JCheckBoxMenuItem(String, Icon) JCheckBoxMenuItem(String, boolean) JCheckBoxMenuItem(String, Icon, boolean) JRadioButtonMenuItem() JRadioButtonMenuItem(Icon) JRadioButtonMenuItem(String) JRadioButtonMenuItem(String, Icon) Crea un tem de men que se parece y acta como un radio buttom. Si se especifica un icono, el tem de men utiliza el icono en vez del icono por defecto de los botones de radio. El argumento string, si existe, especifica el texto que debera mostrar el tem de men. El tem de men est inicialmente desactivado. Crea un tem de men que se parece y acta como un checkbox. Si se especifica un icono, el tem de men utiliza el icono en vez del icono por defecto de los checkboxes. El argumento string, si existe, especifica el texto que debera mostrar el tem de men. Si se especifica true para el argumento booleano, el tem de men estar inicialmente seleccionado. De lo contario el tem de men est desactivado. Propsito Crea un tem de men normal. El argumento icon, si existe, especifica el icono que debera mostrar el tem de men. Igualmente el argumento String, especifica el texto que debera mostrar el tem de men. El argumento entero especifica el mnemnico de teclado a utilizar. Se puede especifar una de las constantes VK definidas en la clase KeyEvent. Por ejemplo, para especificar "a" como el mnemnico, podemos utilizar KeyEvent.VK_A.

29 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

void setState(boolean) boolean getState() void setEnabled(boolean)

Selecciona u obtiene el estado de seleccin de un tem de men. Si el argumento es true, activa el tem de men, si es false lo desactiva.

public class Menu extends JMenuBar { public Menu() { / JMenu menuArchivo = new JMenu("Archivo"); JMenuItem itemArchivo = new JMenuItem("Salir"); menuArchivo.add(itemArchivo); add( menuArchivo); } }

Actividad: Crea un menu para nuestra aplicacin con las siguientes entradas: Archivo-Salir y Ayuda-Sobre ...

2.10. Otros Componentes


Otros componentes que podis encontrar son:
JscrollPane: Panel con barra de desplazamiento no se limita slo a proporcionar barras de desplazamiento en caso de que los componentes que contengan no entren en l rea de visualizacin, sino que tambin se encarga de proporcionar

30 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

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 caractersticas existentes.

aprovechar

todas

las

nuevas

JOptionPane: Proporciona soporte para mostrar dilogos estndares, proporcionando iconos, especificando el ttulo y el texto del dilogo, y personalizando el texto del botn. Otras caractersticas permiten personalizar los componentes del dilogo a mostrar y especificar si el dilogo debiese aparecer en la pantalla. 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.

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.

presenta una lista de elementos de entre los que se puede elegir uno o varios simultneamente. se trata de un panel base para el desarrollo de aplicaciones MDI. 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: JInternalFrame: JDesktopPane:

JList:

este componente presenta una rejilla en la que se puede colocar cualquier componente swing.

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 JtextComponet, 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

31 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

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.

2.11. Cmo funciona el dibujo


Cuando un GUI Swing necesita dibujarse a s mismo -- la primera vez, o en respuesta a la vuelta de un ocultamiento, o porque necesita reflejar un cambio en el estado del programa -- empieza con el componente ms alto que necesita ser redibujado y va bajando por el rbol de contenidos. Esto est orquestado por el sistema de dibujo del AWT. Los componentes Swing generalmente se redibujan a s mismos siempre que es necesario. Por ejemplo, cuando llamamos al mtodo setText de un componente, el componente debera redibujarse automticamente a s mismo, y si es necesario, redimensionarse. El mtodo repaint sobre el componente pide que el componente se ponga en la cola para redibujado. Si se necesita cambiar el tamao o la posicin del componente pero no automticamente, deberamos llamar al mtodo revalidate sobre el componente antes de llamar a repaint. El cdigo de dibujo se ejecuta en el thread del despacho de eventos (ver seccin 3.1). Mientras se est manejando un evento no ocurrir ningn dibujo. De forma similar, si la operacin de dibujado tarda mucho tiempo, no se manejar ningn evento durante ese tiempo. Los programas slo deberan dibujarse cuando el sistema de dibujo se lo diga. La razn es que cada ocurrencia de dibujo de un propio componente debe ser ejecutado sin interrupcin. De otro modo, podran ocurrir resultados impredecibles, como que un botn fuera dibujado medio pulsado o medio liberado.

32 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

Para acelerar, el dibujo Swing usa doble-buffer por defecto -- realizado en un buffer fuera de pantalla y luego lanzado a la pantalla una vez finalizado. Podra ayudar al rendimiento si hacemos un componente Swing opaco, para que el sistema de dibujo de Swing pueda conocer lo que no tiene que pintar detrs del componente. Para hacer opaco un componente Swing, se llama al mtodo setOpaque(true) sobre el componente. Los componentes no-opacos de Swing puede parecer que tienen cualquier forma, aunque su rea de dibujo disponible es siempre rectangular. Por ejemplo, un botn podra dibujarse a s mismo dibujando un octgono relleno. El componente detrs del botn, (su contenedor, comnmente) sera visible, a travs de las esquinas de los lados del botn.

3. Manejo de eventos
Cada vez que el usuario teclea un carcter o pulsa un botn del ratn, ocurre un evento. Cualquiera puede ser notificado del evento. Todo lo que tiene que hacer es implementar la interface apropiado y ser registrado como un oyente de evento del evento fuente apropiado. Los componentes Swing pueden generar muchas clases de evento, incluyendo los de java.awt.event y por supuesto, los de javax.swing.event. Algunos de estos nuevos tipos de eventos de Swing son especficos del componente. Aqu hay unos pocos ejemplos:
Accin que resulta en el evento El usuario pulsa un botn, presiona Return mientras teclea en un campo de texto, o elige un tem de men. El usuario elige un frame (ventana principal). El usuario pulsa un botn del ratn mientras el cursor est sobre un componente. El usuario mueve el cursor sobre un componente. El componente se hace visible. El componente obtiene el foco del teclado. Cambia la tabla o la seleccin de una lista. Tipo de oyente ActionListener WindowListener MouseListener MouseMotionListener ComponentListener FocusListener ListSelectionListener

33 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

KeyListener

Cada evento est representado por un objeto que ofrece informacin sobre el evento e identifica la fuente. Las fuentes de los eventos normalmente son componentes, pero otros tipos de objetos tambin pueden ser fuente de eventos.

Todo manejador de eventos requiere tres partes de cdigo. 1. Donde se declare la clase del manejador de eventos, el cdigo especifica que la clase o implementa una interface de oyente, o desciende una clase que implementa una interface de oyente. Por ejemplo:
public class MyClass implements ActionListener {

2. El cdigo que registra un ejemplar de la clase de manejo de eventos de un oyente sobre uno o ms componentes. Por ejemplo:
someComponent.addActionListener(instanceOfMyClass);

3. La implementacin de los mtodos de la interface oyente. Por ejemplo:


public void actionPerformed(ActionEvent e) { ...//cdigo para responder a la accin }

34 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

3.1. Hilo de despacho de eventos (Event-dispatching thread)


Todos los eventos se procesan por los oyentes que los reciben dentro del hilo de despacho de eventos (una instancia de java.awt.EventDispatchThread). Todo el dibujo y posicionamiento de componentes debera llevarse a cabo en este hilo. El hilo de despacho de eventos es de vital importancia en Swing y AWT, y juega un papel principal manteniendo actualizado el estado y la visualizacin de un componente en una aplicacin bajo control. Asociada con este hilo hay una cola FIFO (primero que entr - primero que sale) de eventos -- la cola de eventos del sistema (una instancia de java.awt.EventQueue). Esta cola se rellena, como cualquier cola FIFO, en serie. Cada peticin toma su turno para ejecutar el cdigo de manejo de eventos, que puede ser para actualizar las propiedades, el posicionamiento o el repintado de un componente. Todos los eventos se procesan en serie para evitar situaciones tales como modificar el estado de un componente en mitad de un repintado. Tenemos que estar seguros de que el cdigo de manejo de eventos se puede ejecutar rpidamente. En otro caso toda la cola de eventos del sistema se bloqueara esperando a que terminase el proceso de un evento, el repintado, o el posicionamiento, y nuestra aplicacin parecera bloqueada o congelada.

3.2. Oyente de Action


Cuando un usuario pulsa un button, elige un menu tem o pulsa Return en un text field, ocurre un evento actio. El resultado es que se enva un mensaje actionPerformed a todos los oyentes de action que estn registrados con un componente en particular. Si tenemos dos o ms componentes que realizan la misma funcion, podemos considerar la utilizacin de un objeto Action para implementar la funcin. Un objeto Action es un ActionListener que no slo proporciona manejo de eventos, sino que tambin centraliza el manejo de texto, iconos, y estados de enable de tool bar, buttons, o itms de menu. El interface ActionListener contiene un slo mtodo, y no tiene la correspondiente clase adaptadora.
void actionPerformed(ActionEvent)

35 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

Actividad: Crear un ActionListener que permita salir de la aplicacin. Esta Action ser compartida tanto por el botn Salir y la opcin del mismo nombre del men Archivo. --------------------Hasta aqu----------------------------------------

3.3. Entrada de teclado, KeyStrokes, y Actions


2.13.1 Escuchando la entrad de teclado Se lanzan KeyEvents por un componente siempre que el componente tiene el foco y el usuario pulsa una tecla. Para escuchar estos eventos en un componente particular podemos aadir KeyListeners usando el mtodos addKeyListener(). KeyEvent desciende de InputEvent y, al contrario que la mayora de los eventos, los KeyEvents se despachan antes de que la operacin correspondiente tome parte (p.e. en un cuadro de texto la operacin podra ser aadir un carcter especfico al contenido del documento). Podemos consumir estos eventos usando el mtodo consume() antes de que se manejen ms adelante por asociaciones de teclas u otros oyentes. (ms adelante veremos exactamente como tener notificacin de la entrada de teclado, y en que orden ocurre sta). Hay tres tipos de eventos KeyEvent, cada uno de los cuales ocurre por lo menos una vez cada activacin de teclado (p.e. pulsar y soltar una tecla del teclado):
KEY_PRESSED: este tipo de evento de tecla se genera cuando una tecla del

teclado se pulsa. La tecla que se ha pulsado queda especificada por la propiedad keyCode y un cdigo virtual de la tecla se puede obtener con el mtodo getKeyCode() de KeyEvent. Un cdigo virtual de tecla se usa para informar de la tecla exacta del teclado que ha causado el evento, tal como KeyEvent.VK_ENTER. KeyEvent define numerosas constantes estticas de tipo int, que empiezan con el prefijo VK, que significa Virtual Key (tecla virtual) (ver los documentos del API de KeyEvent para una lista completa). Por ejemplo, si se pulsa CTRL-C, se lanzarn dos eventos KEY_PRESSED. El int devuelto por getKeyCode() correspondiente a pulsar CTRL ser un KeyEvent.VK_CTRL. Igualmente, el int devuelto por getKeyCode() correspondiente a pulsar la tecla C ser un KeyEvent.VK_C. (Observe que el orden en el que se lanzan depende del orden en el que se pulsan.) KeyEvent tambin tiene un propiedad keyChar que especifica la representacin Unicode del carcter pulsado (si no hay representacin Unicode se usa KeyEvent.CHAR_UNDEFINED--p.e. las teclas de funcin de un teclado normal de PC). Podemos

36 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

obtener el carcter keyChar correspondiente a un KeyEvent usando el mtodo getKeyChar(). Por ejemplo, el carcter devuelto por getKeyChar() correspondiente a pulsar la tecla C ser c. Si estaba pulsado SHIFT cuando se puls la tecla C, el carcter devuelto por getKeyChar() correspondiente a la tecla C ser C. (Observe que se devuelven distintos keyChars para maysculas y minsculas, a pesar de que se usa el mismo keyCode en ambas situaciones--p.e. el valor VK_C se ser devuelto por getKeyCode() es pulsada o no la tecla SHIFT cuando se pulsa la tecla C. Observe tambin que no hay keyChar asociado con teclas como CTRL, y getKeyChar() devolver simplemente en este caso.) KEY_RELEASED: este tipo de evento de teclado se genera cuando se suelta una tecla. Salvo por esta diferencia, los eventos KEY_RELEASED son idnticos a los eventos KEY_PRESSED (aunque, como veremos ms adelante, ocurren mucho menos a menudo). KEY_TYPED: este tipo de eventos se lanzan en algn momento entre un evento KEY_PRESSED y un evento KEY_RELEASED. Nunca contiene una propiedad keyCode correspondiente a la tecla pulsada, y se devolver 0 siempre que se llame a getKeyCode() en un evento de este tipo. Observe que para teclas sin representacin Unicode (como RE PAG, PRINT SCREEN, etc.), no se lanzar el evento KEY_TYPED. La mayora de las teclas con representacin Unicode, cuando se mantienen pulsadas durante un rato, generarn repetidos KEY_PRESSED y KEY_TYPED (en este orden). El conjunto de teclas que muestran este comportamiento, y el porcentaje en que lo hacen, no se puede controlar y depende de la plataforma. Cada KeyEvent mantiene un conjunto de modificadores que especifica el estado de las teclas SHIFT, CTRL, ALT, y META. Este es un valor de tipo int que es el resultado de un or binario entre InputEvent.SHIFT_MASK, InputEvent.CTRL_MASK, InputEvent.ALT_MASK, y InputEvent.META_MASK (dependiendo de que teclas estn pulsadas en el momento del evento). Podemos obtener este valor con getModifiers(), y podemos comprobar especficamente cual de estas teclas estaba pulsada en el momento en que se lanz evento usando isShiftDown(), isControlDown(), isAltDown(), y isMetaDown(). KeyEvent tambin contiene la propiedad booleana actionKey que especifica si la tecla que lo ha lanzado corresponde a una accin que debera ejecutar la aplicacin (true) o si son datos que se usan normalmente para cosas como la adicin de contenido a un componente de texto (false). Podemos usar el mtodo isActionKey() de KeyEvent para obtener el valor de esta propiedad.

2.13.2 KeyStrokes
El uso de KeyListeners para manejar la entrada de teclado componente por componente era necesario antes de Java 2. A causa de esto, una significativa, y a menudo tediosa, cantidad de tiempo se gastaba planificando y depurando operaciones de teclado. El equipo de Swing se percat de esto, e incluy la funcionalidad de interceptar eventos de teclado sin tener en cuenta el componente que tenga el foco. Esta funcionalidad est implementada usando asociaciones de instancias de la clase javax.swing.KeyStroke con ActionListeners (normalmente instancias de
javax.swing.Action).

3.4. Modelo de datos


Hacer un modelo para el JtextField.

37 de 38

DESARROLLO DE APLICACIONES INTERACTIVAS EN JAVA (Julio 2002) Universidad Carlos III de Madrid Tema IV. Elementos de una interfaz grfica

Actividad: Se puede crear una clase que extienda de JTextField y que slo acepte formato numrico.

3.5. AWT vs Swing 3.6. Adaptadores 3.7. JButton 3.8. JCheckBox

4. Direcciones Web
Pgina principal de JFC: http://java.sun.com/products/jfc/ Guas de diseo JAVA Look and Feel http://java.sun.com/products/jlf/ed1/dg/index.htm Repositorio de grficos Java Look and Feel http://developer.java.sun.com/developer/techDocs/hi/repository/ Tutorial de Swing en espaol http://programacion.com/java/swing/

38 de 38