Awt 简明教程
AWT Event Handling
What is an Event?
物体的状态变化称为事件,即事件描述源的状态变化。事件是由于用户与图形用户界面组件的交互而生成的。例如,单击按钮、移动鼠标、通过键盘输入字符、从列表中选择项、滚动页面是由导致事件发生的操作。
Change in the state of an object is known as event i.e. event describes the change in state of source. Events are generated as result of user interaction with the graphical user interface components. For example, clicking on a button, moving the mouse, entering a character through keyboard,selecting an item from list, scrolling the page are the activities that causes an event to happen.
Types of Event
事件大致可以分为两类:
The events can be broadly classified into two categories:
-
Foreground Events - Those events which require the direct interaction of user.They are generated as consequences of a person interacting with the graphical components in Graphical User Interface. For example, clicking on a button, moving the mouse, entering a character through keyboard,selecting an item from list, scrolling the page etc.
-
Background Events - Those events that require the interaction of end user are known as background events. Operating system interrupts, hardware or software failure, timer expires, an operation completion are the example of background events.
What is Event Handling?
事件处理是控制事件并决定在事件发生时应发生什么的机制。此机制包含一个名为事件处理程序的代码,该代码在事件发生时执行。Java 使用委托事件模型来处理事件。此模型定义了用于生成和处理事件的标准机制。让我们简要介绍一下此模型。
Event Handling is the mechanism that controls the event and decides what should happen if an event occurs. This mechanism have the code which is known as event handler that is executed when an event occurs. Java Uses the Delegation Event Model to handle the events. This model defines the standard mechanism to generate and handle the events.Let’s have a brief introduction to this model.
委托事件模型有以下主要参与者:
The Delegation Event Model has the following key participants namely:
-
Source - The source is an object on which event occurs. Source is responsible for providing information of the occurred event to it’s handler. Java provide as with classes for source object.
-
Listener - It is also known as event handler.Listener is responsible for generating response to an event. From java implementation point of view the listener is also an object. Listener waits until it receives an event. Once the event is received , the listener process the event an then returns.
这种方法的好处是用户界面逻辑与生成事件的逻辑完全分离开来。用户界面元素能够将事件的处理委托给单独的代码块。在此模型中,侦听器需要在源对象中注册,以便侦听器能够接收事件通知。这是处理事件的有效方式,因为事件通知仅发送给想要接收它们的侦听器。
The benefit of this approach is that the user interface logic is completely separated from the logic that generates the event. The user interface element is able to delegate the processing of an event to the separate piece of code. In this model ,Listener needs to be registered with the source object so that the listener can receive the event notification. This is an efficient way of handling the event because the event notifications are sent only to those listener that want to receive them.
Steps involved in event handling
-
The User clicks the button and the event is generated.
-
Now the object of concerned event class is created automatically and information about the source and the event get populated with in same object.
-
Event object is forwarded to the method of registered listener class.
-
the method is now get executed and returns.
Points to remember about listener
-
In order to design a listener class we have to develop some listener interfaces.These Listener interfaces forecast some public abstract callback methods which must be implemented by the listener class.
-
If you do not implement the any if the predefined interfaces then your class can not act as a listener class for a source object.
Callback Methods
这些是由 API 提供者提供的,由应用程序程序员定义并由应用程序开发人员调用的方法。在此,回调方法表示事件方法。为了响应事件,Java JRE 将触发回调方法。所有此类回调方法都在侦听器接口中提供。
These are the methods that are provided by API provider and are defined by the application programmer and invoked by the application developer. Here the callback methods represents an event method. In response to an event java jre will fire callback method. All such callback methods are provided in listener interfaces.
如果组件希望某个侦听器侦听其事件,则该源必须将自身注册到侦听器。
If a component wants some listener will listen to it’s events the the source must register itself to the listener.
Event Handling Example
使用你选择的任意编辑器在给定的 D:/ > AWT > com > tutorialspoint > gui > 中创建以下 Java 程序
Create the following java program using any editor of your choice in say D:/ > AWT > com > tutorialspoint > gui >
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 * 并键入以下命令。
Compile the program using command prompt. Go to *D:/ > AWT * and type the following command.
D:\AWT>javac com\tutorialspoint\gui\AwtControlDemo.java
如果没有错误,则表示编译成功。使用以下命令运行该程序。
If no error comes that means compilation is successful. Run the program using following command.
D:\AWT>java com.tutorialspoint.gui.AwtControlDemo
验证以下输出
Verify the following output