Tratamento de eventos AWT

O que é um evento?

A mudança no estado de um objeto é conhecida como evento, ou seja, o evento descreve a mudança no estado da fonte. Os eventos são gerados como resultado da interação do usuário com os componentes da interface gráfica do usuário. Por exemplo, clicar em um botão, mover o mouse, inserir um caractere pelo teclado, selecionar um item da lista, rolar a página são as atividades que fazem com que um evento aconteça.

Tipos de evento

Os eventos podem ser amplamente classificados em duas categorias:

  • Foreground Events- Aqueles eventos que requerem a interação direta do usuário. Eles são gerados como consequências da interação de uma pessoa com os componentes gráficos da Interface Gráfica do Usuário. Por exemplo, clicar em um botão, mover o mouse, inserir um caractere pelo teclado, selecionar um item da lista, rolar a página etc.

  • Background Events- Aqueles eventos que requerem a interação do usuário final são conhecidos como eventos de segundo plano. Interrupções do sistema operacional, falha de hardware ou software, temporizador expira, conclusão de uma operação são exemplos de eventos em segundo plano.

O que é manipulação de eventos?

Manipulação de evento é o mecanismo que controla o evento e decide o que deve acontecer se um evento ocorrer. Este mecanismo possui o código conhecido como manipulador de eventos que é executado quando ocorre um evento. Java usa o modelo de evento de delegação para manipular os eventos. Este modelo define o mecanismo padrão para gerar e tratar os eventos. Vamos fazer uma breve introdução a este modelo.

O modelo de evento de delegação tem os seguintes participantes principais, a saber:

  • Source- A fonte é um objeto no qual o evento ocorre. Source é responsável por fornecer informações do evento ocorrido ao seu manipulador. Java fornece classes para objeto de origem.

  • Listener- Também é conhecido como manipulador de eventos. O listener é responsável por gerar resposta a um evento. Do ponto de vista da implementação java, o ouvinte também é um objeto. O ouvinte espera até receber um evento. Assim que o evento é recebido, o ouvinte processa o evento e o retorna.

O benefício dessa abordagem é que a lógica da interface do usuário é completamente separada da lógica que gera o evento. O elemento da interface do usuário pode delegar o processamento de um evento a uma parte separada do código. Nesse modelo, o Listener precisa ser registrado com o objeto de origem para que possa receber a notificação do evento. Esta é uma maneira eficiente de lidar com o evento porque as notificações de evento são enviadas apenas para o ouvinte que deseja recebê-las.

Etapas envolvidas no tratamento de eventos

  • O usuário clica no botão e o evento é gerado.

  • Agora o objeto da classe de evento em questão é criado automaticamente e as informações sobre a origem e o evento são preenchidas no mesmo objeto.

  • O objeto de evento é encaminhado para o método da classe de ouvinte registrada.

  • o método agora é executado e retorna.

Pontos a serem lembrados sobre o ouvinte

  • A fim de projetar uma classe de ouvinte, temos que desenvolver algumas interfaces de ouvinte. Essas interfaces de ouvinte prevêem alguns métodos de retorno de chamada abstratos públicos que devem ser implementados pela classe de ouvinte.

  • Se você não implementar as interfaces predefinidas any if, sua classe não poderá atuar como uma classe de ouvinte para um objeto de origem.

Métodos de retorno de chamada

Esses são os métodos fornecidos pelo provedor de API e definidos pelo programador do aplicativo e invocados pelo desenvolvedor do aplicativo. Aqui, os métodos de retorno de chamada representam um método de evento. Em resposta a um evento, java jre irá disparar o método de retorno de chamada. Todos esses métodos de retorno de chamada são fornecidos em interfaces de ouvinte.

Se um componente deseja que algum ouvinte escute seus eventos, a fonte deve se registrar no ouvinte.

Exemplo de manipulação de eventos

Crie o seguinte programa java usando qualquer editor de sua escolha em dizer 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 o programa usando o prompt de comando. Vamos paraD:/ > AWT e digite o seguinte comando.

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

Se nenhum erro ocorrer, significa que a compilação foi bem-sucedida. Execute o programa usando o seguinte comando.

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

Verifique a seguinte saída