博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 事件适配器 Adapter
阅读量:6500 次
发布时间:2019-06-24

本文共 2951 字,大约阅读时间需要 9 分钟。

 

事件适配器Adapters

  在上一篇文章中:

  

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

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

 

  为简化编程,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);        // 加上鼠标动作监听器,因为类本身实现了这两个接口,所以参数是this        frame.addMouseListener(this);        frame.addMouseMotionListener(this);        // 可以添加多个监听器,所以还可以定义其他的,如MyMouseListener类,然后加上        // 设置刚好能容纳这些控件的尺寸        frame.pack();        // 设置为可见        frame.setVisible(true);    }    public static void main(String[] args)    {        MyWindow window = new MyWindow();        window.go();    }    @Override    public void mouseMoved(MouseEvent e)    {        String str = "x = " + e.getX() + ", y = " + e.getY();        this.textField.setText(str);        System.out.println(str);    }    @Override    public void mouseExited(MouseEvent e)    {        this.textField.setText("the mouse has exited.");    }}class MyButtonListener2 implements ActionListener{    // 因为ActionListener只有一个方法,所以没有适配器    @SuppressWarnings("deprecation")    @Override    public 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{    @Override    public void windowClosing(WindowEvent e)    {        System.out.println("windowClosing");        // 退出        System.exit(0);    }}

 

参考资料

  张龙老师Java SE教学视频。

转载地址:http://kzvyo.baihongyu.com/

你可能感兴趣的文章
lc405. Convert a Number to Hexadecimal
查看>>
获取app传入的json值处理
查看>>
linux-glibc内存管理小结2(内存相关系统调用的实现)
查看>>
【Go语言】LiteIDE使用的个人使用方法
查看>>
使用文本用户界面(NMTUI)进行网络配置
查看>>
【中文】Joomla1.7扩展介绍之Fabrik (强大的表单处理能力)
查看>>
joomla 1.7遇到的麻烦——不能删除模板的解决办法
查看>>
spring @component的作用
查看>>
eclipse编辑窗口不见了(打开左边的java、xml文件,中间不会显示代码)
查看>>
1.JSONObject与JSONArray的使用
查看>>
34.TokenInterceptor防止表单重复提交
查看>>
cogs 362. [CEOI2004]锯木厂选址
查看>>
Sql Server 因为触发器问题导致数据库更新报错“在触发器执行过程中引发了错误,批处理已中止”的问题处理...
查看>>
npm-debug.log文件出现原因
查看>>
You may remembe MBT Changa
查看>>
洛谷P3723 [AH2017/HNOI2017]礼物(FFT)
查看>>
洛谷P4705 玩游戏(生成函数+多项式运算)
查看>>
Vue API(directives) 自定义指令
查看>>
9.8.6恢复系统数据库
查看>>
权限组件(10):三级菜单的展示和增删改查
查看>>