Java ActionListenner类的一些理解
Java的ActionListenner事实上我去年年这个时候大概就已经接触到了,也学会了比较简单的使用。但却始终不能理解ActionListenner的一系列的运行是怎么维持这么一个联系的?
我产生了很多疑问,但却无法解决,也许是当初实在对Java理解得太浅了。
在一年后的今天,我再次接触到了ActionListenner,且有了一些新的个人的理解,特在此记录。
正文:
首先我一开始所产生的几个疑问:
为什么要有ActionListenner?
ActionListener是什么?
ActionListenner如何使用?
ActionListenner是如何与事件(我的操作,例如:点击某个按钮)产生的联系?
个人理解: 这些问题提得有点太大了,或许并不是我现在能定义的,但是我想暂且回答一下之前的自己,以达到一个记录与学习的作用吧。
为什么要有ActionListenner?
计算机通过键盘和鼠标进行操作,但是键盘和鼠标所谓的"输入"和"点击",其实仅仅是传送给了电脑。而我们所看见的点击"X",就关闭对应的页面。我打按下键盘"jianpan",输入法就直接出现了一系统可能的提示结果(1.键盘 2.监盘..)让我进行选择。
而如若我们没有各种编程语言中的事件监听类或者方法,那么我们就无法实现这么神奇和优质的人机交互。
如若没有事件监听:
我点击关闭,电脑硬件收到了一个点击的信号,而软件没有任何处理信息的方法,那么也无从关闭,甚至我们连移动鼠标光标也无法做到,人无法与电脑交互,也就是人无从使用电脑。
ActionListener是什么?
根据我所看得Java的ActionListener类发现:这个类是一个接口类,且这个类里面只定义了一个方法。
public interface ActionListener extends EventListener {
/**
* Invoked when an action occurs.
* @param e the event to be processed
*/
public void actionPerformed(ActionEvent e);
}
以上便是Java的ActionListener类,其中actionPerformed是任何继承了这个类都要重写的方法,这个方法可以接收到 ActionEvent e 也就是事件,目前我们暂且不谈什么事件会被传送至这个函数。而对于这个函数的功能来说,很显然:我们可以根据传入的事件的不同,进行不同的处理操作,这个函数也就是一个处理事件的一个函数。而这个类又主要只有这么一个函数(它继承了EventListener,也可能有其他方法)。所以这个类我总结一下是 : 作为一个监听类接口,以规范实现它的类,防止实现的时候忘记对事件信息的处理的一个接口类。
ActionListenner是如何与事件(我的操作,例如:点击某个按钮)产生的联系?
我之所以先回答这个问题在于我认为,如若不知道这个联系是如何产生的,那么就不知道如何好地使用这个类。
首先:ActionListenner是一个接口,那么自然需要一个类去实现它,而实现它的那个类一定需要重写该接口内部的actionPerformed方法,那么就实现了一个可以处理事件信息的功能,而事件从何而来,则是关于另一个方法:注册监听(addActionListener),对于窗口类或者一些组件类都具有这个方法,也可以不准确地说:对于一切可能产生事件信息的类都有这种方法,且这个方法需要传入一个参数,这个参数是一个实现了ActionListenner的事件监听类。
ActionListenner如何使用?以及对产生联系的具体阐述。
举例:一个处于某个窗口类(myFrame)的某个按钮实例button需要实现一个功能即:按下这个按钮,当前对应的窗口背景颜色就变成红色。
那么我们可能需要在窗口类中处理这个按钮的信息,因为设置背景颜色这个操作很可能需要使用到这个类的一些方法,所以我们明确了处理信息在myFrame这个类中,那么就得先实现ActionListenner接口以及它内部的方法来实现对于事件信息的处理,然后我们可能需要在这个方法里面进行一些列的操作:如若我接收到了这个信息,那么我就调整背景颜色,这么个逻辑关系。但至今我们是还没有事件信息会传进来的,因为还没有任何一个"可能产生事件信息的类"在注册监听时传入了这个类产生的引用(this),所以我们还需要使用我们之前的button这个实例去注册监听,并且将this(因为button也在myFrame类内)传入。这时候就达成了一种具体的联系:鼠标在button坐标位置点击了一下,操作系统取得了鼠标的点击操作依据当前光标的坐标,然后对所有注册了监听的控件进行坐标比对,然后得知了点击在button这个控件上,于是根据注册监听时候的地址,找到了并将点击事件消息发送方给了当前button这个对象所属的一个以myFrame创建的实例,然后根据这个类中的处理事件信息的方法模块对信息进行了处理(将背景设置成了红色)。
Java ActionListenner类的一些理解的更多相关文章
- 解析java实体类
对java实体类的众多理解: A .就是属性类,通常定义在model层里面 B. 一般的实体类对应一个数据表,其中的属性对应数据表中的字段. 好处: 1.对对象实体的封装,体现OO思想. 2.属性可以 ...
- 深入理解java虚拟机【Java Class类文件结构】
Java语言从诞生之时就宣称一次编写,到处运行的跨平台特性,其实现原理是源码文件并没有直接编译成机器指令,而是编译成Java虚拟机可以识别和运行的字节码文件(Class类文件,*.class),字节码 ...
- (转)《深入理解java虚拟机》学习笔记5——Java Class类文件结构
Java语言从诞生之时就宣称一次编写,到处运行的跨平台特性,其实现原理是源码文件并没有直接编译成机器指令,而是编译成Java虚拟机可以识别和运行的字节码文件(Class类文件,*.class),字节码 ...
- Java中Class和单例类的作用与类成员的理解
Java中Class类的作用与深入理解 在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时的类型标识.这个信息跟踪着每个对象所属的类.JVM利用运行时信息选择相应的方法执行.而保存 ...
- java数据库连接类,已经把数据库操作的方法都封装好了
在这里分享一个已经封装好了的java数据库连接类,只要创建对象就可以实现数据库的增删改查操作,用过都说好.其实这个不是我自己写的,是一个理解和学习能力超高的朋友写的,他也很乐于分享交流,本人也深受他的 ...
- java复用类
java复用类英文名叫reusing classes ,重新使用的类,复用的意思就是重复使用的类,其实现方法就是我们平常使用的组合和继承: 1.组合: has-a 的关系 (自我理解:组合就是我们 ...
- 从字节码和JVM的角度解析Java核心类String的不可变特性
1. 前言 最近看到几个有趣的关于Java核心类String的问题. String类是如何实现其不可变的特性的,设计成不可变的好处在哪里. 为什么不推荐使用+号的方式去形成新的字符串,推荐使用Stri ...
- Java开发知识之Java字符串类
Java开发知识之Java字符串类 一丶简介 任何语言中.字符串都是很重要的.都涉及到字符串的处理. 例如C++中. 字符串使用内存. 并提供相应的函数进行处理 strcmp strcat strcp ...
- Java内存管理的进一步理解-模拟过程图解
Java内存管理的进一步理解-模拟过程图解--转载 java的内存管理分为: 1.堆内存:2.栈内存:3.方法区:4.本地方法区 /* 1:方法区 方法区存放装载的类数据信息包括: ...
随机推荐
- IDEA中Maven依赖包下载不了的问题解决方案汇总
第一种方案: 第二种方案:下面的几个不要选择. 第三种方案:可能是某一个 dependency 依赖无法下载,导致整个项目都报错 打开具体的报错的maven项目的pom.xml.试着去删除一些 dep ...
- 微服务-springboot多环境配置(开发生产测试环境切换)
springboot根据spring.profiles.active会去寻找应该加载开发环境配置还是生产环境配置 application.properties #生产环境,开发环境,测试环境切换 pr ...
- iOS13中presentViewController的问题
iOS13中presentViewController的问题 更新了Xcode11.0 beta之后,在iOS13中运行代码发现presentViewController和之前弹出的样式不一样. 会出 ...
- HDU 5791:Two(DP)
http://acm.hdu.edu.cn/showproblem.php?pid=5791 Two Problem Description Alice gets two sequences A ...
- redis源码笔记-内存管理zmalloc.c
redis的内存分配主要就是对malloc和free进行了一层简单的封装.具体的实现在zmalloc.h和zmalloc.c中.本文将对redis的内存管理相关几个比较重要的函数做逐一的介绍 参考: ...
- 華氏溫度轉化為攝氏溫度的簡單JavaScript代碼
今天,跟著W3School學到了"JavaScript函數",代碼都挺簡單的,在運算符調用函數的地方寫了一個小程序.原碼程序是這樣的: <!DOCTYPE html> ...
- NOIP 2004 虫食算题解
问题 E: [Noip2004]虫食算 时间限制: 1 Sec 内存限制: 128 MB 题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一 ...
- Java开发实例大全:3月14日练习
import java.io.FileNotFoundException; import java.io.PrintStream; import java.math.BigDecimal; impor ...
- springboot序
springboot序 1.写在前面 (1) 前段时间把文章分了下类(说的是专栏,谈不上),分了三类:springboot.springcloud.mpp数据库greenplum,后来给springc ...
- MySql的数据库优化到底优啥了都??(2)
嘟嘟在写此篇文章之前心里先默念(简单,通俗,工整)*10 吟唱完了,进入正题 3.Memory存储引擎 除了存放一个表结构相关信息的.frm文件在磁盘上,其他数据都存储在内存中.说白点哪天你数据库死机 ...