11 . 鼠标监听事件,模拟画图工具


package GUI;

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;

/* 通过鼠标来实现画笔
   1.鼠标监听器
   2.用集合来存储鼠标的点位
 */
public class Test11_MouseListener {
    public static void main(String[] args) {
        new MyFrame1("我的,鼠标实现画笔");
    }
}


class MyFrame1 extends Frame{
    // 存储鼠标点位的点,集合
    ArrayList points;
    MyFrame1(String title){
        super(title);
        setSize(1000,100);
        setVisible(true);

        points=new ArrayList<>();
        this.addMouseListener(new MyMouseListener());  //
    }

    @Override
    public void paint(Graphics g) {
        Iterator iterator=points.iterator();  // 迭代器
        while(iterator.hasNext()){
            Point point=(Point) iterator.next(); // 强转,将集合转化成点
            g.setColor(Color.green);
            g.fillOval(point.x,point.y,10,10);  //所谓点,可以由很小的实心圆构成
        }
    }

    // 将一个点添加到界面上
    public void addPonit(Point point){
        points.add(point);
    }

    // 适配器模式:不直接实现接口,而是继承已经实现接口的类,重写父类的方法即可(不然接口的方法都要实现才行,没必要)
    class MyMouseListener extends MouseAdapter {
        // 鼠标的事件有: 按下,弹起,按住不放(高刷,计时器)

        @Override
        public void mousePressed(MouseEvent e) {
            MyFrame1 myFrame1=(MyFrame1) e.getSource();
            myFrame1.addPonit(e.getPoint());  // 获得鼠标点位
            myFrame1.repaint();  // 还要刷新frame才行,帧率
        }
    }

}
posted @   被占用的小海海  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示