WINDOW_DESTROY
WINDOW_EXPOSE
WINDOW_ICONIFY
WINDOW_DEICONIFY
WINDOW_MOVED
Eventos de Teclado
Son generados en respuesta a cuando el usuario pulsa y suelta una tecla mientras un
Componente tiene el foco de entrada.
KEY_PRESS
KEY_RELEASE
KEY_ACTION
KEY_ACTION_RELEASE
Eventos de Ratn
Son los eventos generados por acciones sobre el ratn dentro de los lmites de un
Componente.
MOUSE_DOWN
MOUSE_UP
MOUSE_MOVE
MOUSE_ENTER
MOUSE_EXIT
MOUSE_DRAG
Eventos de Barras
Son los eventos generados como respuesta a la manipulacin de barras de
desplazamiento (scrollbars).
SCROLL_LINE_UP
SCROLL_LINE_DOWN
SCROLL_PAGE_UP
SCROLL_PAGE_DOWN
SCROLL_ABSOLUTE
Eventos de Lista
Son los eventos generados al seleccionar elementos de una lista.
LIST_SELECT
LIST_DESELECT
Eventos Varios
Son los eventos generados en funcin de diversas acciones.
ACTION_EVENT
LOAD_FILE
SAVE_FILE
GOT_FOCUS
LOST_FOCUS
El applet EventosPrnt.java est diseado para observar los eventos que se producen
sobre l. Cada vez que se genera un evento, el applet responde imprimiendo el evento
que ha capturado en la lnea de comandos desde donde se ha lanzado el applet.
Una vez que se haya compilado el cdigo y cargado el applet en el appletviewer o en
un navegador con soporte Java, jugar un poco con el applet. Mover el cursor dentro del
applet, picar con el ratn, picar y arrastrar, teclear algo, cambiar el tamao de la
ventana y taparla y destaparla con otra. Las acciones anteriores harn que en la
ventana en donde se haya lanzado el appletviewer, o en la consola Java en caso de
Netscape, vayan apareciendo los textos que indican los eventos que est recibiendo el
applet.
Lo cierto es que el uso de System.out.println() en un applet es algo que no debera
utilizarse, e incluso puede llegar a no funcionar en algunos sistemas, pero tena la
ventaja de ser la forma ms fcil de ver los eventos. No obstante, vamos a reescribir el
cdigo del applet utilizando una Lista.
Una Lista es una lista de cadenas o Strings definidas en java.awt.List. Crearemos una
lista de 25 lneas y no permitiremos seleccin mltiple, que son los dos parmetros que
necesita el constructor del objeto List. El cdigo EventosList.java que se muestra a
continuacin corresponde al anterior ejemplo un poco modificado.
import java.awt.*;
import java.applet.Applet;
public class EventosList extends Applet {
List lista;
public void init() {
lista = new List( 25,false );
add( lista );
lista.addItem( "Evento init" );
}
public void start() {
lista.addItem( "Evento start" );
}
public void destroy() {
lista.addItem( "Evento destroy" );
}
public void paint( Graphics g ) {
lista.addItem( "Evento paint" );
}
public void update( Graphics g ) {
}
TIPOS DE EVENTOS
http://proton.ucting.udg.mx/tutorial/java/Cap4/tipoev.html#EventoVentana
COMPONENTES
Component es una clase abstracta que representa todo lo que tiene una posicin, un
tamao, puede ser pintado en pantalla y puede recibir eventos.
Los Objetos derivados de la clase Component que se incluyen en el Abstract Window
Toolkit son los que aparecen a continuacin:
Button
Canvas
Checkbox
Choice
Container
Panel
Window
o Dialog
o Frame
Label
List
Scrollbar
TextComponent
TextArea
TextField
Vamos a ver un poco ms en detalle los Componentes que nos proporciona el AWT
para incorporar a la creacin de la interface con el usuario.
METODOS DE CONTROL DE EVENTOS
El mtodo handleEvent() es un lugar para que el programador pueda insertar cdigo
para controlar los eventos. A veces, sin embargo, un Componente solamente estar
interesado en eventos de un cierto tipo (por ejemplo, eventos del ratn). En estos
casos, el programador puede colocar el cdigo en un mtodo de ayuda, en lugar de
colocarlo en el mtodo handleEvent().
No hay mtodos de ayuda para ciertos tipos de eventos, aqu est la lista de los que
estn disponibles para los programadores:
action( Event evt,Object obj )
gotFocus( Event evt,Object obj )
lostFocus( Event evt,Object obj )
mouseEnter( Event evt,int x,int y )
mouseExit( Event evt,int x,int y )
mouseMove( Event evt,int x,int y )
Como ejemplo del manejo de eventos vamos a ver este evento que se provoca al pulsar
un botn, seleccionar un men, etc. Para su control podemos manejarlo en el mtodo
handleEvent() o en el mtodo action().
Los dos mtodos anteriores pertenecen a la clase Component por lo que todas las
clases derivadas de sta contendrn estos dos mtodos y se pueden sobrecargar para
que se ajuste su funcionamiento a lo que requiere nuestra aplicacin.
Veamos el siguiente ejemplo, en que se controla este evento a travs del mtodo
handleEvent(), que es el mtodo general de manejo de eventos:
public boolean handleEvent( Event evt ) {
switch( evt.id ) {
case Event.ACTION_EVENT:
// evt.arg contiene la etiqueta del botn pulsado
// o el item del men que se ha seleccionado
if( ( "Pulsado "+n+" veces" ).equals( evt.arg ) )
return( true );
default:
return( false );
}
}
Pero en este caso, cuando se produce este evento se llama al mtodo action(), que
sera:
public boolean action( Event evt,Object arg ) {
if( ( "Pulsado "+n+" veces" ).equals( arg ) )
return( true );
return( false );
}
Como se puede comprobar, incluso si las etiquetas cambian se puede recibir el evento.
Los ejemplos anteriores corresponden al control de un evento producido por un botn
que cambia su etiqueta cada vez que se pulsa. Aunque esta no es la nica forma de
manejar eventos; de hecho se puede hacer:
if( evt.target == miBoton )
en donde se comparan objetos en lugar de etiquetas.
ACTION_EVENT
http://proton.ucting.udg.mx/tutorial/java/Cap4/awt.html
GENERACION Y PROPAGACION DE EVENTOS
Tomemos el applet, EventosPro.java, que aparece en la figura siguiente. Consta de dos
instancias de la clase Button, embebidas dentro de una instancia de la clase Panel.
Esta instancia est a su vez embebida dentro de otra instancia de la clase Panel. Esta
ltima instancia de la clase Panel est situada junto a una instancia de la clase
TextArea, y ambas estn embebidas dentro de una instancia de la clase Applet.
Cuando un usuario interacta con el applet, el sistema Java crea una instancia de la
clase Event y rellena sus datos miembro con la informacin necesaria para describir la
accin. Es en ese momento cuando el sistema Java permite al applet controlar el
evento. Este control comienza por el Componente que recibe inicialmente el evento (por
ejemplo, el botn que ha sido pulsado) y se desplaza hacia arriba en el rbol de
Componentes, componente a componente, hasta que alcanza al Contenedor de la raz
del rbol. Durante este camino, cada Componente tiene oportunidad de ignorar el
evento o reaccionar ante l en una (o ms) de las formas siguientes:
Modificar los datos miembros de la instancia de Event
Entrar en accin y realizar clculos basados en la informacin contenida en el evento
Indicar al sistema Java que el evento no debera propagarse ms arriba en el rbol
El sistema Java pasa informacin del evento a un Componente a travs del mtodo
handleEvent() del Componente. Todos los mtodos handleEvent() deben ser de la
forma:
public boolean handleEvent( Event evt )
Un controlador de eventos solamente necesita una informacin: una referencia a la
instancia de la clase Event que contiene la informacin del evento que se ha producido.
El valor devuelto por el mtodo handleEvent() es importante. Indica al sistema Java si el
evento ha sido o no completamente controlado por el controlador. Un valor true indica
que el evento ha sido controlado y que su propagacin debe detenerse. Un valor false
indica que el evento ha sido ignorado, o que no ha sido controlado en su totalidad y
debe continuar su propagacin hacia arriba en el rbol de Componentes.
Veamos la descripcin de una accin con el applet de la figura anterior. El usuario pulsa
el botn "Uno". El sistema run-time del lenguaje Java capturar la informacin sobre el
evento (el nmero de clicks, la localizacin del click, la hora en que se ha producido la
pulsacin y el Componente que ha recibido el click) y empaqueta todos esos datos en
una instancia de la clase Event. El sistema Java comienza entonces por el Componente
que ha sido pulsado (en este caso, el botn "Uno") y, a travs de una llamada al mtodo
handleEvent() del Componente, ofrece a ste la posibilidad de reaccionar ante el
evento. Si el Componente no controla el evento, o no lo hace completamente (indicado
por un valor de retorno false), el sistema Java presentar la instancia de Event al
siguiente Componente por encima en el rbol (en este caso, una instancia de la clase
Panel). El sistema Java contina de este mismo modo hasta que el evento es
controlado en su totalidad o ya no hay Componentes a los que informar. En la figura
siguiente mostramos el camino recorrido por el evento en su intento de que algn
Componente lo controle.
Cada Componente del applet aade una lnea al objeto TextArea indicando que ha
recibido un evento. Luego permite que el evento se propague al siguiente Componente.
El cdigo del controlador de eventos usado en el ejemplo es el que muestran las
siguientes lneas:
BOTONES
Veremos ejemplos de cmo se aaden botones a un panel para la interaccin del
usuario con la aplicacin, pero antes vamos a ver la creacin de botones como objetos.
Se pueden crear objetos Button con el operador new:
Button boton;
boton = new Button( "Botn");
La cadena utilizada en la creacin del botn aparecer en el botn cuando se visualice
en pantalla. Esta cadena tambin se devolver para utilizarla como identificacin del
botn cuando ocurra un evento.
Eventos Button
Cada vez que el usuario pulsa un botn, se produce un evento, de la misma forma que
se produce un evento cuando se aprieta el botn del ratn. Los eventos de pulsacin de
un botn se pueden capturar sobrecargando el mtodo action():
public boolean action( Event evt,Object obj ) {
if( evt.target instanceof Button )
System.out.println( (String)obj );
else
System.out.println( "Evento No-Button" );
}
La distincin entre todos los botones existentes se puede hacer utilizando el objeto
destino pasado por el objeto Event y comparndolo con los objetos botn que hemos
dispuestos en nuestro interface:
import java.awt.*;
import java.applet.Applet;
public class Botones extends Applet {
Button b1,b2,b3;
public void init() {
b1 = new Button( "Botn B1" );
b2 = new Button( "Botn B2" );
b3 = new Button( "Botn B3" );
this.add( b1 );
this.add( b2 );
this.add( b3 );
}
Los botones de comprobacin se pueden agrupar para formar una interfaz de botn de
radio (CheckboxGroup), que son agrupaciones de botones Checkbox en las que
siempre hay un nico botn activo.
Boton Radio
import java.awt.*;
import java.applet.Applet;
public class BotonRadio extends Applet {
CheckboxGroup Radio;
public void init() {
Radio = new CheckboxGroup();
add( new Checkbox( "Primero",Radio,true) );
add( new Checkbox( "Segundo",Radio,false) );
add( new Checkbox( "Tercero",Radio,false) );
}
}
En el ejemplo anterior, BotonRadio.java, observamos que siempre hay un botn activo
entre los que conforman el interfaz de comprobacin que se ha implementado.
Botones Autocontenidos
La naturaleza orientada a objetos de Java nos da la posibilidad de crear botones
completamente autocontenidos. En este tipo de botn, se construye el manejador de
eventos dentro de la propia clase extendida de botn. Se pueden aadir estos botones
a la aplicacin, sin tener que preocuparse de los eventos que pudieran generar.
En el ejemplo siguiente, BotonAuto.java, creamos el botn que muestra la figura, un
botn que genera el texto "Boton Aceptar" por la salida estndar:
Boton Autocontenido
import java.awt.*;
import java.applet.Applet;
class BotonAceptar extends Button {
public BotonAceptar() {
setLabel( "Aceptar" );
}
public boolean action( Event evt,Object obj ) {
System.out.println( "Boton Aceptar" );
return true;
}
}
}
return true;
}
}
En este caso de la seleccin mltiple en una lista, utilizamos un evento externo para
disparar las acciones asociadas a la lista. En el ejemplo, hemos incluido un botn para
generar el evento que hace que el applet recoja los elementos que hay seleccionados
en la lista.
BARRAS DE DESPLAZAMIENTO
En determinados applets que necesiten realizar el ajuste de valores lineales en pantalla,
resulta til el uso de barras de desplazamiento (Scrollbar). Las barras de
desplazamiento proporcionan una forma de trabajar con rangos de valores o de reas
como el Componente TextArea, que proporciona dos barras de desplazamiento
automticamente.
Si queremos implementar un selector de color, como en el applet Slider.java, podemos
utilizar una barra de desplazamiento para cada uno de los colores primarios.
Barras de desplazamiento
import java.awt.*;
import java.applet.Applet;
public class Slider extends Applet {
Scrollbar rojo,verde,azul;
public void init() {
rojo = new Scrollbar( Scrollbar.VERTICAL,0,1,0,255 );
verde = new Scrollbar( Scrollbar.VERTICAL,0,1,0,255 );
azul = new Scrollbar( Scrollbar.VERTICAL,0,1,0,255 );
add( rojo );
add( verde );
add( azul );
}
}
Este tipo de interfaz proporciona al usuario un punto de referencia visual de un rango y
al mismo tiempo la forma de cambiar los valores. Por ello, las barras de desplazamiento
son Componentes un poco ms complejos que los dems, reflejndose esta
complejidad en sus constructores. Al crearlos hay que indicar su orientacin, su valor
inicial, los valores mnimo y mximo que puede alcanzar y el porcentaje de rango que
estar visible.
Tambin podramos utilizar una barra de desplazamiento para un rango de valores de
color, tal como se muestra en el ejemplo Ranger.java.
Barras de rango
import java.awt.*;
import java.applet.Applet;
public class Ranger extends Applet {
Scrollbar rango;
public void init() {
rango = new Scrollbar( Scrollbar.HORIZONTAL,0,64,0,255 );
add( rango );
}
}
Como se puede ver, el ancho de la barra es mayor, en relacin al Scrollbar. En este
caso, maxValue representa el valor mximo para el lado izquierdo de la barra. Si se
quieren representar 64 colores simultneamente, es decir [0-63] a [192-255], maxValue
debera ser 192.
Igual que otros Componentes, las barras de desplazamiento generan eventos; pero al
contrario que en el resto, se tiene que utilizar el mtodo handleEvent() directamente, en
lugar del mtodo action(). El destino del evento ser un objeto de la clase Scrollbar, a
partir de ste se obtiene la posicin de la barra de desplazamiento.
Como se habr podido observar en los applets anteriores, las barras de desplazamiento
no disponen de un display o zona donde se muestren directamente los valores
asociados a los desplazamientos. Al contrario, si se desea eso, es necesario aadir
explcitamente una caja de texto, tal como se muestra en el ejemplo RangoRojo.java.
Rango de Color
import java.awt.*;
import java.applet.Applet;
public class RangoRojo extends Applet {
Scrollbar rango;
TextField valor;
Label etiqueta;
public void init() {
rango = new Scrollbar( Scrollbar.HORIZONTAL,0,1,0,255 );
valor = new TextField( "0",5 );
etiqueta = new Label( "Rojo (0-255)" );
setLayout( new GridLayout( 1,3 ) );
valor.setEditable( false );
add( etiqueta );
add( rango );
add( valor );
}
getToolkit()
getWarningString()
pack()
toBack()
toFront()
Un Dilogo es una subclase de Window, que puede tener un borde y ser modal, es
decir, no permite hacer nada al usuario hasta que responda al dilogo. Esto es lo que
se usa en las cajas de dilogo "Acerca de...", en la seleccin en listas, cuando se pide
una entrada numrica, etc.
El cdigo Java que se expone a continuacin, implementa el dilogo Acerca de para la
aplicacin. Esta clase se crea oculta y necesitaremos llamar al mtodo show() de la
propia clase para hacerla visible.
class AboutDialog extends Dialog {
static int HOR_TAMANO = 300;
Label texto;
Label mas_texto;
public BarraEstado() {
setLayout( new FlowLayout() );
add( texto = new Label( "Creada la barra de estado" ) );
add( mas_texto = new Label( "Informacin adicional" ) );
}
public void verEstado( String informacion ) {
texto.setText( informacion );
}
}
Ahora, para dar funcionalidad, debemos crear los objetos correspondientes a la barra
de herramientas y a la barra de estado con new; al contrario que en C++, en Java todos
los objetos deben ser creados con el operador new:
add( "North",tb = new ToolBar() );
add( "South",sb = new StatusBar() );
Tambin vamos a incorporar un nuevo evento a nuestro controlador, para que maneje
los eventos de tipo ACTION_EVENT que le llegarn cuando se pulsen los botones de la
barra de herramientas o se realice alguna seleccin, etc.
case Event.ACTION_EVENT:
{
be.verEstado( evt.arg.toString() );
return true;
}
Cuando la aplicacin reciba este tipo de evento, alterar el contenido de la barra de
estado para mostrar la informacin de la seleccin realizada o el botn pulsado.
PANELES
http://proton.ucting.udg.mx/tutorial/java/Cap4/panel.html
AREAS DE TEXTO
Java, a travs del AWT, permite incorporar texto multilnea dentro de zonas de texto
(TextArea). Los objetos TextArea se utilizan para elementos de texto que ocupan ms
de una lnea, como puede ser la presentacin tanto de texto editable como de slo
lectura.
Para crear una rea de texto se pueden utilizar cuatro formas anlogas a las que se
han descrito en la creacin de Campos de Texto. Pero adems, para las reas de texto
hay que especificar el nmero de columnas.
Se puede permitir que el usuario edite el texto con el mtodo setEditable() de la misma
forma que se haca en el TextField. En la figura aparece la representacin del applet
AreaTexto.java, que presenta dos reas de texto, una vaca y editable y otra con un
texto predefinido y no editable.
Areas de texto
import java.awt.*;
import java.applet.Applet;
public class AreaTexto extends Applet {
TextArea t1,t2;
public void init() {
Button boton = new Button( "Aceptar" );
t1 = new TextArea();
t2 = new TextArea( "Tutorial de Java",5,40 );
t2.setEditable( false );
add( t1 );
add( t2 );
add( boton );
}
public boolean action( Event evt,Object obj ) {
if( evt.target instanceof Button )
{
if( "Aceptar".equals( obj ) )
{
String texto = t1.getText();
System.out.println( texto );
}
}
return true;
}
}
Para acceder al texto actual de una zona de texto se utiliza el mtodo getText(), tal
como muestra el cdigo anterior. Las reas de texto no generan eventos por s solas,
por lo que hay que utilizar eventos externos, para saber cuando tenemos que acceder a
la informacin contenida en el TextArea. En este caso hemos utilizado un botn que
generar un evento al pulsarlo que har que se recoja el texto que haya escrito en el
rea de texto que constituye el applet.
AREAS DE TEXTO
http://proton.ucting.udg.mx/tutorial/java/Cap4/atexto.html
CAMPOS DE TEXTO
Para la entrada directa de datos se suelen utilizar los campos de texto, que aparecen
en pantalla como pequeas cajas que permiten al usuario la entrada por teclado.
Los campos de texto (TextField) se pueden crear vacos, vacos con una longitud
determinada, rellenos con texto predefinido y rellenos con texto predefinido y una
longitud determinada. El applet siguiente, CampoTexto.java, genera cuatro campos de
texto con cada una de las caractersticas anteriores. La imagen muestra los distintos
tipos de campos.
Campos de texto
import java.awt.*;
import java.applet.Applet;
public class CampoTexto extends Applet {
TextField tf1,tf2,tf3,tf4;
public void init() {
// Campo de texto vaco
tf1 = new TextField();
// Campo de texto vaco con 20 columnas
tf2 = new TextField( 20 );
// Texto predefinido
tf3 = new TextField( "Hola" );
// Texto predefinido en 30 columnas
tf4 = new TextField( "Hola",30 );
add( tf1 );
add( tf2 );
add( tf3 );
add( tf4 );
}
public boolean action( Event evt,Object obj ) {
if( evt.target instanceof TextField )
{
if( evt.target.equals( tf1 ) )
System.out.println( "Campo de Texto 1: " +
evt.arg.toString() );
if( evt.target.equals( tf1 ) )
System.out.println( "Campo de Texto 2: " +
evt.arg.toString() );
if( evt.target.equals( tf1 ) )
System.out.println( "Campo de Texto 3: " +
evt.arg.toString() );
if( evt.target.equals( tf1 ) )
System.out.println( "Campo de Texto 4: " +
evt.arg.toString() );
}
return true;
}
}
mbarra.add( m );
setMenuBar( mbarra );
}
El men que crea esta funcin tendr la apariencia que muestra la figura siguiente:
Menu de la aplicacion
Los eventos generados por las opciones de un men se manejan del mismo modo que
los Botones, Listas, etc. En el caso de mens, es el evento ACTION_EVENT de la clase
java.awt.MenuItem el que se genera y en evt.target se nos indica la opcin
seleccionada.
case Event.ACTION_EVENT:
{
if( evt.target instanceof MenuItem )
{
if( "Nuevo".equals( evt.arg ) )
AplicacionAWT aAwt = new AplicacionAWT();;
if( "Abrir".equals( evt.arg ) )
System.out.println( "Opcion -Abrir-" );
if( "Guardar".equals( evt.arg ) )
System.out.println( "Opcion -Guardar-" );
if( "Guardar como".equals( evt.arg ) )
System.out.println( "Opcion -Guardar como-" );
if( "Imprimir".equals( evt.arg ) )
System.out.println( "Opcion -Imprimir-" );
if( "Salir".equals( evt.arg ) )
System.exit( 0 );
if( "Ayuda!".equals( evt.arg ) )
System.out.println( "No hay ayuda" );
if( "Acerca de".equals( evt.arg ) )
System.out.println( "Opcion -Acerca de-" );
}
}
En el cdigo anterior hemos tratado los eventos del men. Para ms seguridad, aunque
no sea estrictamente necesario, lo primero que hacemos es asegurarnos de que el
objeto evt.target es realmente un objeto MenuItem, es decir, procede de la barra de
mens; y despus comprobamos la opcin que se ha seleccionado.
Como todo, tambin se puede rizar el rizo y conseguir reproducir los sistemas de
mens que estamos acostumbrados a ver en las aplicaciones que manejamos
habitualmente. Un ejemplo de ello son los mens en cascada, semejantes al que
muestra la figura y que ha sido generado mediante la aplicacin Cascada.java.
Menu en cascada
Bsicamente se utiliza la tcnica ya descrita, pero en vez de crear un nuevo MenuItem
se crea un nuevo Menu, lo que origina el men en cascada.
1.
2.
3.
4.
5.
6.
7.
8.
9.
Introduccin al AWT
Interface de Usuario
Estructura del AWT
Componentes y Contenedores
o Tipos de Componentes
Componentes
o Botones
1. Eventos Button
2. De pulsacin (Push)
3. De lista (Choice)
4. De marcacin (CheckBox)
5. De seleccin (Radio)
6. Autocontenidos
o Etiquetas
o Listas
o Campos de Texto
o Areas de Texto
o Canvas
o Barras de Desplazamiento
o Diseo de Componentes propios
Creacin de Aplicaciones con AWT
o Crear el Marco de la Aplicacin
o Inicializar Fuentes, Colores y Recursos
o Crear Mens y Barras de Mens
o Dilogos y Ventanas
Paneles
Layouts
o FlowLayout
o BorderLayout
o GridLayout
o GridBagLayout
o CardLayout
o Crear un Layout propio
Control de Eventos
o La clase Event
o Tipos de Eventos
1. Eventos de Ventana
2. Eventos de Teclado
3. Eventos de Ratn
4. Eventos de Barras
5. Eventos de Lista
6. Eventos Varios
o Generacin y Propagacin de Eventos
o Mtodos de Control de Eventos
o ACTION_EVENT
10. Mejorar el Diseo de Interfaces
o Cambio de Font de Caracteres
o Colores de Fondo y Texto
o Fijar el Tamao Preferido
o Uso de Insets
o Habilitar y Deshabilitar Componentes
o Botn Grfico
http://proton.ucting.udg.mx/tutorial/java/Cap4/awt.html