当前位置: 首页 > 编程日记 > 正文

Java 事件适配器 Adapter

事件适配器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教学视频。

相关文章:

Facebook面经全披露,我是怎么拿到机器学习工程师offer的?

作者 | Rahul Agarwal翻译 | Katie,责编 | 晋兆雨出品 | AI科技大本营头图 | 付费下载于视觉中国去年八月,我正在接受面试。那时,我已经分别接受Google India和Amazon India的机器学习和数据科学职位面试。然后我的上级建议我申请Facebook伦敦…

内存性能参数详解(转载)

内存性能参数详解 先说说最有效提高你机器内存性能的几个参数:CL,TRP,TRCD CAS Latency “列地址选通脉冲潜伏期” BIOS中可能的其他描述为:tCL、CAS Latency Time、CAS Timing Delay,这个值一般是1.5~3之间&#xff0…

一些关于Hibernate延迟加载的误区

最近面试别人,正好出的笔试题中有道关于Hibernate延迟加载的问题,聊天过程中发现很多人对Hibernate的延迟加载有些理解误区,写 些东东在这里,希望对大家有所帮助。 首先是第一个误区:延迟加载只能作用于关联实体看到这…

Java单元测试与Jutil详解(一) 简介

1.什么是单元测试 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,Java里单元指一个类。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中…

反转!BAT编程吸金榜来了,AI程序员刷爆了......

从2017年开始,人工智能便波澜不断,无论是从BAT高调布局AI,还是从年薪80万招聘AI应届生,炽手可热形容AI工程师一点都不过分。百度推出“少帅计划”,针对30岁以下的深度学习科学家,开出100万以上年薪!阿里巴巴…

Windows启动文件

Windows启动文件 Files Used in the Windows 2000 Boot Process FileLocationBoot stageNtldr System partition root (C:/ )Preboot and bootBoot.iniSystem partition rootBootBootsect.dosSystem partition rootBoot (optional)Ntdetect.com System partition rootBootNtboo…

Sublime Text 3 个人使用总结

待更新 Sublime Text 3\Packages\FileHeader\template\header转载于:https://www.cnblogs.com/yourstars/p/6739965.html

破解出cmos密码(转载)

----CMOS (Award)密码简介与破解0--3法---- 计算机启动时,由存放在主板ROM中的bios将cmos数据调入内存中,以实现控制系统。 其中,Award主板上的一小块RAM用于存放CMOS数据,地址为00-7F的共128个字节中。 当中的字节 1c和1d存放的就…

NLP实战:利用Python理解、分析和生成文本 | 赠书

导读:本文内容参考自《自然语言处理实战:利用Python理解、分析和生成文本》一书,由Hobson Lane等人所著。本书是介绍自然语言处理(NLP)和深度学习的实战书。NLP已成为深度学习的核心应用领域,而深度学习是N…

Servlet入门 代码

