Académique Documents
Professionnel Documents
Culture Documents
TIPOS DE EVENTOS
Los eventos se catalogan por su naturaleza, que se indicar en el miembro id de su
estructura.
Los grandes grupos de eventos son:
Eventos de Ventana
Son los que se generan en respuesta a los cambios de una ventana un frame o un
dialogo.
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() {
}
public boolean keyDown( Event evt,int x ) {
lista.addItem( "Evento keyDown,carcter "+(char)x );
return true;
}
public void getFocus() {
lista.addItem( "Evento getFocus" );
}
public void gotFocus() {
lista.addItem( "Evento gotFocus" );
}
public void lostFocus() {
lista.addItem( "Evento lostFocus" );
}
}
TIPOS DE EVENTOS
http://proton.ucting.udg.mx/tutorial/java/Cap4/tipoev.html#EventoVentana
ACTION_EVENT
Algunos de los eventos que ms frecuentemente tendremos que controlar son los
siguientes:
ACTION_EVENT
MOUSE_DOWN
KEY_PRESS
WINDOW_DESTROY
En la documentacin de la clase Event se encuentra toda la lista de eventos que
cualquier aplicacin puede necesitar manejar y su documentacin; como ejemplo de
uso vamos a detenernos en el primero de ellos, ACTION_EVENT.
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:
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;
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;
}
}
Cuando el usuario teclea un retorno de carro en un campo de texto, se genera un
evento TextField, que al igual que con los otros Componentes del AWT podemos
capturar con el mtodo action(), tal como se demuestra en el ejemplo.
CAMPOS DE TEXTO
http://proton.ucting.udg.mx/tutorial/java/Cap4/ctexto.html
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.
No obstante, y volviendo al diseo de interfaces, no debe abusarse de este tipo de
mens, porque pueden crear mucha ms confusin al usuario. Siempre se debe tener
en mente que los usuarios tienen que navegar habitualmente por una gran cantidad de
mens en las ms diversas aplicaciones, por lo que no debemos esconderles
demasiado las opciones que les pueden interesar.
CREAR MENUS Y BARRAS DE MENUS
http://proton.ucting.udg.mx/tutorial/java/Cap4/menus.html