在AWT中,用户的所有操作都要由事件处理来完成。Frame和组件本身没有处理事件的能力。

1.GUI事件处理机制

  定义:在某个组件上发生某种操作时,自动触发某段代码。

  事件处理涉及4个重要概念:

    事件源(Event Source):操作发生的场所,通常指某个组件。

    事件(Event):在事件源发生的某种操作,GUI将事件封装在Event对象中,如果想知道具体的事件信息,就要通过Event对象来获取。

    事件监听器(Event Listener):当在事件源上发生了某个事件时,事件监听器可以对其进行处理。

    事件监听:将事件监听器通过事件绑定在事件源上,当发生了某个事件时事件监听器可以对其进行处理。

  使用步骤:

    1.创建事件源

    2.自定义类,实现XXXListener接口,重写方法。

    3.创建事件监听器对象(自定义类对象)。

    4.调用事件源组件的addXXXListener方法完成绑定。

      

 1 import javax.swing.*;
2 import java.awt.*;
3 import java.awt.event.ActionEvent;
4 import java.awt.event.ActionListener;
5
6 public class EventTestDemo {
7 Frame frame = new Frame("测试事件监听");
8
9 TextField tf = new TextField(30);
10
11 Button submit = new Button("Submit");
12
13 Box box = Box.createVerticalBox();
14 public void init(){
15 box.add(tf);
16 box.add(submit);
17
18 submit.addActionListener(new ActionListener() {
19 @Override
20 public void actionPerformed(ActionEvent e) {
21 tf.setText("你好世界");
22 }
23 });
24
25 frame.add(box);
26
27 frame.pack();
28 frame.setVisible(true);
29 }
30
31 public static void main(String[] args) {
32 new EventTestDemo().init();
33 }
34 }

2.常见事件和事件监听器

  事件监听器必须实现事件监听器接口,AWT提供了大量的事件监听器接口用于实现不同类型的事件监听器,监听不同类型的事件。

  AWT的事件类都是AWTEvent的子类,而AWTEvent是EventObject的子类。

2.1 事件

  AWT把事件分为了两大类:低级事件和高级事件。

  低级事件:

    基于某个特定动作的事件,比如点击、进入、拖放等鼠标动作的事件或者获得焦点、失去焦点等事件。

方法名 说明
 ComponentEvent  组件事件,当组件的尺寸、位置、可见性发生变化时,触发该事件。
 ContainerEvent  容器事件,当容器内增删组件时,触发该事件。
 WindowEvent  窗口事件,当窗口状态发生改变时(如打开关闭、最小化、最大化),触发该事件。
 FocusEvent  焦点事件,当组件得到焦点或者失去焦点时,触发该事件。
 KeyEvent  键盘事件,当键盘被按下、松开或者单击时,触发该事件。
 MouseEvent  鼠标事件,当鼠标被按下、松开、单击或者移动的时候,触发该事件。
 PaintEvent  组件绘制事件,该事件是一个特殊的事件类型,当GUI组件调用update/paint方法来呈现自身时,触发该事件,该事件并非专用于事件处理模型。

  高级事件:

    该类事件并不基于某个特定动作,而是根据功能含义定义的事件。

  

方法名 说明
 ActionEvent  动作事件,当按钮、菜单项被单击,在TextField中按Entry时被触发。
 AjustmentEvent  调节事件,在滑动条上移动滑块以调节数值时触发。
 ItemEvent  选项事件,当用户选中某项或者取消选中某项时触发。
 TextEvent  文本事件,当文本框、文本域中的文本发生变化时触发。

2.2 事件监听器

  不同的事件要使用不同的事件监听器来监听,不同的事件监听器要实现不同的事件监听器接口,当指定事件发生后,事件监听器就会调用写好的事件监听方法来处理。