1. 第一个Servlet程序 package com.allanlxf.serv.basic; import javax.servlet.*; import java.io.*; public class TimeServlet implements Servlet {private ServletConfig config;public TimeServlet(){System.out.println("TimeServlet()");}public void init(S…

统计学习方法:朴素贝叶斯

作者:桂。 时间:2017-04-20 18:31:37 链接:http://www.cnblogs.com/xingshansi/p/6740308.html 前言 本文为《统计学习方法》第四章:朴素贝叶斯(naive bayes),主要是借助先验知识统计估计&…

Windows自动启动程序的十大藏身之所(转载)

Windows自动启动程序的十大藏身之所 Windows启动时通常会有一大堆程序自动启动。不要以为管好了“开始→程序→启动”菜单就万事大吉,实际上,在Windows XP/2K中,让Windows自动启动程序的办法很多,下文告诉你最重要的两个文件夹和八…

警惕!银行风控模型或将“摇身一变”,成为风险缔造者

作者 | 祝世虎来源 | 现代金融风险管理头图 | CSDN下载自视觉中国2011年,美联储发布了《模型风险管理监督指南(SR11-7)》(《SRLetter 11-7: Supervisory Guidance on Model Risk Management》),该指南逐步成…

Spring注解注入

spring注入方式-----注解注入(1)操作:首先在要注入的类前面加上:Component(与后面三个是等价的)Repository(持久层),Service业务层,Controller和控制层应为不能自动识别某个类是否是持久层,业务…

zip 的压缩原理与实现

http://www.blueidea.com/bbs/newsdetail.asp?id1819267&page2&posts&Daysprune5&lp1无损数据压缩是一件奇妙的事情,想一想,一串任意的数据能够根据一定的规则转换成只有原来 1/2 - 1/5 长度的数据,并且能够按照相应的规则还…

上海交大发布 MedMNIST 医学图像分析数据集 新基准

来源 | HyperAI超神经责编 | 晋兆雨头图 | 付费下载于视觉中国内容概要:医学图像分析是一个非常复杂的跨学科领域,近日上海交通大学发布了 MedMNIST 数据集,有望促进医学图像分析的发展。关键词:医学图像分析 公开数据集令人头秃…

VS 2010中对WPF4有哪些多点触摸支持?

随着多点触摸输入和操作处理支持的引进, WPF 4提供了一个极棒的方式,可在Windows 7中使你的客户端应用大放光彩,新的特性包括:UIElement上的多点触摸操作、惯性(漫游(Pan)、缩放(Zoo…

业务组件架构的思考

在iOS开发中,我们接触比较多的是MVC架构,下面我们先来分析一下MVC架构。 1.MVC MVC是一种软件架构模式,在1978年由Trygve Reenskaug提出,它把软件系统分为三个基本部分:模型(Model)、视图&#…

强化学习:10种真实的奖励与惩罚应用

作者 | Patrycja翻译 | Katie,责编 | 晋兆雨出品 | AI科技大本营头图 | 付费下载于视觉中国在强化学习(Reinforcement Learning)中,对代理进行奖励和惩罚机制的培训。代理的正确行为会得到奖励,而错误的行为会受到惩罚…

PHP feof() 函数读文件的使用

(PHP 4, PHP 5) feof — 测试文件指针是否到了文件结束的位置 如果服务器没有关闭由 fsockopen() 所打开的连接,feof() 会一直等待直到超时而返回TRUE。默认的超时限制是 60 秒,可以使用 stream_set_timeout() 来改变这个值。 文件指针必须是有效的&a…

批处理解决“易语言难题”

为什么80%的码农都做不了架构师?>>> 发现还没有Win批处理的,也就是DOS,我来凑个热闹,哈哈~ maxos 汇总贴 APPLEUFO 原题链接 不罗嗦,上代码啦: echo off set c_title批处理…

\r与\n有何差别,编码的时候应该怎样使用

差别: \r: 全称:carriage return (carriage是“字车”的意思。打印机上的一个部件)简称:return缩写:rASCII码:13作用:把光标移动到当前行的最左边\n: 全称:new line别名…

深度学习中的注意力机制(一)

作者 | 蘑菇先生来源 | NewBeeNLP头图 | CSDN下载自视觉中国目前深度学习中热点之一就是注意力机制(Attention Mechanisms)。Attention源于人类视觉系统,当人类观察外界事物的时候,一般不会把事物当成一个整体去看,往往…

Hibernate 异常org.hibernate.LazyInitializationException: could not initialize prox

Hibernate的Lazy初始化1:n关系时,必须保证是在同一个Session内部使用这个关系集合,不然Hiernate将抛出异常。 两种处理方法: 一、这是延时加载的问题,把有关联的所有pojo类,在hibernate.cfg.xml文件中。一般在many-to-…

XHTML基础问答

作者:阿捷 2004-6-26 1:43:36本文是2002年为硅谷动力网站翻译的稿件。当时xhtml1.0刚刚开始被设计师所接触,所以有下面这个基础问答。 HTML语言是我们建立网页的工具,从它出现发展到现在,规范不断完善,功能越来越强。…

958毕业,苦学Java,竟被二本毕业生吊打!网友:确实厉害!

最近收到一位中型公司 HR 的反馈,她说,我推荐的一个普通本二毕业生在校招面试中表现非凡,当时两个人争抢一个名额,他竟然完胜另一位 985 毕业生。普通本二毕业生对公司的技术提问对答如流,曾在小公司实习,做…

css布局中的居中问题

css布局中的居中问题 作者:阿捷 2004-7-5 14:35:49#sample{HEIGHT:240px;WIDTH:400px;BACKGROUND: url(http://www.w3cn.org/style/001/logo_w3cn_194x79.gif) #CCC no-repeat center;} 如何使DIV居中 主要的样式定义如下: body {TEXT-ALIGN: center;…

领域驱动设计_软件核心复杂性应对之道

领域驱动设计_软件核心复杂性应对之道转载于:https://www.cnblogs.com/MarvinGeng/archive/2013/02/21/2920968.html

谈谈Boost网络编程(2)—— 新系统的设计

写文章之前。我们一般会想要採用何种方式,是“开门见山”,还是”疑问式开头“。写代码也有些类似。在编码之前我们须要考虑系统总体方案,这也就是各种设计文档的作用。在设计新系统之初,我基本的目的是:保证高效率&…

64岁Python之父退休失败,正式加入微软搞开源

来源 | CSDN今天,64岁的Python 之父 Guido van Rossum 在 Twitter 上正式宣布,退休太无聊,如今加入了微软开发者部门。Guido van Rossum 去年宣布退出 Python 核心决策层事实上,近几年来,随着人工智能的飞速发展&#…