/*
         2008年10月26日18:58:20
        编程实现:在一个窗口中一旦点击一下 就显示一个圆点 不断的点击,就不断的实现圆点
        本程序我有一行代码有问题 请诸位高手帮小弟指点一下 先谢谢啦!1
*/import java.awt.*;
import java.awt.event.*;  //因为需要使用java.awt.event.MouseEvent 这个类
import java.util.*; //因为需要使用java.util.Arrays这个类public class MyMouseAdapter2{
    public static void main(String args[]) {
       new MyFrame("我要画点!!!drawing...");  //13行
    }
}class MyFrame extends Frame 
{
        ArrayList points = null;
  
        MyFrame(String s) {
              super(s); //TitleBar上的文字    调用父类的带有String类型参数的构造函数,也就是说调用父类的 public Frame(String); 类型的构造函数
                points = new ArrayList();  //public ArrayList()    API:  构造一个初始容量为 10 的空列表。
                setLayout(null);
              setBounds(300,300,400,300); 
              this.setBackground(Color.red);
              setVisible(true);
              this.addMouseListener(new Monitor());  //28行
        }

      public void paint(Graphics g) {
  Iterator i = points.iterator();  
  while(i.hasNext()){
       Point p = (Point)i.next();
       g.setColor(Color.BLUE);
g.fillOval(p.x,p.y,10,10);
 }
     }
  
    class Monitor extends MouseAdapter 
    {
        public void mousePressed(MouseEvent e) 
        {
     MyFrame f = (MyFrame)e.getSource();
     points.add(new Point(e.getX(),e.getY())); //public int getX(); API: "返回事件相对于源组件的水平 x 坐标。"
             repaint();   //请问:为什么这里改为f.repaint(); 运行结果没有没有任何区别????????????
                      //repaint();表示调用的是28行生成的Monitor对象的repaint()方法
                     //f.repaint(); 表示调用的是13行生成的MyFrame对象的repaint()方法
                    //两者怎么会运行结果都一样呢????? 
         }
   }
}

解决方案 »

  1.   

    类Monitor是类MyFrame的内隐类,内隐类可以访问外部对象的属性和方法,包括private
    在Monitor用repaint();实际上用的是外部类的repaint();方法,也就是MyFrame的repaint();
    这样解释应该差不多吧,所以加不加f.都是一样的
      

  2.   

    另,表示调用的是28行生成的Monitor对象的repaint()方法 
    其实Monitor没有repaint()方法 @@
      

  3.   

    setVisible(true); 
    this.addMouseListener(new Monitor());  //28行 顺序问题,你得先加事件让后再显示.
      

  4.   

    ........
    看错题了.你这个问题很简单.
    就是内部类的原因嘛
    因为Monitor 是 MyFrame的类部内.
    内部类可以访问主类的所有方法及属性.