事件类别 描述信息 监听器接口名
ActionEvent 激活组件 ActionListener
ItemEvent 选中了某选项 ItemListener
MouseEvent 鼠标移动 MouseMotionListener
MouseEvent 鼠标点击等 MouseListener
KeyEvent 键盘输入 KeyListener
FocusEvent 组件收到焦点或者失去焦点 FocusListener
AjustmentEvent 移动了滚动条等组件 AjustmentListener
ComponentEvent 对象移动缩放显示隐藏等 ComponentListener
WindowEvent 窗口收到窗口级事件 WindowListener
ContainerEvent 容器中增删组件 ContainerListener
TextEvent 文本框或者文本域中的文本发生变化 TextListener
 1 import javax.swing.*;
2 import java.awt.*;
3 import java.awt.event.*;
4
5 public class ListenerTestDemo {
6 Frame frame = new Frame("事件监听器测试");
7
8 Box box = Box.createHorizontalBox();
9
10 Choice select = new Choice();
11
12 TextField tf = new TextField(30);
13
14 public void init(){
15 select.add("超人");
16 select.add("蝙蝠侠");
17 select.add("钢铁侠");
18
19 box.add(select);
20 box.add(tf);
21
22 frame.add(box);
23
24 frame.setLocation(500,250);
25
26 frame.pack();
27
28 frame.setVisible(true);
29
30 tf.addTextListener(new TextListener() {
31 @Override
32 public void textValueChanged(TextEvent e) {
33 String selectedItem = select.getSelectedItem();
34 String text = tf.getText();
35 System.out.println(selectedItem+text);
36 }
37 });
38
39 tf.addActionListener(new ActionListener() {
40 @Override
41 public void actionPerformed(ActionEvent e) {
42 String selectedItem = select.getSelectedItem();
43 String text = tf.getText();
44 System.out.println(selectedItem+text);
45 }
46 });
47
48 frame.addWindowListener(new WindowAdapter() {
49 @Override
50 public void windowClosing(WindowEvent e) {
51 System.exit(0);
52 }
53 });
54
55
56 }
57 public static void main(String[] args) {
58 new ListenerTestDemo().init();
59 }
60 }

