GUI编程 - 如何在窗口中画一个点

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);
            }
        });
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41017444/article/details/113664330