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类的一些理解的更多相关文章

  1. 解析java实体类

    对java实体类的众多理解: A .就是属性类,通常定义在model层里面 B. 一般的实体类对应一个数据表,其中的属性对应数据表中的字段. 好处: 1.对对象实体的封装,体现OO思想. 2.属性可以 ...

  2. 深入理解java虚拟机【Java Class类文件结构】

    Java语言从诞生之时就宣称一次编写,到处运行的跨平台特性,其实现原理是源码文件并没有直接编译成机器指令,而是编译成Java虚拟机可以识别和运行的字节码文件(Class类文件,*.class),字节码 ...

  3. (转)《深入理解java虚拟机》学习笔记5——Java Class类文件结构

    Java语言从诞生之时就宣称一次编写,到处运行的跨平台特性,其实现原理是源码文件并没有直接编译成机器指令,而是编译成Java虚拟机可以识别和运行的字节码文件(Class类文件,*.class),字节码 ...

  4. Java中Class和单例类的作用与类成员的理解

    Java中Class类的作用与深入理解 在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时的类型标识.这个信息跟踪着每个对象所属的类.JVM利用运行时信息选择相应的方法执行.而保存 ...

  5. java数据库连接类,已经把数据库操作的方法都封装好了

    在这里分享一个已经封装好了的java数据库连接类,只要创建对象就可以实现数据库的增删改查操作,用过都说好.其实这个不是我自己写的,是一个理解和学习能力超高的朋友写的,他也很乐于分享交流,本人也深受他的 ...

  6. java复用类

    java复用类英文名叫reusing classes  ,重新使用的类,复用的意思就是重复使用的类,其实现方法就是我们平常使用的组合和继承: 1.组合: has-a 的关系  (自我理解:组合就是我们 ...

  7. 从字节码和JVM的角度解析Java核心类String的不可变特性

    1. 前言 最近看到几个有趣的关于Java核心类String的问题. String类是如何实现其不可变的特性的,设计成不可变的好处在哪里. 为什么不推荐使用+号的方式去形成新的字符串,推荐使用Stri ...

  8. Java开发知识之Java字符串类

    Java开发知识之Java字符串类 一丶简介 任何语言中.字符串都是很重要的.都涉及到字符串的处理. 例如C++中. 字符串使用内存. 并提供相应的函数进行处理 strcmp strcat strcp ...

  9. Java内存管理的进一步理解-模拟过程图解

    Java内存管理的进一步理解-模拟过程图解--转载 java的内存管理分为: 1.堆内存:2.栈内存:3.方法区:4.本地方法区 /* 1:方法区      方法区存放装载的类数据信息包括:      ...

随机推荐

  1. JAVA获取项目工程下的文件

    JAVA获取 工程下的文件  其实很简单主要是理解编译路径  ①class.getResource public static void main(String[] args) { WordTest ...

  2. Oracle Goldengate是如何保证数据有序和确保数据不丢失的?

    工作中一直在用Oracle 的中间件Oracle GondenGate 是如何保证消息的有序和不丢失呢? Oracle GoldenGate逻辑架构 首先,先看一下Oracle GoldenGate ...

  3. CRM 总结

    目录 一. CRM客户关系管理系统 1. CRM是什么? 里面都有哪些功能(业务)? 2. 什么是公户?什么是私户?为什么要做这个区分? 3. 请列举出CRM系统中的表 4. 通过ORM操作对数据库的 ...

  4. scrapy实战5 POST方法抓取ajax动态页面(以慕课网APP为例子):

    在手机端打开慕课网,fiddler查看如图注意圈起来的位置 经过分析只有画线的page在变化 上代码: items.py import scrapy class ImoocItem(scrapy.It ...

  5. 01(a)一元函数_多元函数_无约束极值问题的求解

    1. 一元函数的极值问题  (函数光滑) 对于一个一元函数$f(x)$,怎么才能找出它的极值呢? 1.1根据定义:如果存在一点${{x}_{0}}$,在点${{x}_{0}}$的某个领域$U({{x} ...

  6. IDM 6.27.5(Internet Download Manager)中文破解版下载神器

    IDM一直是我最喜欢的下载工具,感觉用的比迅雷爽,简单使用,对付网盘有一套.IDM(Internet Download Manager)和迅雷的下载提速方式不同,从原理上来说,IDM速度较稳定,迅雷下 ...

  7. 快速掌握mongoDB(一)——mongoDB安装部署和常用shell命令

    1.mongoDB简介 mongoDB 是由C++语言编写的,是一种分布式的面向文档存储的开源nosql数据库.nosql是Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统 ...

  8. python 3.7 新特性 - popitem

    百度上大多文章说 popitem  随机删除字典的一个键值对 python 3.7 官方文档已经说了,popitem 删除字典最后一个添加进去的键值对

  9. Spark 中的机器学习库及示例

    MLlib 是 Spark 的机器学习库,旨在简化机器学习的工程实践工作,并方便扩展到更大规模.MLlib 由一些通用的学习算法和工具组成,包括分类.回归.聚类.协同过滤.降维等,同时还包括底层的优化 ...

  10. Bzoj 1229: [USACO2008 Nov]toy 玩具 题解 三分+贪心

    1229: [USACO2008 Nov]toy 玩具 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 338  Solved: 136[Submit] ...