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();
}
}
}