java事件适配器Adapter

首先,java中一个类只能直接继承自一个类,接口却可以实现多个。

如果一个类implements了一个MouseListner,那么就要在该类中实现所有的MouseListner中的抽象方法,但有很多抽象方法时而只需要使用个别的时候就会出现问题。所以adapter就解决了这个问题。

  1. 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 mouseClicked(MouseEvent e)
          鼠标按键在组件上单击(按下并释放)时调用。

void mouseDragged(MouseEvent e)
          鼠标按键在组件上按下并拖动时调用。

void mouseEntered(MouseEvent e)
          鼠标进入到组件上时调用。

void  mouseExited(MouseEvent e)
          鼠标离开组件时调用。

void mouseMoved(MouseEvent e)
          鼠标光标移动到组件上但无按键按下时调用。

void  mouseMoved(MouseEvent e)
          鼠标光标移动到组件上但无按键按下时调用。

void mouseReleased(MouseEvent e)
          鼠标按钮在组件上释放时调用。

void mouseWheelMoved(MouseWheelEvent e)
          鼠标滚轮旋转时调用。


看以下代码,看懂就知道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();//更新画板
    }
}





转载于:https://my.oschina.net/qkmc/blog/662053

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值