Interacción con el usuario
Al interactuar con la aplicación, el usuario:
- Acciona widgets (ActionEvent).
- Presiona o suelta botones del mouse (MouseEvent).
- Iconifica, cierra o lanza una ventana hacia atrás (WindowEvent).
- Digita con el teclado (KeyEvent).
- Descubre porciones de ventanas (PaintEvent).
- etc.
Eventos de acción: cuando el usuario realiza la interacción fundamental
de un widget.
- El usuario presiona un botón.
- El usuario termina de ingresar un texto en un campo y presiona
``enter''.
- El usuario selecciona un ítem de una lista ``doble-clicando''
el ítem preferido.
- El usuario selecciona un ítem en un menú.
Normalmente, la aplicación sólo necesita responder a eventos
de acción.
- La aplicación no necesita responder cuando el usuario
digita una letra en un campo de texto.
- Es el widget campo de texto el que sabe dibujar la letra
digitada.
- La aplicación no necesita responder cuando el cursor
pasa por sobre un área de texto.
- Es el widget área de texto quien cambia la forma del cursor.
Los widgets provistos por la AWT saben responder a la mayoría de los
eventos.
Respondiendo Eventos
Para responder ante un evento, la aplicación necesita:
- Crear una clase que sepa responder el evento de acción:
public class MiAdaptador implements ActionListener {
public actionPerformed(ActionEvent e) {
... // Aqui se responde el evento
}
}
- Inscribirse como interesado en el evento de acción producido
por el widget:
widget.addActionListener(new MiAdaptador());
Cada vez que el widget produzca el evento de acción, se invocará
automáticamente el método actionPerformed.
Ejemplo: Hacer que cada vez que se ingrese información en el
campo de texto, se agregue un ítem con la información a la lista.
import java.awt.event.*; // Se usarán eventos
...
public class Gui extends Frame {
Lista lista;
TextArea texto;
...
public Gui() {
...
texto.addActionListener(new IngresoDeTexto());
}
public class IngresoDeTexto implements ActionListener {
public void actionPerformed(ActionEvent e) {
lista.add(texto.getText()); // Agrega el ítem a la lista
texto.setText(""); // Borra el campo de texto
} } }
Observaciones:
- IngresoDeTexto es una clase interna de la clase
Gui.
- La clase interna va asociada a un objeto de la clase Gui.
- La clase interna tiene acceso a las variables de instancia del objeto.
- ActionListener es una interfaz.
- Una interfaz es un forma restringida de clase.
- Las interfaces no se extienden, se implementan.
Ejemplo:
- Copie el archivo GuiEv.java
a su directorio. Compílelo y ejecútelo.
- Modifíquelo de tal forma que cuando el usuario presione el botón
``quit'' se ejecute System.exit(0); (que termina el programa).