Swing y JFC (Java Foundation Classes)

Los eventos Key informan de cu�ndo el usuario ha tecleado algo en el teclado. Espec�fiamente, los evento key son generados por el componente que tiene el foco del teclado cuando el usuario pulsa o libera las teclas del teclado. (Para m�s informaci�n sobre el foco del teclado, puedes ver la p�gina C�mo escribir un Oyente de Focus.)

Se pueden notificar dos tipos b�sicos de eventos key: la pulsaci�n de un caracter Unicode, y la pulsaci�n o liberaci�n de una tecla del teclado. El primer tipo de llama evento key-typed, y el segundo son eventos key-pressed y key-released.

En general, s�lo deber�amos manejar los eventos key-typed a menos que necesitemos saber cuando el usuario ha pulsado teclas que no corresponden con caracteres. Por ejmplo, si queremos saber cuando el usario teclea alg�n caracter Unicode -- siempre como resultado de una pulsaci�n de tecla como 'a' de la pulsaci�n de una secuencia de teclas -- dber�amos manejar eventos key-typed. Por otro lado, si queremos saber cuando el usuario ha pulsado la tecla F1, necesitaremos manejer eventos key-pressed.

Nota: Para generar eventos de teclado, un componente debe tener el foco del teclado.

Para hacer que un componente obtenga el foco del teclado debemos seguir estos pasos.

  1. Asegurarnos de que el componente puede obtener el foco del teclado. Por ejemplo, en algunos sistemas las etiquetas no pueden obtenerlo.
  2. Asegurarnos de que el componente pide el foco en el momento apropiado. Para componentes personalizados, probablemente necesitaremos implementar un MouseListener que llame al m�todo requestFocus cuandos e pulsa el rat�n.
  3. Si estamos escribiendo un componente personalizado, implementaremos el m�todo isFocusTraversable del componente, para que devuelva true cuando el componente est� activado. esto permie al usuario usar Tab para ir a nuestro componente.

.�M�todos de Evento Key

El interface KeyListener y su correspondiente clase adaptador, KeyAdapter, contienen tres m�todos.

void keyTyped(KeyEvent)
Se le llama despu�s de que el usuario teclee un caracter Unicode dentro del componente escuchado.
void keyPressed(KeyEvent)
Se le llama despu�s de que el usario pulse una tecla mientras el componente escuchado tiene el foco.
void keyReleased(KeyEvent)
Se le llama despu�s de que el usario libere una tecla mientras el componente escuchado tiene el foco.

.�Ejemplos de manejo de Eventos Key

El siguiente applet demuestra los eventos key. Consiste en un campo de texto en el que podemos teclear informaci�n, seguido de un �rea de texto que muestra un mensaje cada vez que el campo de texto dispara un evento key. Un bot�n en la parte inferior del applet nos permite borrar ranto el campo como el �rea de texto.

Esta es una imagen del GUI del applet. Para ejecutarlo, pulsa sobre ella. El applet aparecer� en una nueva ventana de tu navegador..

Prueba esto:
  1. Pulsa sobre el campo de texto del applet para que obtenga el foco.
  2. Teclea una 'a' min�scula pulsando y liberando la tecla A del teclado.

    El campo de texto dispara tres eventos: un key-pressed, un key-typed, y un key-released. Observa que el evento key-typed no tiene informaci�n sobre el c�digo de la tecla; los eventos key-typed tampoco tienen informaci�n sobre los modificadores.

  3. Pulsa el bot�n Clear.

    Deberias hacer esto despu�s de cada uno de los pasos siguientes.

  4. Pulsa y libera la tecla Shift.

    El campo de texto dispara dos eventos: un key pressed y un key released. El campo de texto no genera ning�n evento key-typed porque Shift, por s� misma, no corresponde con ning�n car�cter.

  5. Teclea una 'A' may�scula pulsando las teclas Shift y A.

    Ver�s los siguientes eventos, aunque quiz�s no en este orden: key pressed (Shift), key pressed (A), key typed ('A'), key released (A), key released (Shift).

  6. Teclea una 'A' may�sculas pulsando y liberando la tecla Caps Lock, y luego pulsando la tecla A.

    Deber�as ver los siguientes eventos: key pressed (Caps Lock), key pressed (A), key typed ('A'), key released (A). Observa que la tecla Caps Lock no genera unevento key-released hasta que la pulses y la liberes de neuvo. Lo mismo sucede para otras teclas de estado como Scroll Lock y Num Lock.

  7. Pulsa y mant�n la tecla A..

    �Se repite autom�ticamente? Si es as�, ver�s los mismos resultados que ver�as si pulsaras y liberaras la tecla A repetidamente.

Puedes encontrar el c�digo del applet en KeyEventDemo.java. Aqu� puedes ver el c�digo de manejo de eventos.

public class KeyEventDemo ...  implements KeyListener ... {
    ...//where initialization occurs:
	typingArea = new JTextField(20);
	typingArea.addKeyListener(this);
    ...
    /** Handle the key typed event from the text field. */
    public void keyTyped(KeyEvent e) {
	displayInfo(e, "KEY TYPED: ");
    }

    /** Handle the key pressed event from the text field. */
    public void keyPressed(KeyEvent e) {
	displayInfo(e, "KEY PRESSED: ");
    }

    /** Handle the key released event from the text field. */
    public void keyReleased(KeyEvent e) {
	displayInfo(e, "KEY RELEASED: ");
    }
    ...
    protected void displayInfo(KeyEvent e, String s){
	...
	char c = e.getKeyChar();
	int keyCode = e.getKeyCode();
	int modifiers = e.getModifiers();
	...
	tmpString = KeyEvent.getKeyModifiersText(modifiers);

	...//display information about the KeyEvent...
    }
}

.�La clase KeyEvent

Cada m�todo de evento key tiene un s�lo par�metro: un objeto KeyEvent. La clase KeyEvent define los siguientes m�todos.

int getKeyChar()
void setKeyChar(char)
Obtiene o selecciona el caracter Unicode asociado con este evento.
int getKeyCode()
void setKeyCode(int)
Obtiene o selecciona el c�digo de tecla asociado con este evento. El c�digo de tecla identifica una tecla particular del teclado que el usuario pulsa o libera. La clase KeyEvent define muchas constantes de c�digo de teclas para las m�s utilizadas. Por ejemplo, VK_A especifica la tecla A, y VK_ESCAPE especifica la tecla ESCAPE.
void setModifiers(int)
Selecciona el estado de las teclas modificadoras para este evento. Podemos obtener el estados de las teclas modificadores usando el m�todo getModifiers de InputEvent.
String getKeyText()
String getKeyModifiersText()
Devuelve una descripci�n del c�digo de tecla y de la tecla modificadora, respectivamente.

La clase KeyEvent hereda muchos m�todos de InputEvent y ComponentEvent. Los siguientes m�todos est�n descritos en La clase MouseEvent.

  • Component getComponent()
  • void consume()
  • int getWhen()
  • boolean isAltDown()
  • boolean isControlDown()
  • boolean isMetaDown()
  • boolean isShiftDown()
  • int getModifiers()

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR