public class mousePaintDemo { public static void main(String[] args) { Mymouse.test(new Mymouse("画笔")); } } //自定义的frame类 class Mymouse extends Frame { //退出方法 public static void test(Frame frame){ frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); } ArrayList points;//定义存储鼠标点击位置的集合 //frame的构造方法 public Mymouse(String little){ super(little);//向父类即Frame类传递一个title用于创建Frame时作为窗口名 setBounds(200,200,300,400); this.addMouseListener(new Mymousepaint());//鼠标监听事件 //需要有一个集合存放鼠标的点 points=new ArrayList(); setVisible(true); } //向集合中添加鼠标点击的点的方法 public void addpaint(Point point){ points.add(point); } @Override //画笔方法 public void paint(Graphics g) { Iterator iterator = points.iterator();//创建一个迭代器 while(iterator.hasNext()){//如果迭代器中还有元素则执行循环 Point point= (Point) iterator.next();//next每次返回下一个元素,这行将每个元素 //提出创建一个点对象 g.fillOval(point.x,point.y,10,10);//画一个实心的圆,位置在鼠标点击的位置 } } //鼠标监听事件 private class Mymousepaint extends MouseAdapter{ @Override public void mouseClicked(MouseEvent e) {//当鼠标单击时接受一个对象,这个对象在这里是frame,因为frame调用了add‘方法 Mymouse frame = (Mymouse) e.getSource();//因为e是一个frame对象因此getsource也就生成了一个Myframe对象 //获取鼠标的点传递给addpaint方法 frame.addpaint( new Point(e.getX(),e.getY())); //每次点击鼠标都刷新 frame.repaint(); } } }
原文:https://www.cnblogs.com/chencidiao/p/14617811.html