Escribir un Oyente de Texto

Los eventos de texto son generados después de que el texto de un componente de texto haya cambiado de algún modo. Los componentes del AWT 1.1 que pueden generar eventos de texto son los campos y las áreas de texto. Para obtener un notificación anterior a los cambios de texto -- por ejemplo, para interceptar caracteres incorrectos -- deberías escribir un oyente de teclas.

Métodos de eventos de Texto

El interface TextListener tiene sólo un método, por lo tanto no tiene la correspondiente clase adaptador. Aquí tienes el método:
void textValueChanged(TextEvent)
Llamado por el AWT justo después de que haya cambiado el texto del componente escuchado.

ejemplos de Manejo de Eventos de Texto

El siguiente applet demuestra los eventos de texto. Contiene dos componetes de texto editable -- un campo de texto y un área de texto. Pulsar Return en el campo de texto hace que el contenido de éste sea añadido al área de texto. Cada componente de texto editable posee un oyente de texto. Estos dos oyentes, que son dos ejemplares de una misma clase, añaden un mensaje a un área de texto no editable que está a la derecha del applet. Un botón situado en la parte inferior derecha del applet te permite limpiar el área de mensajes.


Intenta esto:
  1. Pulsa sobre el campo de texto situado en la parte superior izquierda del applet, luego pulsa el carácter A en el teclado.
    Ocurre un evento de texto, y verás un mensaje en el área situada a la derecha del applet.
  2. Teclea algunos caracteres más.
    Ocurre un evento de texto cada vez que tecleas un carácter.
  3. Pulsa Return.
    El campo de texto no genera un evento de texto. En su lugar genera un evento "action", y el manejador de este evento copia el texto contenido en el campo de texto dentro del área de texto. El área de texto reacciona generando un sólo evento de texto, sin importar el número de caracteres copiado.
  4. Pulsa sobre el área de texto -- el área grande situado en la parte inferior izquierda del applet -- y luego pulsa un caracter en el teclado.
    El área de texto dispara un evento de texto.

Aquí podrás encontrar el código completo del applet TextDemo.java. Sucede que este applet implementa su manejo de eventos de texto dentro de una clase interna llamada MyTextListener. El applet crea y registra dos ejemplares de MyTextListener, uno para cada componente de texto editable. El constructor de MyTextListener toma una cadena que describe la fuente del evento. Cuando un ejemplar de MyTextListener detecta un evento de texto, (esto es, se llama al método textValueChanged de MyTextListener), el ejemplar añade un mensaje al área situada a la derecha del applet. Aquí tienes el código de manejo de eventos del applet:

public class TextDemo ... {
    TextField textField;
    TextArea textArea;
    TextArea displayArea;
    ...
        //Donde ocurra la inicialización:
	textField = new TextField(20);
	...
	textField.addTextListener(new MyTextListener("Text Field"));

        textArea = new TextArea(5, 20);
	textArea.addTextListener(new MyTextListener("Text Area"));
	...
    }

    class MyTextListener implements TextListener {
	String preface;

		public MyTextListener(String source) {
	    	preface = source
		    	  + " text value changed.\n"
		      	+ "   First 10 characters: \"";
		}

    	public void textValueChanged(TextEvent e) {
	    	TextComponent tc = (TextComponent)e.getSource();
	    	String s = tc.getText();
	    	...//truncate s to 10 characters...

	    	displayArea.append(preface + s + "\"\n");
		    ...
		}
    }
    ...
}

La clase TextEvent

Cada método de evento de texto tiene un sólo parámetro: un objeto TextEvent. La clase TextEvent no define métodos útiles. Utilizando el método getSource que hereda de EventObject, puedes obtener el componente que generó el evento y luego enviarle un mensaje.


Ozito