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