在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. Cisco思科模拟器路由器各个端口IP地址的配置及路由协议RIP的配置 入门详解 - 精简归纳

    Cisco思科模拟器路由器各个端口IP地址的配置及路由协议RIP的配置 入门详解 - 精简归纳 JERRY_Z. ~ 2020 / 11 / 21 转载请注明出处!️ 附: 交流方式: ️ ️ ️ Q ...

  2. linux系统中 SElinux安全子系统

    1.SElinux 是什么? SElinux(Security-Enhanced Linux)是美国国家安全局在linux开源社区的帮助下开发的一个强制访问控制(Mandatory Access Co ...

  3. Dockerfile中如何自动回答标准输入的问题

    前言大家在用docker build制作自己的image的時候,都会用RUN命令来执行一些操作来安装某些必须的软件. 而一些软件的安装过程中会需要用户来输入yes/no或者y/n来确定一些东西后才能进 ...

  4. 面试官:小伙子,给我说一下mysql 乐观锁和悲观锁吧

    悲观锁介绍 悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中, 将数据处于锁定状态.悲观锁的实现,往往依靠数据库 ...

  5. 在FL Studio中制作和优化人声和弦(Vocal Chords)

    人声和弦在Future Bass.Melodic Dubstep等类型的电子音乐中被常用.与一般的和弦相同,其主要起到为主旋律做铺垫的效果,但是人声和弦加入了人声的因素,可以使得和弦更有趣,更有电子音 ...

  6. Boom 3D的广播有哪些,有啥特色

    Boom 3D(Windows系统)不仅为用户提供了包括3D立体音效.古典音乐音效在内的多种音效增强功能,而且还为用户提供了广播功能.该广播功能不仅涵盖了国内广播节目,而且还涵盖了国际广播节目. 接下 ...

  7. Vue最简单的实现网页Live2D看板娘

    Live2D看板娘 前言 二.使用步骤 1.引入 2.设置样式 结尾(后续更新更强的配置看板娘~) 前言 最近想给自己的网页添点新花样,然后就想到了别人的网站都有一些看板娘的玩意儿,看着很舒服,鉴于自 ...

  8. Invalid operation updata 错误解决方法

    错误: huny@DESKTOP-N1EBKQP:/mnt/c/Users/Administrator$ sudo apt-get updata E: Invalid operation updata ...

  9. Tarjan 算法总结

    一些概念 连通:无向图中的任意两点都可以互相到达. 强连通:有向图中的任意两点都可以互相到达. 连通分量:无向图的极大连通子图. 强连通分量:有向图的极大强连通子图. DFS 生成树:对一张图(有向无 ...

  10. Codeforces Round #668 C. Balanced Bitstring (Div. 2)题解(思维)

    题目链接 题目大意 给你一个长为n的01串,要你使得每一个01串中0和1的个数都要相等,01串中有?字符,你可以使得这个字符变为0或1,要你求是否可以满足条件.输出YES或NO 题目思路 这个题目的难 ...