- AWT 教程
- AWT - 首页
- AWT - 概述
- AWT - 环境
- AWT - 控件
- AWT - 事件处理
- AWT - 事件类
- AWT - 事件监听器
- AWT - 事件适配器
- AWT - 布局
- AWT - 容器
- AWT - 菜单
- AWT - 图形
- AWT 有用资源
- AWT - 快速指南
- AWT - 有用资源
- AWT - 讨论
AWT 事件处理
什么是事件?
对象状态的改变称为事件,即事件描述了源状态的改变。事件是用户与图形用户界面组件交互的结果而生成的。例如,点击按钮、移动鼠标、通过键盘输入字符、从列表中选择项目、滚动页面等活动都会导致事件发生。
事件类型
事件可以大致分为两类
前台事件 - 这些事件需要用户的直接交互。它们是由于用户与图形用户界面中的图形组件交互而产生的。例如,点击按钮、移动鼠标、通过键盘输入字符、从列表中选择项目、滚动页面等。
后台事件 - 这些事件不需要最终用户的交互被称为后台事件。操作系统中断、硬件或软件故障、计时器到期、操作完成都是后台事件的示例。
什么是事件处理?
事件处理是控制事件并决定事件发生时应该发生什么的机制。此机制包含称为事件处理程序的代码,当事件发生时执行该代码。Java 使用委托事件模型来处理事件。此模型定义了生成和处理事件的标准机制。让我们简要介绍一下此模型。
委托事件模型具有以下关键参与者
源 - 源是发生事件的对象。源负责向其处理程序提供已发生事件的信息。Java 为源对象提供了类。
监听器 - 也称为事件处理程序。监听器负责对事件做出响应。从 Java 实现的角度来看,监听器也是一个对象。监听器等待直到收到事件。一旦收到事件,监听器就会处理事件,然后返回。
这种方法的好处是用户界面逻辑与生成事件的逻辑完全分离。用户界面元素能够将事件的处理委托给单独的代码段。在此模型中,需要将监听器注册到源对象,以便监听器可以接收事件通知。这是一种有效的事件处理方式,因为事件通知仅发送给那些想要接收它们的监听器。
事件处理涉及的步骤
用户点击按钮并生成事件。
现在会自动创建相关事件类的对象,并且有关源和事件的信息会填充到同一对象中。
事件对象被转发到已注册监听器类的函数。
函数现在被执行并返回。
关于监听器的要点
为了设计一个监听器类,我们必须开发一些监听器接口。这些监听器接口预测了一些公共抽象回调函数,这些函数必须由监听器类实现。
如果您没有实现任何预定义的接口,那么您的类不能充当源对象的监听器类。
回调函数
这些是 API 提供者提供的函数,由应用程序程序员定义并由应用程序开发人员调用。此处,回调函数表示事件函数。响应事件,Java JRE 将触发回调函数。所有此类回调函数都在监听器接口中提供。
如果某个组件希望某个监听器侦听其事件,则源必须将其自身注册到该监听器。
事件处理示例
使用您选择的任何编辑器在例如D:/ > AWT > com > tutorialspoint > gui >中创建以下 Java 程序。
AwtControlDemo.javapackage 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.");
}
}
}
}
使用命令提示符编译程序。转到D:/ > AWT并键入以下命令。
D:\AWT>javac com\tutorialspoint\gui\AwtControlDemo.java
如果没有错误,则表示编译成功。使用以下命令运行程序。
D:\AWT>java com.tutorialspoint.gui.AwtControlDemo
验证以下输出