Gestione degli eventi AWT

Cos'è un evento?

Il cambiamento nello stato di un oggetto è noto come evento, ovvero l'evento descrive il cambiamento nello stato della sorgente. Gli eventi vengono generati come risultato dell'interazione dell'utente con i componenti dell'interfaccia utente grafica. Ad esempio, fare clic su un pulsante, spostare il mouse, inserire un carattere tramite la tastiera, selezionare un elemento dall'elenco, scorrere la pagina sono le attività che provocano un evento.

Tipi di evento

Gli eventi possono essere classificati a grandi linee in due categorie:

  • Foreground Events- Quegli eventi che richiedono l'interazione diretta dell'utente. Sono generati come conseguenza dell'interazione di una persona con i componenti grafici dell'interfaccia utente grafica. Ad esempio, fare clic su un pulsante, spostare il mouse, inserire un carattere tramite la tastiera, selezionare un elemento dall'elenco, scorrere la pagina ecc.

  • Background Events- Gli eventi che richiedono l'interazione dell'utente finale sono noti come eventi in background. Le interruzioni del sistema operativo, guasti hardware o software, la scadenza del timer, il completamento di un'operazione sono un esempio di eventi in background.

Cos'è la gestione degli eventi?

La gestione degli eventi è il meccanismo che controlla l'evento e decide cosa dovrebbe accadere se si verifica un evento. Questo meccanismo ha il codice noto come gestore di eventi che viene eseguito quando si verifica un evento. Java utilizza il modello di eventi di delega per gestire gli eventi. Questo modello definisce il meccanismo standard per generare e gestire gli eventi. Facciamo una breve introduzione a questo modello.

Il Delegation Event Model ha i seguenti partecipanti chiave, vale a dire:

  • Source- La sorgente è un oggetto su cui si verifica l'evento. La fonte è responsabile di fornire informazioni sull'evento che si è verificato al proprio gestore. Java fornisce le classi per l'oggetto di origine.

  • Listener- È anche noto come gestore di eventi. Listener è responsabile della generazione della risposta a un evento. Dal punto di vista dell'implementazione java, l'ascoltatore è anche un oggetto. L'ascoltatore attende fino a quando non riceve un evento. Una volta ricevuto l'evento, l'ascoltatore elabora l'evento e poi ritorna.

Il vantaggio di questo approccio è che la logica dell'interfaccia utente è completamente separata dalla logica che genera l'evento. L'elemento dell'interfaccia utente è in grado di delegare l'elaborazione di un evento a una parte di codice separata. In questo modello, il listener deve essere registrato con l'oggetto di origine in modo che il listener possa ricevere la notifica dell'evento. Questo è un modo efficiente di gestire l'evento perché le notifiche degli eventi vengono inviate solo a quegli ascoltatori che vogliono riceverle.

Passaggi coinvolti nella gestione degli eventi

  • L'utente fa clic sul pulsante e l'evento viene generato.

  • Ora l'oggetto della classe evento interessata viene creato automaticamente e le informazioni sulla sorgente e sull'evento vengono popolate con lo stesso oggetto.

  • L'oggetto evento viene inoltrato al metodo della classe listener registrata.

  • il metodo viene ora eseguito e restituisce.

Punti da ricordare sull'ascoltatore

  • Per progettare una classe listener dobbiamo sviluppare alcune interfacce listener, che prevedono alcuni metodi di callback astratti pubblici che devono essere implementati dalla classe listener.

  • Se non implementate le interfacce any if predefinite, la vostra classe non può agire come una classe listener per un oggetto sorgente.

Metodi di richiamata

Questi sono i metodi forniti dal provider API e sono definiti dal programmatore dell'applicazione e richiamati dallo sviluppatore dell'applicazione. Qui i metodi di callback rappresentano un metodo di evento. In risposta a un evento java jre attiverà il metodo di callback. Tutti questi metodi di callback sono forniti nelle interfacce del listener.

Se un componente desidera che un ascoltatore ascolti i suoi eventi, la sorgente deve registrarsi all'ascoltatore.

Esempio di gestione degli eventi

Crea il seguente programma java usando qualsiasi editor di tua scelta, diciamo 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.");
         }  	
      }		
   }
}

Compilare il programma utilizzando il prompt dei comandi. Vai aD:/ > AWT e digita il seguente comando.

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

Se non viene visualizzato alcun errore, significa che la compilazione è riuscita. Esegui il programma utilizzando il seguente comando.

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

Verificare il seguente output