Event Handling 示例

2025-09-30 02:18:46
❮ 上一节 下一节 ❯ AWT 事件处理 什么是事件? 对象状态的变化称为事件,即事件描述源状态的变化。事件是用户与图形用户界面组件交互的结...

❮ 上一节

下一节 ❯

AWT 事件处理

什么是事件?

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

事件类型

事件大致可分为两类:

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

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

什么是事件处理?

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

委托事件模型有以下关键参与者:

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

监听器 - 它也被称为事件处理程序。监听器负责生成对事件的响应。从 Java 实现的角度来看,监听器也是一个对象。监听器等待直到它接收到事件。一旦接收到事件,监听器就会处理该事件然后返回。

这种方法的好处是用户界面逻辑与生成事件的逻辑完全分离。

用户界面元素能够将事件的处理委托给单独的代码片段。在这个模型中,监听器需要向源对象注册,这样监听器才能接收事件通知。这是一种处理事件的有效方法,因为事件通知只发送给那些想要接收它们的监听器。

事件处理涉及的步骤

用户单击按钮,事件生成。

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

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

该方法现在得到执行并返回。

关于监听器需要记住的要点

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

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

回调方法

这些方法由 API 提供商提供,由应用程序程序员定义并由应用程序开发人员调用。这里的回调方法表示事件方法。响应事件,java jre 将触发回调方法。所有此类回调方法均在监听器接口中提供。

如果组件希望某个监听器监听其事件,则源必须将自己注册到监听器。

Event Handling 示例

使用您选择的任何编辑器在 D:/ > AWT > com > tutorialspoint > gui > 中创建以下 Java 程序

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.");

}

}

}

}

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

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

如果没有错误,则表示编译成功。使用以下命令运行程序。

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

验证以下输出

❮ 上一节

下一节 ❯