当前位置:编程学习 > JAVA >>

有点小纠结啊

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 --------------------编程问答-------------------- 沙发哈哈 --------------------编程问答-------------------- 话说我将同问题放另一个小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();

}
}
--------------------编程问答-------------------- MFrame f1 = new MFrame();
MFrame f2 = (MFrame)e.getSource(); 
这两句为什么产生的效果怎么不一样呢? 

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

f1是新开辟了块内存,和以前的同类的对象没有任何关系 
f2是触发事件的事件源
肯定不一样啊


有点小懂了,再问个问题
MFrame f2 = (MFrame)e.getSource(); 
e肯定是个MouseActionEvent,怎么就可以转换成MFrame,有点糊涂了。
再说,e如果分别是,Button,TextField,Window,Key,等,也都可以这样
MFrame f2 = (MFrame)e.getSource(); 做吗?
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,