在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. Android10_原理机制系列_AMS之AMS的启动

    概述 该篇基于AndroidQ,主要介绍系统启动中的 AMS(ActivityManagerService)的启动过程. AMS对四大组件(AndroidQ将activity移到了ActivityTa ...

  2. Docker学习6:使用docker构建Jekyll服务和java服务

    写在前面 ## 文章Dockerfile中涉及apt-get 等操作需更换镜像 在Dockerfile中添加下列 Dockerfile源码,见下面作者githubhttps://github.com/ ...

  3. python-网络安全编程第七天(base64模块)

    前言 睡不着,那就起来学习其实base64模块很早之前用过今天做爬虫的时候有个URL需要用它来编码一下 所以百度又学了一下遇到最大的问题就是python3和python2区别问题 python3的这个 ...

  4. 【Azure Redis 缓存 Azure Cache For Redis】使用Redis自带redis-benchmark.exe命令测试Azure Redis的性能

    问题描述 关于Azure Redis的性能问题,在官方文档中,可以查看到不同层级Redis的最大连接数,每秒处理请求的性能. 基本缓存和标准缓存 C0 (250 MB) 缓存 - 最多支持 256 个 ...

  5. dsu on tree (树上启发式合并) 详解

    一直都没出过算法详解,昨天心血来潮想写一篇,于是 dsu on tree 它来了 1.前置技能 1.链式前向星(vector 建图) 2.dfs 建树 3.剖分轻重链,轻重儿子 重儿子 一个结点的所有 ...

  6. Lombok之@Builder注解

    Lombok之@Builder注解 前言 Lombok大家都知道,在使用POJO过程中,它给我们带来了很多便利,省下大量写get.set方法.构造器.equal.toString方法的时间.除此之外, ...

  7. 听说高手都用记事本写C语言代码?那你知道怎么编译运行吗?

    坊间传闻高手都喜欢用记事本写代码,那么问题来了,我们以C语言为例,如何用记事本编译运行呢?其实最简单的方式就是安装GCC编译器,在记事本编写C语言程序,然后再在命令行用GCC编译运行,下面我简单介绍一 ...

  8. 关于element中修改组件使用深度选择器/deep/的问题

    作为一个小白,在使用饿了么ui的时候,想改一下里面的组件属性,但是发现虽然在页面上能找到对应的标签,然而在代码里却没法找到,使用了两种方法来修改其中的默认样式 第一种,去除style标签里的scope ...

  9. Centos7配置阿里epel源|yum源

    这一步非常重要.重要.重要.在这解释一下源的概念,打个比方如果手机想获取一个软件,可以选择很多途径,如华为的华为商店,小米的应用商店,苹果的App store,源就相当于各种手机获取软件的商店.因为国 ...

  10. 第二十四章、containers容器类部件QScrollArea滚动区域详解

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 容器部件就是可以在部件内放置其他部件的部件,在Qt Designer中可以使用的容器部件有 ...