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才行,帧率
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?