import com.thf.WindowsClosing;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;
//一个java文件可以有多个类,但最多只能有一个被public修饰的class。
public class NewPaintListener {
public static void main(String[] args) {
new MyFrame("画点");
}
}
class MyFrame extends Frame {
private ArrayList points;//声明了一个ArrayList类型的成员变量points
public MyFrame(String tittle){
//将“画点”传入
super(tittle);//设定图形界面名称为“画点”
setBounds(512,256,1024,512);//设置图形界面大小
points = new ArrayList<>();//为points申请一个空间
addMouseListener(new MyListener());//加入鼠标监听器MyListener
setVisible(true);//设置图形界面可见
new WindowsClosing().WindowsClose(this);//调用方法关闭窗口
}
public void paint(Graphics g) {
Iterator iterator = points.iterator();//iterator迭代器遍历points数组
while (iterator.hasNext())
/*调用 it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。
调用 it.hasNext() 用于检测集合中是否还有元素。如果有则返回true
调用 it.remove() 将迭代器返回的元素删除。*/
{
Point point = (Point) iterator.next();//将points存储的值重新转换为Point类型
g.setColor(Color.BLUE);//设置点的颜色
g.fillRect(point.x,point.y,10,10);//设置点的形状
}
}
private class MyListener extends MouseAdapter{
@Override
public void mousePressed(MouseEvent e) {
//e就是鼠标点击这个事件
MyFrame myFrame =(MyFrame)e.getSource();
myFrame.AddPoint(new Point(e.getX(),e.getY()));//获取鼠标点击的坐标,并将这个值传入AddPoint方法
repaint();//重新再画一次
}
}
public void AddPoint(Point point){
points.add(point);//将这个点的坐标传入points
}
}
创建了Frame窗口并设置MyListener监听鼠标的点击事件,当事件发生时,监听到鼠标点击的坐标,并将坐标传给AddPoint方法,AddPoint方法将这个值传给points,iterator迭代器遍历数组得到坐标,然后画出该点
com.thf.WindowsClosing
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class WindowsClosing {
public void WindowsClose(Frame frame){
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}