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