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

1.GUI事件处理机制

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

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

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

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

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

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

  使用步骤:

    1.创建事件源

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

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

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

      

  1. 1 import javax.swing.*;
  2. 2 import java.awt.*;
  3. 3 import java.awt.event.ActionEvent;
  4. 4 import java.awt.event.ActionListener;
  5. 5
  6. 6 public class EventTestDemo {
  7. 7 Frame frame = new Frame("测试事件监听");
  8. 8
  9. 9 TextField tf = new TextField(30);
  10. 10
  11. 11 Button submit = new Button("Submit");
  12. 12
  13. 13 Box box = Box.createVerticalBox();
  14. 14 public void init(){
  15. 15 box.add(tf);
  16. 16 box.add(submit);
  17. 17
  18. 18 submit.addActionListener(new ActionListener() {
  19. 19 @Override
  20. 20 public void actionPerformed(ActionEvent e) {
  21. 21 tf.setText("你好世界");
  22. 22 }
  23. 23 });
  24. 24
  25. 25 frame.add(box);
  26. 26
  27. 27 frame.pack();
  28. 28 frame.setVisible(true);
  29. 29 }
  30. 30
  31. 31 public static void main(String[] args) {
  32. 32 new EventTestDemo().init();
  33. 33 }
  34. 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. 1 import javax.swing.*;
  2. 2 import java.awt.*;
  3. 3 import java.awt.event.*;
  4. 4
  5. 5 public class ListenerTestDemo {
  6. 6 Frame frame = new Frame("事件监听器测试");
  7. 7
  8. 8 Box box = Box.createHorizontalBox();
  9. 9
  10. 10 Choice select = new Choice();
  11. 11
  12. 12 TextField tf = new TextField(30);
  13. 13
  14. 14 public void init(){
  15. 15 select.add("超人");
  16. 16 select.add("蝙蝠侠");
  17. 17 select.add("钢铁侠");
  18. 18
  19. 19 box.add(select);
  20. 20 box.add(tf);
  21. 21
  22. 22 frame.add(box);
  23. 23
  24. 24 frame.setLocation(500,250);
  25. 25
  26. 26 frame.pack();
  27. 27
  28. 28 frame.setVisible(true);
  29. 29
  30. 30 tf.addTextListener(new TextListener() {
  31. 31 @Override
  32. 32 public void textValueChanged(TextEvent e) {
  33. 33 String selectedItem = select.getSelectedItem();
  34. 34 String text = tf.getText();
  35. 35 System.out.println(selectedItem+text);
  36. 36 }
  37. 37 });
  38. 38
  39. 39 tf.addActionListener(new ActionListener() {
  40. 40 @Override
  41. 41 public void actionPerformed(ActionEvent e) {
  42. 42 String selectedItem = select.getSelectedItem();
  43. 43 String text = tf.getText();
  44. 44 System.out.println(selectedItem+text);
  45. 45 }
  46. 46 });
  47. 47
  48. 48 frame.addWindowListener(new WindowAdapter() {
  49. 49 @Override
  50. 50 public void windowClosing(WindowEvent e) {
  51. 51 System.exit(0);
  52. 52 }
  53. 53 });
  54. 54
  55. 55
  56. 56 }
  57. 57 public static void main(String[] args) {
  58. 58 new ListenerTestDemo().init();
  59. 59 }
  60. 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. FL Studio录制面板知识讲解

    FL Studio录制面板可以设置与录制有关的选项,它还有一个用来设置音符对齐的全局吸附选择器.刚接触水果这款音乐制作软件的同学通常不是很清楚这里的知识的,下面小编就给大家讲解一下. 1.首先,我们来 ...

  2. 「CSP-S 2019」格雷码

    [题目描述] 传送门 [题解] 题目中已经清楚地告诉你怎么用n位格雷码推n+1位格雷码, 直接二叉树模拟即可 注意要使用unsigned long long(如果这道题没有95分部分分,不知道有多少人 ...

  3. 添加mysqli扩展

    find / -name phpize 进入mysqli目录下 ./configue -prefix=/usr/local/mysqli . make && make install ...

  4. 采集post传输的数据

    采集数据,网页上的数据是开发者通过ajax的post方式显示的,就得用到curl以及它的跨域方法 代码: $post_data------post传过去的参数 $ch = curl_init(); $ ...

  5. Java8 Stream:2万字20个实例,玩转集合的筛选、归约、分组、聚合

    点波关注不迷路,一键三连好运连连! 先贴上几个案例,水平高超的同学可以挑战一下: 从员工集合中筛选出salary大于8000的员工,并放置到新的集合里. 统计员工的最高薪资.平均薪资.薪资之和. 将员 ...

  6. C# Winform TCP发消息

    服务端: 代码: using System; using System.Collections.Generic; using System.IO; using System.Net; using Sy ...

  7. 我与PHP和git不得不说的故事(梦开始的地方,从入门到放弃记录第一章)

    ·关于下载 阿瑶瑶跟wampsever官网搏斗了一下午,其实我觉得教材可能在PUA我.谷歌说它给的网址安全证书过期,然后下载以断网收场.(阿瑶的第一战,以失败告终) [经过我玲姐指点,下载路径变为迅雷 ...

  8. ScheduledThreadPoolExecutor源码分析-你知道定时线程池是如何实现延迟执行和周期执行的吗?

    Java版本:8u261. 1 简介 ScheduledThreadPoolExecutor即定时线程池,是用来执行延迟任务或周期性任务的.相比于Timer的单线程,定时线程池在遇到任务抛出异常的时候 ...

  9. ERP费用报销操作与设计--开源软件诞生31

    赤龙ERP费用报销讲解--第31篇 用日志记录"开源软件"的诞生 [进入地址 点亮星星]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/redra ...

  10. PyQt学习随笔:Model/View开发时从Model相关类派生自定义类需要注意的问题

    在<PyQt学习随笔:重写setData方法截获Model/View中视图数据项编辑的注意事项>介绍的方法,从Model相关类派生自定义类,通过重写setData方法以获取View中数据的 ...