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