/**
*Title:MyMouseAdapter_17.java
*Description:1、鼠标的监听 2、Frame的paint()方法的运用。 3、泛型的运用 4、repaint()方法的运用 5、Point类的运用。
*@Copyright:
*@Company:
*@autor:firefly
*@version:1.0
*@time:2012.10.3
*/
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class MyMouseAdapter_17 {
public static void main(String[] args) {
new MyFrame("Drawing...");
}
}
class MyFrame extends Frame {
ArrayList<Point> points = null;//泛型要加上所要转换的是什么类型的,不然的话在编译时会出现提示:“使用了未经检查的或不安全的操作”,不过不影响运行。
MyFrame(String s) {
super(s);
points = new ArrayList<Point>();
setLayout(null);
setBounds(300, 300, 400, 300);
this.setBackground(new Color(204, 204, 255));//敲一个this.在eclipse中常用,可以给你一些错误的提示,如方法名忘记了等。在这里不用也是可以编译运行的。
setVisible(true);
this.addMouseListener(new Monitor());//设置鼠标监听MouseListener().
}
public void paint(Graphics g) { //重写Container中的paint()方法。迭代器和paint()方法的综合运用。
//当需要画的时候自动调用这个方法。如
Iterator<Point> i = points.iterator();
Color c = g.getColor();
while(i.hasNext()) {
Point p = i.next(); //如果在前面的三个地方都加上了<>在i前面就不用强制转换了。
g.setColor(Color.blue); //设置图形的颜色。
g.fillOval(p.x, p.y, 10, 10);//画一个椭圆
}
g.setColor(c); //这里表现的是一种比较好的编程习惯,g本来就有颜色(黑色默认),你设置之后,把赋给原来的颜色。
}
public void addPoint(Point p) { //将点加入到数组里面。
points.add(p);
}
}
class Monitor extends MouseAdapter { //对MyFrame实行监听这里用MouseAdapter比用MouseListener要好一点,因为MouseListener是一个接口,
//实现接口的时候里面的第一种方法都要实现,每种方法都要写比较麻烦一些,而MouseAdapter中已经有所有5个方法的空的方法,你用哪个只需要重写一下就可以了
public void mousePressed(MouseEvent e) {
MyFrame f = (MyFrame)e.getSource(); //将Object 类强制转换为MyFrame.
f.addPoint(new Point(e.getX(), e.getY()));//这里的Point()类:java.awt.Point。意为:在坐标空间中指定的 (x,y) 位置构造并初始化一个点。
f.repaint();//repaint()先调用了Update()这个方法(实现双缓冲),再调用paint()方法。如果不用这个方法的话虽然点已经画过了,但是不能显现出来。
}
}