Manejo de eventos AWT

¿Qué es un evento?

El cambio en el estado de un objeto se conoce como evento, es decir, el evento describe el cambio en el estado de la fuente. Los eventos se generan como resultado de la interacción del usuario con los componentes de la interfaz gráfica de usuario. Por ejemplo, hacer clic en un botón, mover el mouse, ingresar un carácter a través del teclado, seleccionar un elemento de la lista, desplazarse por la página son las actividades que hacen que suceda un evento.

Tipos de evento

Los eventos pueden clasificarse ampliamente en dos categorías:

  • Foreground Events- Aquellos eventos que requieren de la interacción directa del usuario, se generan como consecuencia de la interacción de una persona con los componentes gráficos en la Interfaz Gráfica de Usuario. Por ejemplo, hacer clic en un botón, mover el mouse, ingresar un carácter a través del teclado, seleccionar un elemento de la lista, desplazarse por la página, etc.

  • Background Events- Aquellos eventos que requieren la interacción del usuario final se conocen como eventos de fondo. Las interrupciones del sistema operativo, fallas de hardware o software, el temporizador expira, la finalización de una operación son ejemplos de eventos en segundo plano.

¿Qué es el manejo de eventos?

El manejo de eventos es el mecanismo que controla el evento y decide qué debe suceder si ocurre un evento. Este mecanismo tiene el código conocido como controlador de eventos que se ejecuta cuando ocurre un evento. Java utiliza el modelo de eventos de delegación para manejar los eventos. Este modelo define el mecanismo estándar para generar y manejar los eventos. Veamos una breve introducción a este modelo.

El modelo de eventos de delegación tiene los siguientes participantes clave, a saber:

  • Source- La fuente es un objeto en el que ocurre el evento. La fuente es responsable de proporcionar información del evento ocurrido a su controlador. Java proporciona clases para el objeto fuente.

  • Listener- También se conoce como manejador de eventos, el oyente es responsable de generar respuesta a un evento. Desde el punto de vista de la implementación de Java, el oyente también es un objeto. El oyente espera hasta que recibe un evento. Una vez que se recibe el evento, el oyente procesa el evento y luego regresa.

El beneficio de este enfoque es que la lógica de la interfaz de usuario está completamente separada de la lógica que genera el evento. El elemento de la interfaz de usuario puede delegar el procesamiento de un evento en una pieza de código separada. En este modelo, el oyente debe estar registrado con el objeto de origen para que el oyente pueda recibir la notificación del evento. Esta es una forma eficiente de manejar el evento porque las notificaciones de eventos se envían solo a aquellos oyentes que desean recibirlas.

Pasos involucrados en el manejo de eventos

  • El usuario hace clic en el botón y se genera el evento.

  • Ahora, el objeto de la clase de evento en cuestión se crea automáticamente y la información sobre la fuente y el evento se completa en el mismo objeto.

  • El objeto de evento se reenvía al método de la clase de escucha registrada.

  • el método ahora se ejecuta y regresa.

Puntos para recordar sobre el oyente

  • Para diseñar una clase de escucha tenemos que desarrollar algunas interfaces de escucha. Estas interfaces de escucha pronostican algunos métodos públicos de devolución de llamada abstractos que deben ser implementados por la clase de escucha.

  • Si no implementa las interfaces any if predefinidas, entonces su clase no puede actuar como una clase de escucha para un objeto fuente.

Métodos de devolución de llamada

Estos son los métodos proporcionados por el proveedor de API, definidos por el programador de la aplicación e invocados por el desarrollador de la aplicación. Aquí, los métodos de devolución de llamada representan un método de evento. En respuesta a un evento, java jre activará el método de devolución de llamada. Todos estos métodos de devolución de llamada se proporcionan en interfaces de escucha.

Si un componente quiere que algún oyente escuche sus eventos, la fuente debe registrarse en el oyente.

Ejemplo de manejo de eventos

Cree el siguiente programa java usando cualquier editor de su elección en digamos D:/ > AWT > com > tutorialspoint > gui >

AwtControlDemo.java
package com.tutorialspoint.gui;

import java.awt.*;
import java.awt.event.*;

public class AwtControlDemo {

   private Frame mainFrame;
   private Label headerLabel;
   private Label statusLabel;
   private Panel controlPanel;

   public AwtControlDemo(){
      prepareGUI();
   }

   public static void main(String[] args){
      AwtControlDemo  awtControlDemo = new AwtControlDemo();
      awtControlDemo.showEventDemo();
   }

   private void prepareGUI(){
      mainFrame = new Frame("Java AWT Examples");
      mainFrame.setSize(400,400);
      mainFrame.setLayout(new GridLayout(3, 1));
      mainFrame.addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent windowEvent){
            System.exit(0);
         }        
      });    
      headerLabel = new Label();
      headerLabel.setAlignment(Label.CENTER);
      statusLabel = new Label();        
      statusLabel.setAlignment(Label.CENTER);
      statusLabel.setSize(350,100);

      controlPanel = new Panel();
      controlPanel.setLayout(new FlowLayout());

      mainFrame.add(headerLabel);
      mainFrame.add(controlPanel);
      mainFrame.add(statusLabel);
      mainFrame.setVisible(true);  
   }

   private void showEventDemo(){
      headerLabel.setText("Control in action: Button"); 

      Button okButton = new Button("OK");
      Button submitButton = new Button("Submit");
      Button cancelButton = new Button("Cancel");

      okButton.setActionCommand("OK");
      submitButton.setActionCommand("Submit");
      cancelButton.setActionCommand("Cancel");

      okButton.addActionListener(new ButtonClickListener()); 
      submitButton.addActionListener(new ButtonClickListener()); 
      cancelButton.addActionListener(new ButtonClickListener()); 

      controlPanel.add(okButton);
      controlPanel.add(submitButton);
      controlPanel.add(cancelButton);       

      mainFrame.setVisible(true);  
   }

   private class ButtonClickListener implements ActionListener{
      public void actionPerformed(ActionEvent e) {
         String command = e.getActionCommand();  
         if( command.equals( "OK" ))  {
            statusLabel.setText("Ok Button clicked.");
         }
         else if( command.equals( "Submit" ) )  {
            statusLabel.setText("Submit Button clicked."); 
         }
         else  {
            statusLabel.setText("Cancel Button clicked.");
         }  	
      }		
   }
}

Compile el programa usando el símbolo del sistema. IrD:/ > AWT y escriba el siguiente comando.

D:\AWT>javac com\tutorialspoint\gui\AwtControlDemo.java

Si no aparece ningún error, eso significa que la compilación se realizó correctamente. Ejecute el programa usando el siguiente comando.

D:\AWT>java com.tutorialspoint.gui.AwtControlDemo

Verifique la siguiente salida