/*
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()方法
//两者怎么会运行结果都一样呢?????
}
}
}
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()方法
//两者怎么会运行结果都一样呢?????
}
}
}
在Monitor用repaint();实际上用的是外部类的repaint();方法,也就是MyFrame的repaint();
这样解释应该差不多吧,所以加不加f.都是一样的
其实Monitor没有repaint()方法 @@
this.addMouseListener(new Monitor()); //28行 顺序问题,你得先加事件让后再显示.
看错题了.你这个问题很简单.
就是内部类的原因嘛
因为Monitor 是 MyFrame的类部内.
内部类可以访问主类的所有方法及属性.