AWT06-事件处理的更多相关文章

  1. JavaScript权威设计--事件处理介绍(简要学习笔记十七)

    1.事件相关概念 事件类型:一个用来说明发生什么类型事件的字符串 事件目标:是发生的事件或与之相关的对象. 事件处理程序(事件监听程序):是处理货响应事件的函数. 事件对象:是与特定事件相关并且包含有 ...

  2. JavaScript移除绑定在元素上的匿名事件处理函数

    前言: 面试的时候有点蒙,结束之后想想自己好像根本就误解了面试官的问题,因为我理解的这个问题本身就没有意义.但是当时已经有一些思路,但是在一个点上被卡住. 结束之后脑子瞬间灵光,想出了当时没有迈出的那 ...

  3. linux输入子系统(input subsystem)之evdev.c事件处理过程

    1.代码 input_subsys.drv.c 在linux输入子系统(input subsystem)之按键输入和LED控制的基础上有小改动,input_subsys_test.c不变. input ...

  4. 【repost】JavaScript 事件模型 事件处理机制

    什么是事件? 事件(Event)是JavaScript应用跳动的心脏 ,也是把所有东西粘在一起的胶水.当我们与浏览器中 Web 页面进行某些类型的交互时,事件就发生了.事件可能是用户在某些内容上的点击 ...

  5. 【原】iOS学习之事件处理的原理

    在iOS学习23之事件处理中,小编详细的介绍了事件处理,在这里小编叙述一下它的相关原理 1.UITouch对象 在触摸事件的处理方法中都会有一个存放着UITouch对象的集合,这个参数有什么用呢? ( ...

  6. android事件处理之基于监听

    Android提供了了两种事件处理方式:基于回调和基于监听. 基于监听: 监听涉及事件源,事件,事件监听器.用注册监听器的方法将某个监听器注册到事件源上,就可以对发生在事件源上的时间进行监听. 最简单 ...

  7. Nova PhoneGap框架 第七章 设备事件处理

    我们的框架包含了几种设备事件的处理,目的是为了让我们的程序员更容易的完成代码.这些事件包括:回退键(Android)和横竖屏切换事件. 7.1 Android回退键 首先来说说回退键的事件处理.当用户 ...

  8. 译:DOM2中的高级事件处理(转)

    17.2. DOM2中的高级事件处理(Advanced Event Handling with DOM Level 2)        译自:JavaScript: The Definitive Gu ...

  9. Java基础学习 -- GUI之 事件处理基础

    事件处理可以简单地这么理解,当有一个事件产生,程序要根据这个事件做出响应.比如,我们做了一个可以通过按钮改变背景颜色的窗口,当我们点击按钮时便产生了一个事件,程序会根据这个事件来做出响应,也就是去改变 ...

  10. js事件处理、事件对象

    事件类型分类: 1 添加在html结构中的事件 <div id="div1" onclick="alert('append click event in html' ...

随机推荐

  1. redhat-NFS服务的配置与应用

    ---恢复内容开始--- 1.NFS服务简述 NFS实现Windows系统中资源共享的功能.NFS采用客户/服务器工作模式,客户端将服务器中的共享目录挂载到自己的某个目录下,这个目录可以与其他客户机的 ...

  2. Spark SQL | 目前Spark社区最活跃的组件之一

    Spark SQL是一个用来处理结构化数据的Spark组件,前身是shark,但是shark过多的依赖于hive如采用hive的语法解析器.查询优化器等,制约了Spark各个组件之间的相互集成,因此S ...

  3. Dynamics 365-表单元素取值/赋值

    取值/赋值 参考: 山人丶 提示: 查找类型赋值时需指定目标实体,记录名称及id值 时间和日期类型赋值时需赋值Date类型 //获取new_name的值(单行文本) Xrm.Page.getAttri ...

  4. Java数据结构(七)—— 排序算法

    排序算法(Sort Algorithm) 排序算法介绍和分类 将一组数据,依指定顺序进行排列 排序的分类 内部排序 指将需要处理的所有数据都加载到内部存储器中进行排序 外部排序 数据量过大,无法全部加 ...

  5. 你知道第一个C语言C++编译器是如何诞生的吗?

    当今几乎所有的实用的编译器/解释器(以下统称编译器)都是用 C 语言编写的,有一些语言比如 Clojure,Jython 等是基于 JVM 或者说是用 Java 实现的,IronPython 等是基于 ...

  6. python办公入门7:xlwt

    xlwt写入excel步骤 创建工作簿 创建工作表 填充工作表内容 保存文件 1 import xlwt 2 3 #创建工作簿 4 wb=xlwt.Workbook() 5 #创建工作表 6 ws=w ...

  7. java42

    1.Random类 随机生成某个整数 Random r = new Random(); System.out.println(r.nextInt()); 伪随机数:第一次打印为随机,再次运行,数字将保 ...

  8. Prometheus 使用之 node exporter

    本文使用的 Prometheus 版本为 2.22.0,node exporter 版本为 1.0.1:部署在 Linux 服务器Prometheus 是开源的监控报警系统和时序列数据库 (TSDB) ...

  9. 【万字长文】Dubbo 入门总结 ,一款高性能的 Java RPC 框架

    这篇文章是我学习整理 Dubbo 的一篇文章,首先大部分内容参考了官网 + 某硅谷的视频,内容讲解进行了重新编排,40多张图片,也都是我修改重制的,虽然一万多字,但是其实也可以看出来,更多的内容集中在 ...

  10. 老猿学5G:融合计费场景的离线计费会话的Nchf_OfflineOnlyCharging_Create创建操作

    ☞ ░ 前往老猿Python博文目录 ░ 一.Nchf_OfflineOnlyCharging_Create消息交互流程 Nchf_OfflineOnlyCharging_Create服务化操作请求是 ...