首先,java中一个类只能直接继承自一个类,接口却可以实现多个。
如果一个类implements了一个MouseListner,那么就要在该类中实现所有的MouseListner中的抽象方法,但有很多抽象方法时而只需要使用个别的时候就会出现问题。所以adapter就解决了这个问题。
adapter(适配器)的种类:
ComponentAdapter
ContainerAdapter
FocusAdapter
HierarchyBoundsAdapter
KeyAdapter
MouseAdapter
MouseMotionAdapter
WindowAdapter
2.适配器(adapter)的作用:
简化代码量,使得不用具体实现更多的接口中的抽象方法。
3.挑一个简单的Adapter来说明adapter的共性:
比如:MouseAdapter.
首先大家需要明白的是这个类直接继承自超类,实现的接口有三个。
public abstract class MouseAdapter extends Object
implements MouseListener, MouseWheelListener, MouseMotionListener
在MouseAdapter中,实现了MouseListner中的抽象方法,但是实现的方法中没有代码,需要我们继承使用Adapter时自己重写添加代码,很多同学疑惑那不是跟直接继承接口差不多嘛?其实这样一来,我们在子类中就只需要重写我们需要的动作,比如mouseClicked(),而不用把MouseListner中的所有方法在子类中写一遍。
MouseAdapter的方法摘要:
void
void
看以下代码,看懂就知道adapter怎么用了
这个代码使用MouseAdapter实现了鼠标单击和移动时更新显示的坐标值。
(applet不像aplication,在aplication中必须有main方法,在applet中执行情况如下:
Applet主要方法有init()
start()
stop()
pain()
destroy()
init() 方法是初始化方法,用于在启动Applet程序之前做一些必要的初始化工作!运行Applet程序时首先调用该方法,而且只被调用一次.)
package com.rk;
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
public class Mainui extends Applet{
int x,y=0;//单击时坐标
int x_move,y_move = 0;//移动时坐标
String s="";
public void init(){
this.addMouseListener(new MouseClick());
this.addMouseMotionListener(new MouseMove());
}
public void paint(Graphics g){
g.drawString("鼠标单击位置:("+x+","+y+")",50,50);
g.drawString("鼠标移动位置:("+x_move+","+y_move+")",50,100);
}
}
class MouseClick extends MouseAdapter{
@Override
public void mouseClicked(java.awt.event.MouseEvent e) {
super.mouseClicked(e);
Mainui m = (Mainui)e.getSource();
m.x = e.getX();
m.y = e.getY();
m.repaint();
}
}
class MouseMove extends MouseMotionAdapter{
@Override
public void mouseMoved(MouseEvent e) {
super.mouseMoved(e);
Mainui mui = (Mainui) e.getSource();//注意此处使用e.getSource()而不是new一个对象,是处理增加了监听事件的对象,不是新对象
mui.x_move = e.getX();
mui.y_move = e.getY();
mui.repaint();//更新画板
}
}