思路:
1.创建一个Frame作为载体画图.
2.Frame中添加鼠标事件.
3.创建一个容器ArrayList,用来存放鼠标点击的点.
4.每当鼠标点击时就生成一个Point对象,将Point对象添加到一个容器ArrayList中去.然后重画界面.
5.重画时用重新调用Paint方法.Paint方面中一次用Iterator遍历所以的Point点对象,然后将他们一次画出.
import java.util.*;
import java.awt.*;
import java.awt.event.*;
public class TestPaint {
public static void main(String args[]) {
new JackFrame().launchFrame();
}
}
class JackFrame extends Frame {
ArrayList al;
public void launchFrame() {
MouseL ml=new MouseL();
al=new ArrayList(); //Generics: ArrayList<Point> al=new ArraryList<Point>();
//如果写成ArrayList al=new ArrayList<Point>();会提示不安全,但是不会出错.
setBounds(200,200,400,400);
setVisible(true);
addMouseListener(ml);
}
public void paint(Graphics g) {
Iterator<Point> ip=al.iterator(); //如果这里写成Iterator ip=al.iterator();那么Iterator
//ip还是Object型,只是al.iterator()给它了一个Point类型而已. 可以这样理解.Iterator<Point>就是
//把返回的容器内容自动转换为Point
Point p;
while(ip.hasNext()) {
p=ip.next();
g.setColor(Color.red);
g.drawOval((int)p.x,(int)p.y,5,5);
}
}
}
class MouseL extends MouseAdapter {
public void mouseClicked(MouseEvent e) {
JackFrame jf=(JackFrame)e.getSource(); //这里我们可以用e.getSource()获得事件对象的引用,就可以操控对象中的成员变量.
Point p1=new Point(); //我们之前没有用该方法,用的是将对象句柄传给监听器...是因为那时要监听的总类很多....这个变量相对单一
p1.x=e.getX(); //反正只要能获得对象引用就能够进行操作....无所谓.
p1.y=e.getY();
jf.al.add(p1);
jf.repaint();
}
}