鼠标事件适配器、多态(通过一个画点的程序介绍)

适配器
把接口方法全部重写了一遍。如果我们想实现这个接口的一个方法,只需要通过继承这个接口的适配器,重写自己需要的方法即可

下面是一个画点的小程序:

import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class MyMouseAdapter {
    public static void  main(String[] args) {
        new MyFrame("drawing");
    }
}

class MyFrame extends Frame {
    ArrayList<Point> points = null; //容器装鼠标点击的坐标
    MyFrame(String s) {
        super(s);
        points = new ArrayList<Point>();
        setLayout(null);
        setBounds(300,300,400,300);
        setBackground(new Color(204,204,255));
        setVisible(true);
        addMouseListener(new Monitor()); //添加鼠标监听器
    }

    public void paint(Graphics g) {//重写画图方法
        Iterator<Point> i = points.iterator();
        while(i.hasNext()) {
            Point p = i.next();//从容器中取出坐标点
            g.setColor(Color.BLUE); 
            g.fillOval(p.x, p.y, 10, 10); //以坐标为中心画实心点
        }
    }

    public void addPoint(Point p) {
        points.add(p);//添加坐标点到容器中去
    }
}

class Monitor extends MouseAdapter {
    //利用鼠标适配器实现MouseListener,只需要重写自己需要的方法即可
    public void mousePressed (MouseEvent e) {
        //监听到的事件信息全部封装到 e中(有多态存在)
        MyFrame f = (MyFrame)e.getSource();
        //将e的信息源强制转换成调用对象MyFrame
        f.addPoint(new Point(e.getX(), e.getY()));
        //得到坐标点,保存
        f.repaint();
        //重画(先调用update(),再调用paint(),双缓冲机制)
    }
}









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值