AWT06-事件处理
在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-事件处理的更多相关文章
- JavaScript权威设计--事件处理介绍(简要学习笔记十七)
1.事件相关概念 事件类型:一个用来说明发生什么类型事件的字符串 事件目标:是发生的事件或与之相关的对象. 事件处理程序(事件监听程序):是处理货响应事件的函数. 事件对象:是与特定事件相关并且包含有 ...
- JavaScript移除绑定在元素上的匿名事件处理函数
前言: 面试的时候有点蒙,结束之后想想自己好像根本就误解了面试官的问题,因为我理解的这个问题本身就没有意义.但是当时已经有一些思路,但是在一个点上被卡住. 结束之后脑子瞬间灵光,想出了当时没有迈出的那 ...
- linux输入子系统(input subsystem)之evdev.c事件处理过程
1.代码 input_subsys.drv.c 在linux输入子系统(input subsystem)之按键输入和LED控制的基础上有小改动,input_subsys_test.c不变. input ...
- 【repost】JavaScript 事件模型 事件处理机制
什么是事件? 事件(Event)是JavaScript应用跳动的心脏 ,也是把所有东西粘在一起的胶水.当我们与浏览器中 Web 页面进行某些类型的交互时,事件就发生了.事件可能是用户在某些内容上的点击 ...
- 【原】iOS学习之事件处理的原理
在iOS学习23之事件处理中,小编详细的介绍了事件处理,在这里小编叙述一下它的相关原理 1.UITouch对象 在触摸事件的处理方法中都会有一个存放着UITouch对象的集合,这个参数有什么用呢? ( ...
- android事件处理之基于监听
Android提供了了两种事件处理方式:基于回调和基于监听. 基于监听: 监听涉及事件源,事件,事件监听器.用注册监听器的方法将某个监听器注册到事件源上,就可以对发生在事件源上的时间进行监听. 最简单 ...
- Nova PhoneGap框架 第七章 设备事件处理
我们的框架包含了几种设备事件的处理,目的是为了让我们的程序员更容易的完成代码.这些事件包括:回退键(Android)和横竖屏切换事件. 7.1 Android回退键 首先来说说回退键的事件处理.当用户 ...
- 译:DOM2中的高级事件处理(转)
17.2. DOM2中的高级事件处理(Advanced Event Handling with DOM Level 2) 译自:JavaScript: The Definitive Gu ...
- Java基础学习 -- GUI之 事件处理基础
事件处理可以简单地这么理解,当有一个事件产生,程序要根据这个事件做出响应.比如,我们做了一个可以通过按钮改变背景颜色的窗口,当我们点击按钮时便产生了一个事件,程序会根据这个事件来做出响应,也就是去改变 ...
- js事件处理、事件对象
事件类型分类: 1 添加在html结构中的事件 <div id="div1" onclick="alert('append click event in html' ...
随机推荐
- FL Studio录制面板知识讲解
FL Studio录制面板可以设置与录制有关的选项,它还有一个用来设置音符对齐的全局吸附选择器.刚接触水果这款音乐制作软件的同学通常不是很清楚这里的知识的,下面小编就给大家讲解一下. 1.首先,我们来 ...
- 「CSP-S 2019」格雷码
[题目描述] 传送门 [题解] 题目中已经清楚地告诉你怎么用n位格雷码推n+1位格雷码, 直接二叉树模拟即可 注意要使用unsigned long long(如果这道题没有95分部分分,不知道有多少人 ...
- 添加mysqli扩展
find / -name phpize 进入mysqli目录下 ./configue -prefix=/usr/local/mysqli . make && make install ...
- 采集post传输的数据
采集数据,网页上的数据是开发者通过ajax的post方式显示的,就得用到curl以及它的跨域方法 代码: $post_data------post传过去的参数 $ch = curl_init(); $ ...
- Java8 Stream:2万字20个实例,玩转集合的筛选、归约、分组、聚合
点波关注不迷路,一键三连好运连连! 先贴上几个案例,水平高超的同学可以挑战一下: 从员工集合中筛选出salary大于8000的员工,并放置到新的集合里. 统计员工的最高薪资.平均薪资.薪资之和. 将员 ...
- C# Winform TCP发消息
服务端: 代码: using System; using System.Collections.Generic; using System.IO; using System.Net; using Sy ...
- 我与PHP和git不得不说的故事(梦开始的地方,从入门到放弃记录第一章)
·关于下载 阿瑶瑶跟wampsever官网搏斗了一下午,其实我觉得教材可能在PUA我.谷歌说它给的网址安全证书过期,然后下载以断网收场.(阿瑶的第一战,以失败告终) [经过我玲姐指点,下载路径变为迅雷 ...
- ScheduledThreadPoolExecutor源码分析-你知道定时线程池是如何实现延迟执行和周期执行的吗?
Java版本:8u261. 1 简介 ScheduledThreadPoolExecutor即定时线程池,是用来执行延迟任务或周期性任务的.相比于Timer的单线程,定时线程池在遇到任务抛出异常的时候 ...
- ERP费用报销操作与设计--开源软件诞生31
赤龙ERP费用报销讲解--第31篇 用日志记录"开源软件"的诞生 [进入地址 点亮星星]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/redra ...
- PyQt学习随笔:Model/View开发时从Model相关类派生自定义类需要注意的问题
在<PyQt学习随笔:重写setData方法截获Model/View中视图数据项编辑的注意事项>介绍的方法,从Model相关类派生自定义类,通过重写setData方法以获取View中数据的 ...