事件适配器Adapters

  在上一篇文章中:

  http://www.cnblogs.com/mengdd/archive/2013/02/06/2908241.html

  第二个例子中,可以看到要实现相应的事件监听器接口,就必须实现其中的所有方法。

  有的接口中包含多个方法(多个事件处理器),而有时我们只需要其中的一两个,这时候其他方法就只是空实现。

  为简化编程,JDK针对大多数事件监听器接口定义了相应的实现类,我们称之为事件适配器(Adapter)类

  在适配器类中,实现了相应监听器接口的所有方法,但不做任何事情,即这些Adapter类中的方法都是空的。

  只要继承适配器类,就等于实现了相应的监听器接口。

  如果要对某类事件的某种情况进行处理,只要覆盖相应的方法就可以了,其他的方法再也不用简单实现了。

  所以你定义的Listener可以继承Adapter类,而且只需重写你所需要的方法。

  但是要注意适配器这里用的是继承extends,而Java是单继承的机制。如果想用作事件监听器的类已经继承了别的类,就不能再继承适配器了,只能去实现事件监听器接口了。

程序实例

  将上文中的例子用适配器重新实现以下,可以看到少了很多空方法。

适配器使用实例

package com.learnjava.awt;import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.sql.Date;public class MyAdapterTest extends MouseAdapter
{private Frame frame;private Label label;private Button button;private TextField textField;public void go(){frame = new Frame("My Frame");// 加上窗口监听器,其中主要实现了退出功能frame.addWindowListener(new MyWindowListener2());// 加一个标签label = new Label("This is my Window");frame.add(label, BorderLayout.NORTH);// 加一个按钮button = new Button("MyButton");frame.add(button, BorderLayout.WEST);// 设置按钮事件监听器,按钮按下时会向控制台输出信息button.addActionListener(new MyButtonListener2());// 加一个文本编辑框textField = new TextField(40);frame.add(textField, BorderLayout.SOUTH);// 加上鼠标动作监听器,因为类本身实现了这两个接口,所以参数是thisframe.addMouseListener(this);frame.addMouseMotionListener(this);// 可以添加多个监听器,所以还可以定义其他的,如MyMouseListener类,然后加上// 设置刚好能容纳这些控件的尺寸
        frame.pack();// 设置为可见frame.setVisible(true);}public static void main(String[] args){MyWindow window = new MyWindow();window.go();}@Overridepublic void mouseMoved(MouseEvent e){String str = "x = " + e.getX() + ", y = " + e.getY();this.textField.setText(str);System.out.println(str);}@Overridepublic void mouseExited(MouseEvent e){this.textField.setText("the mouse has exited.");}}class MyButtonListener2 implements ActionListener
{// 因为ActionListener只有一个方法,所以没有适配器
@SuppressWarnings("deprecation")@Overridepublic void actionPerformed(ActionEvent e){// 输出信息System.out.println("The Button is pressed!");// 输出时间戳Long time = e.getWhen();System.out.println("timestamp: " + time);// 日期时间Date date = new Date(time);System.out.println(date.toLocaleString());}}class MyWindowListener2 extends WindowAdapter
{@Overridepublic void windowClosing(WindowEvent e){System.out.println("windowClosing");// 退出System.exit(0);}}

参考资料

  张龙老师Java SE教学视频。

Java 事件适配器 Adapter相关推荐

  1. java事件适配器_java 事件适配器

    java 事件适配器. 事件适配器,为一些Listener接口提供了适配器(Adapter)类 通过继承事件所对应的Adapter类,只需重写需要的方法 提供了一种简单的实现监听器的手段,可以缩短程序 ...

  2. java事件适配器是接口吗,下列不属于java.event包中定义的事件适配器的是( )

    摘要: 感应式,下列电动式,磁电式.,定义的事花坛模纹计以据为依的色彩设.下列花境作为景物景都可的背,配器好的A花果最中效栅栏假山请选墙BC绿篱D出其.... 感应式,下列电动式,磁电式. 下列现A心 ...

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

    12.1.8  Java中的应用-AWT事件适配器(接口的适配器模式) 从以上的学习我们已经了解到,基于接口的适配器模式是采用抽象化接口的方式,来达到节省接口函数的目的,这一特性特别适合于Java A ...

  4. 如何定义适配器adapter类_设计模式22-Adapter(适配器)模式-组件接口适配

    在软件开发过程中,有时候系统的数据和行为都正确,但接口不符合,这时候我们就应该考虑使用适配器模式,适配器的作用即将一个类的接口转换成客户希望的另外一个接口.它使得原本由于接口不兼容而不能一起工作的那些 ...

  5. Ruby设计模式透析之 —— 适配器(Adapter)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9400153 此为Java设计模式透析的拷贝版,专门为Ruby爱好者提供的,不熟悉R ...

  6. awt--WindowListener ---引出下一节事件适配器

    WindowListener  监听窗口的所有行为,所有抽象方法必须全部实现 但是现实中很多时候只需要其中一个监听方法就够了 ,比如只监听关闭窗口的行为额  windowClosing(windowE ...

  7. Java事件模型与Android事件模型的比较

    主要内容: Android App开发时,上层用的是Java语言,二者都有事件处理机制,例如,JavaGUI中的按钮点击事件,Android Button的点击事件等. 本节通过Java代码的使用,和 ...

  8. java 简单事件的使用,如何正确的使用Java事件通知(1)

    如何正确的使用Java事件通知(1) 通过实现观察者模式来提供 Java 事件通知(Java event notification)似乎不是件什么难事儿,但这过程中也很容易就掉进一些陷阱.本文介绍了我 ...

  9. java 事件通知_正确获取Java事件通知

    java 事件通知 实现观察者模式以提供Java事件通知似乎是一件容易的事. 但是,容易陷入一些陷阱. 这是我在各种场合不慎造成的常见错误的解释-- Java事件通知 让我们从一个简单的bean St ...

最新文章

  1. Spring Boot 2.3.0——以war方式打包失败[webxml attribute is required]解决方案
  2. Centos 安装 jdk 和配置环境变量
  3. CentOS详解top命令各个数据的含义
  4. showmodaldialog 为什么不能复制_防复制的门禁读头可以防止UID和FUID读卡器
  5. fast group合计 report_FastReport报表设计.doc
  6. 转帖:免费申请样片的公司大全!!
  7. led计数电路实验报告_至简设计系列_状态机实现LED交通灯2
  8. 一个页面多个ajax统一loading,页面有多个向后台发送的请求加载过程中显示loading,加载完成loading消失...
  9. 搭建自己的Nuget服务器
  10. Linux的目录说明
  11. 降采样_嫦娥五号,欢迎回家!我国首次地外天体采样返回任务圆满完成
  12. OpenCV之基础图像容器Mat(2)
  13. 最强面试题整理第一弹:Python 基础面试题(附答案)
  14. 使用国产化的TongWeb服务器使用手册
  15. Jenkins Pipeline 手记(1)—— 什么是CPS编程
  16. 2019/9/10谷歌开发者大会汇总
  17. 调用系统safair 在模拟器下无法成功
  18. PHP距离高考还剩多少天,今天距离2022年高考还有多少天
  19. esp8266 nvs应用
  20. Rime常用配置||输入默认英文

热门文章

  1. 怎么关闭wordpress评论
  2. gridview列 数字、货币和日期 显示格式
  3. 好多Javascript日期选择器呀-7
  4. 调试JDK源码-一步一步看HashMap怎么Hash和扩容
  5. readelf和ldd分析elf文件
  6. Windows客户端C/C++编程规范“建议”——指针
  7. K-最近邻法(KNN)简介
  8. android 自定义radiobutton 样式,RadioButton自定义点击时的背景颜色
  9. mybatis 一对多_MyBatis面试题集合,90%会遇到这些问题
  10. 北京大学深圳研究生院计算机学什么,2018年北京大学深圳研究生院408计算机学科专业基础综合之计算机操作系统考研核心题库...