package awt.testMouse;
import java.awt.*;
import java.awt.event.*;
import java.util.*;//import WindowMonitor.Monitor1;public class TestMouse {
public static void main(String[] args) {
new MFrame();
}
}class MFrame extends Frame {
ArrayList points = null;
MFrame() {
points = new ArrayList();
setLayout(null);
setBounds(200,200,500,500);
setVisible(true);
addWindowListener(new Monitor1());
addMouseListener(new MMonitor());
}

public void paint(Graphics g) {
Iterator i = points.iterator();
while(i.hasNext()){
Point p =(Point)i.next();
g.setColor(Color.red);
    g.fillOval(p.x, p.y, 20, 20);
}
}

public void addPoint(Point p) {
points.add(p);
}
}class MMonitor extends MouseAdapter {
public void mousePressed(MouseEvent e)  {
//Point p1 = e.getPoint();         //这才是更好的返回点坐标嘛,找到了,但是为什么只能点一个点呢?
//MFrame f = new MFrame();//难道说这个没点一下,会创建一个新Frame,而下面的不会更换
//f.addPoint(p1);
MFrame f = (MFrame)e.getSource();   //添加到什么上,什么就是事件源
//f.addPoint(new Point(e.getX(),e.getY()));//应该有个方法可以代替的,忘记了
f.addPoint(e.getPoint());
f.repaint();
//f.repaint();
}public class Monitor1 extends WindowAdapter {
public void windowClosing(WindowEvent e){
f.setVisible(false);
System.exit(0);
}
Frame f = new Frame();

}
}MFrame f = new MFrame();
MFrame f = (MFrame)e.getSource(); 
这两句为什么产生的效果怎么不一样呢?Frame

解决方案 »

  1.   

    话说我将同问题放另一个小case里,就没有这个问题存在。
    package Testkey;
    import java.awt.*;
    import java.awt.event.*;//import WindowMonitor.Monitor1;
    public class TestKey {
    public static void main(String[] args) {
    new KFrame().launchFrame();
    }
    }class KFrame extends Frame {
    /**
     * 
     */
    //private static final long serialVersionUID = 1L; public void launchFrame() {
    setLayout(null);
    setBounds(200,200,200,200);
    addKeyListener(new KeyMonitor());

    setVisible(true);
    addWindowListener(new Monitor1());
    }
    }class KeyMonitor extends KeyAdapter {
    public void keyPressed(KeyEvent e) {
    //System.out.println("OK");
    //KFrame kf =(KFrame)e.getSource();  //试了这两句,没反应出问题
    //KFrame kf = new KFrame();
    int k = e.getKeyCode();
    if(k == KeyEvent.VK_UP) {
    System.out.println("up");
    }
    }
    public class Monitor1 extends WindowAdapter {
    public void windowClosing(WindowEvent e){
    f.setVisible(false);
    System.exit(0);
    }
    Frame f = new Frame();

    }
    }
      

  2.   

    MFrame f1 = new MFrame();
    MFrame f2 = (MFrame)e.getSource(); 
    这两句为什么产生的效果怎么不一样呢? f1是新开辟了块内存,和以前的同类的对象没有任何关系 
    f2是触发事件的事件源
    肯定不一样啊
      

  3.   


    有点小懂了,再问个问题
    MFrame f2 = (MFrame)e.getSource(); 
    e肯定是个MouseActionEvent,怎么就可以转换成MFrame,有点糊涂了。
    再说,e如果分别是,Button,TextField,Window,Key,等,也都可以这样
    MFrame f2 = (MFrame)e.getSource(); 做吗?