关闭

Java中的应用-AWT事件适配器

224人阅读 评论(0) 收藏 举报

文章摘抄于http://book.51cto.com/art/200912/166991.htm

 

第一层是EventListener顶层事件接口类,它只是定义了一个接口,没有包含任何接口函数。
第二层是AWT的事件监听器接口(以Listener为结尾),每一个监听器接口对应一种窗口事件,其中定义了多个事件处理函数。
第三层是AWT的事件适配器抽象类(以Adapter为结尾),它们分别为对应的监听器接口提供了默认的函数实现。

 

目的,这一特性特别适合于Java AWT中的事件处理模式。对于定义的事件监听器接口,它可能包含多个事件处理函数,但在使用时我们往往只需要关注其中的某一种事件,此时就可以使用抽象化适配来将事件监听器接口进行抽象化,给出每一个接口函数的默认实现,这样在需要使用时只需要重写自己需要的函数即可

 

package java.awt.event;

import java.util.EventListener;

public interface MouseListener extends EventListener {
	/** * 鼠标单击事件 */
	public void mouseClicked(MouseEvent e);

	/** * 鼠标按下事件 */
	public void mousePressed(MouseEvent e);

	/** * 鼠标释放事件 */
	public void mouseReleased(MouseEvent e);

	/** * 鼠标进入事件 */
	public void mouseEntered(MouseEvent e);

	/** * 鼠标退出事件 */
	public void mouseExited(MouseEvent e);
}

 

当我们要使用该接口编写鼠标事件处理代码时,就需要实现该接口,并实现5个事件函数 

 

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class MyMouseListener implements MouseListener {
	@Override
	public void mouseClicked(MouseEvent arg0) {
		System.out.println("鼠标单击事件");
	}

	@Override
	public void mousePressed(MouseEvent arg0) {
		System.out.println("鼠标按下事件");
	}

	@Override
	public void mouseReleased(MouseEvent arg0) {
		System.out.println("鼠标释放事件");
	}

	@Override
	public void mouseEntered(MouseEvent arg0) {
		System.out.println("鼠标进入事件");
	}

	@Override
	public void mouseExited(MouseEvent arg0) {
		System.out.println("鼠标退出事件");
	}
}

 

 

然而,我们可能只需要处理其中的某一个事件,却不得不编写所有的接口函数,此时就可以使用适配器类MouseAdapter了。该适配器实现了3个鼠标相关的事件接口,并为这些接口中的所有函数都提供了默认的实现,这些实现的代码为空,表示什么也不做

 

package java.awt.event;

public abstract class MouseAdapter implements MouseListener,
		MouseWheelListener, MouseMotionListener {
	public void mouseClicked(MouseEvent e) {
	}

	public void mousePressed(MouseEvent e) {
	}

	public void mouseReleased(MouseEvent e) {
	}

	public void mouseEntered(MouseEvent e) {
	}

	public void mouseExited(MouseEvent e) {
	}

	public void mouseWheelMoved(MouseWheelEvent e) {
	}

	public void mouseDragged(MouseEvent e) {
	}

	public void mouseMoved(MouseEvent e) {
	}
}

 

此时如果我们只希望处理鼠标单击事件,只需要继承适配器MouseAdapter,并重写单击事件函数mouseClicked()即可

 

import java.awt.event.MouseEvent;
import java.awt.event.MouseAdapter;

public class MyMouseClickedListener extends MouseAdapter {
	@Override
	public void mouseClicked(MouseEvent arg0) {
		System.out.println("鼠标单击事件");
	}
}

 

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

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:330353次
    • 积分:8948
    • 等级:
    • 排名:第2254名
    • 原创:1096篇
    • 转载:14篇
    • 译文:0篇
    • 评论:5条
    最新评论