12.1.8  Java中的应用-AWT事件适配器(接口的适配器模式)

从以上的学习我们已经了解到,基于接口的适配器模式是采用抽象化接口的方式,来达到节省接口函数的目的,这一特性特别适合于Java AWT中的事件处理模式。对于定义的事件监听器接口,它可能包含多个事件处理函数,但在使用时我们往往只需要关注其中的某一种事件,此时就可以使用抽象化适配来将事件监听器接口进行抽象化,给出每一个接口函数的默认实现,这样在需要使用时只需要重写自己需要的函数即可,如图12-8所示。

从图中可以看出,共分为3层:

***层是EventListener顶层事件接口类,它只是定义了一个接口,没有包含任何接口函数。

第二层是AWT的事件监听器接口(以Listener为结尾),每一个监听器接口对应一种窗口事件,其中定义了多个事件处理函数。

第三层是AWT的事件适配器抽象类(以Adapter为结尾),它们分别为对应的监听器接口提供了默认的函数实现。

所有的适配器抽象类都采用了接口的适配器模式来实现。例如,鼠标监听器接口中定义了5个鼠标事件接口函数,如程序12-16所示。

程序12-16  鼠标监听器接口MouseListener.javapackagejava.awt.event;

importjava.util.EventListener;

publicinterfaceMouseListenerextendsEventListener {

/**

* 鼠标单击事件

*/

publicvoidmouseClicked(MouseEvent e);

/**

* 鼠标按下事件

*/

publicvoidmousePressed(MouseEvent e);

/**

* 鼠标释放事件

*/

publicvoidmouseReleased(MouseEvent e);

/**

* 鼠标进入事件

*/

publicvoidmouseEntered(MouseEvent e);

/**

* 鼠标退出事件

*/

publicvoidmouseExited(MouseEvent e);

}

当我们要使用该接口编写鼠标事件处理代码时,就需要实现该接口,并实现5个事件函数,如程序12-17所示。

程序12-17  自定义的鼠标实现类importjava.awt.event.MouseEvent;

importjava.awt.event.MouseListener;

publicclassMyMouseListenerimplementsMouseListener {

@Override

publicvoidmouseClicked(MouseEvent arg0) {

System.out.println("鼠标单击事件");

}

@Override

publicvoidmousePressed(MouseEvent arg0) {

System.out.println("鼠标按下事件");

}

@Override

publicvoidmouseReleased(MouseEvent arg0) {

System.out.println("鼠标释放事件");

}

@Override

publicvoidmouseEntered(MouseEvent arg0) {

System.out.println("鼠标进入事件");

}

@Override

publicvoidmouseExited(MouseEvent arg0) {

System.out.println("鼠标退出事件");

}

}

然而,我们可能只需要处理其中的某一个事件,却不得不编写所有的接口函数,此时就可以使用适配器类MouseAdapter了。

该适配器实现了3个鼠标相关的事件接口,并为这些接口中的所有函数都提供了默认的实现,这些实现的代码为空,表示什么也不做,如程序12-18所示。

程序12-18  鼠标事件适配器MouseAdapter.javapackagejava.awt.event;

publicabstractclassMouseAdapterimplementsMouseListener,

MouseWheelListener, MouseMotionListener {

publicvoidmouseClicked(MouseEvent e) {}

publicvoidmousePressed(MouseEvent e) {}

publicvoidmouseReleased(MouseEvent e) {}

publicvoidmouseEntered(MouseEvent e) {}

publicvoidmouseExited(MouseEvent e) {}

publicvoidmouseWheelMoved(MouseWheelEvent e){}

publicvoidmouseDragged(MouseEvent e){}

publicvoidmouseMoved(MouseEvent e){}

}

此时如果我们只希望处理鼠标单击事件,只需要继承适配器MouseAdapter,

并重写单击事件函数mouseClicked()即可,如程序12-19所示。

程序12-19单击事件处理程序MyMouseClickedListener.java

importjava.awt.event.MouseEvent;

importjava.awt.event.MouseAdapter;

publicclassMyMouseClickedListenerextendsMouseAdapter {

@Override

publicvoidmouseClicked(MouseEvent arg0) {

System.out.println("鼠标单击事件");

}

}

由此可见,通过使用事件的适配器,可以让我们的代码只关注自己的事件,而不必造成不必要的代码浪费。这就是适配器模式在事件处理中的应用。

【责任编辑:董书 TEL:(010)68476606】

点赞 0

