当前位置: 首页 > 文档资料 > JAVA AWT 中文文档 >

事件处理( Event Handling)

优质
小牛编辑
132浏览
2023-12-01

什么是事件? (What is an Event?)

对象状态的更改称为事件,即事件描述源的状态更改。 由于用户与图形用户界面组件的交互而生成事件。 例如,单击按钮,移动鼠标,通过键盘输入字符,从列表中选择项目,滚动页面是导致事件发生的活动。

事件类型

这些事件大致可分为两类:

  • Foreground Events - 需要用户直接交互的事件。它们是作为人与图形用户界面中的图形组件交互的结果而生成的。 例如,单击按钮,移动鼠标,通过键盘输入字符,从列表中选择项目,滚动页面等。

  • Background Events - 需要最终用户交互的事件称为后台事件。 操作系统中断,硬件或软件故障,计时器到期,操作完成是后台事件的示例。

什么是事件处理?

事件处理是控制事件并决定事件发生时应该发生什么的机制。 此机制具有代码,该代码称为事件发生时执行的事件处理程序。 Java使用委托事件模型来处理事件。 该模型定义了生成和处理事件的标准机制。让我们简要介绍一下这个模型。

代表团事件模型具有以下主要参与者:

  • Source - 源是发生事件的对象。 Source负责向其处理程序提供已发生事件的信息。 Java提供源对象的类。

  • Listener - 它也称为事件处理程序.Listener负责生成对事件的响应。 从java实现的角度来看,监听器也是一个对象。 监听器等待直到收到事件。 收到事件后,侦听器处理事件然后返回。

这种方法的好处是用户界面逻辑与生成事件的逻辑完全分离。 用户界面元素能够将事件的处理委托给单独的代码段。 在此模型中,需要向源对象注册Listener,以便侦听器可以接收事件通知。 这是处理事件的有效方式,因为事件通知仅发送给想要接收它们的侦听器。

涉及事件处理的步骤

  • 用户单击该按钮并生成事件。

  • 现在自动创建相关事件类的对象,并在同一对象中填充有关源和事件的信息。

  • 事件对象被转发到已注册的侦听器类的方法。

  • 该方法现在被执行并返回。

要记住关于听众的要点

  • 为了设计一个监听器类,我们必须开发一些监听器接口。这些监听器接口预测一些必须由监听器类实现的公共抽象回调方法。

  • 如果您没有实现任何预定义接口,则您的类不能充当源对象的侦听器类。

回调方法

这些是API提供程序提供的方法,由应用程序程序员定义并由应用程序开发人员调用。 这里的回调方法代表一个事件方法。 在响应事件时,java jre将触发回调方法。 所有这些回调方法都在监听器接口中提供。

如果组件想要某个侦听器将侦听它的事件,则源必须将自己注册到侦听器。

事件处理示例

使用您选择的任何编辑器创建以下java程序,例如D:/ 》 AWT 》 com 》 iowiki 》 gui 》

AwtControlDemo.java
package com.iowiki.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.");
         }  	
      }		
   }
}

使用命令提示符编译程序。 转到D:/ 》 AWT并键入以下命令。

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

如果没有错误,那意味着编译成功。 使用以下命令运行程序。

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

验证以下输出

AWT事件处理