11 . 鼠标监听事件,模拟画图工具
package GUI;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;
/* 通过鼠标来实现画笔
1.鼠标监听器
2.用集合来存储鼠标的点位
*/
public class Test11_MouseListener {
public static void main(String[] args) {
new MyFrame1("我的,鼠标实现画笔");
}
}
class MyFrame1 extends Frame{
// 存储鼠标点位的点,集合
ArrayList points;
MyFrame1(String title){
super(title);
setSize(1000,100);
setVisible(true);
points=new ArrayList<>();
this.addMouseListener(new MyMouseListener()); //
}
@Override
public void paint(Graphics g) {
Iterator iterator=points.iterator(); // 迭代器
while(iterator.hasNext()){
Point point=(Point) iterator.next(); // 强转,将集合转化成点
g.setColor(Color.green);
g.fillOval(point.x,point.y,10,10); //所谓点,可以由很小的实心圆构成
}
}
// 将一个点添加到界面上
public void addPonit(Point point){
points.add(point);
}
// 适配器模式:不直接实现接口,而是继承已经实现接口的类,重写父类的方法即可(不然接口的方法都要实现才行,没必要)
class MyMouseListener extends MouseAdapter {
// 鼠标的事件有: 按下,弹起,按住不放(高刷,计时器)
@Override
public void mousePressed(MouseEvent e) {
MyFrame1 myFrame1=(MyFrame1) e.getSource();
myFrame1.addPonit(e.getPoint()); // 获得鼠标点位
myFrame1.repaint(); // 还要刷新frame才行,帧率
}
}
}