java中接口适配器实现,12.1.8 Java中的应用-AWT事件适配器(接口的适配器模式)...相关推荐

  1. 接口大师v3.12,一套满足企业自建OpenAPI、接口平台的解决方案、产品和源代码

    企业自建接口平台的好处 在现代软件系统项目开发中,API接口是不可或缺的组成部分. 不管是内部系统之间的接口调用和提供,还是外部API接口的对接和开发,搭建企业自己统一的接口平台,对API接口的开发. ...

  2. 用java写一个日历_2017.12.2 用java做一个日历

    1.先判断输入的日期是否为闰年 2.在判断输入的月份是否为2月 3.在获取输入的年份和月份的1月1日 的列数 4.在输出 import java.util.*; public class demo{ ...

  3. java 接口中的成员只有静态常量和_Java中抽象类和接口的具体区别是什么?

    谢邀,直接回答. 接口在面向对象编程中占着很重要的地位,它是对于一种事物行为的抽象提取,内部只需要持有接口的引用,外部可以根据具体事物做不同的扩展,而不修改内部的引用逻辑,它的主要作用是在框架中实现不 ...

  4. 在 Java Web 项目中,Service 层和 Dao 层真的有必要每个类都加上接口吗

    作者 l 会点代码的大叔(CodeDaShu) 很多程序员在刚开始工作的时候,接触到的项目都是这样做的:项目的代码被分成 Controller.Service.Dao 层,一个接口对应一个实现类,然后 ...

  5. java接口如何定义常量 c_在Java接口中怎样访问定义的常量呢?

    java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能).那么我们在Java接口中怎 ...

  6. java的接口怎么理解_如何理解Java 中的接口

    一.接口(Interface) 在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法.接口并不是类,编写接口的方 ...

  7. java中Mark接口_JVM源码分析之Java对象头实现

    原标题:JVM源码分析之Java对象头实现 原创申明:本文由公众号[猿灯塔]原创,转载请说明出处标注 "365篇原创计划"第十一篇. 今天呢!灯塔君跟大家讲: JVM源码分析之Ja ...

  8. java中的深度克隆浅克隆_了解Java中的可克隆接口

    java中的深度克隆浅克隆 什么是对象克隆? 对象克隆是生成具有不同名称的对象的精确字段到字段副本的过程. 克隆的对象在内存中有自己的空间,可在其中复制原始对象的内容. 这就是为什么在克隆后更改原始对 ...

  9. java接口版本控制_为什么要在Java中控制类和接口的可见性

    java接口版本控制 维护是软件开发的重要方面之一,并且经验证明,保持较低组件可视性的软件比暴露更多组件的软件更易于维护. 您不会在一开始就意识到它,但是在重新设计应用程序时会严重错过它. 由于保持向 ...

最新文章

  1. centos php fpm 内存,CentOS下yum安装PHP-配置php-fpm服务
  2. java 将换行代替_Java批量将文件中的段落替换成空格,根据指定分隔符换行(SQL示例)...
  3. 前端界面请假管理java_小程序新请假界面
  4. 添加lua_非关系型数据库Redis之Lua脚本
  5. 第2章[2.7] Ext JS数据模型与数据封装
  6. Redis六种底层数据结构
  7. 面向对象程序设计之封装性、继承性、多态性
  8. 在苹果Mac中如何将html网页转成PDF文件?
  9. gaussian09使用教程linux,Gaussian-09-GaussView5.0使用教程.ppt
  10. 多媒体计算机室的好处,多媒体会议室系统带来的好处有什么
  11. Windows把内存设置为0无法开机怎么办
  12. 永洪报表工具_报表工具对比选型系列用例——过程计算
  13. 2011年8月8日我搬到cnblog http://www.cnblogs.com/liuning8023/ (搬家的好日子啊)
  14. 【NLP】Transformer框架原理详解-1
  15. 响应“上上下下左左右右”按键键事件 “按两次返回键退出”
  16. Chapter 6-Blurring Things Up之Depth Imposter
  17. 冯森林:手机淘宝中的那些Web技术
  18. 神经网络模型计算量分析
  19. linux内核zfs,Linus Torvalds回应用户抱怨:不建议使用 ZFS On Linux
  20. 【Python】欧氏距离和余弦距离

热门文章

  1. Linux系统运行级别
  2. MySQL之无限级分类表设计
  3. Quartz框架架构
  4. Bootstrap的引用文件
  5. centos7设置密码策略_Linux系统设置复杂密码策略方法总结
  6. python lambda表达式_Python中lambda表达式
  7. 新买的笔记本电脑怎么分盘_笔记本电脑该如何保养,延长使用寿命
  8. “团队禁止使用Lombok”,被我狠狠的反驳了!
  9. 一整套Java线上故障排查技巧,爱了!
  10. Java 高频面试题:聊一聊 JUC 下的 LinkedBlockingQueue