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