GUI(鼠标监听事件、模拟画图工具)


目的:测试鼠标监听(只测试鼠标点击)

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
//启动类
public class main {

        public static void main(String[] args) {
            new MyFrame("画图");
        }
    }
    //窗体类
    class MyFrame extends Frame{
        //因为其他地方也可能用到存储,所以我们设置为成员变量,这样的话,这个类的所有地方都是可以用到这个属性
        ArrayList points;
        //画画需要画笔,需要监听鼠标,需要集合来存储这个鼠标的点
        public MyFrame(String title){
            super(title);//当其他类创建这个类的对象时,可以在构造器中添加名字
            setBounds(200,200,400,300);//设置窗体的大小
            //存储鼠标点击的点
            points=new ArrayList<>();

            //显示窗口
            setVisible(true);
            //鼠标监听器,要正对这个窗体,因为我们要正这个窗口里点里鼠标
            this.addMouseListener(new MyMouseListener());//监听MyMouseListener类

        }
        //创建画笔方法,能把鼠标点击出来存储在points中的内容画出来

        @Override
        public void paint(Graphics g) {
            //需要画画,所以要监听鼠标事件
            //用迭代器,把集合的内容取出来
            Iterator iner=points.iterator();//获取迭代器
            //用while循环把里面的东西取出来
            while(iner.hasNext()){//如果inerator存在一个点,那我们要把他画下来,并把指针指向下一位,hasNext:是否还有下一个输入项
                Point point=(Point)iner.next();//next:下一位,并且会返回一个当前的点,point:当前鼠标
                g.setColor(Color.BLUE);//设置颜色
                g.fillOval(point.x,point.y,10,10);//画一个圆,但是画在那呢,画在当前鼠标的x,y的位置上,那当前鼠标
            }
        }
        //添加一个点到界面上,把points的内容画到界面(画板)上,通过中间商(Point point参数)把new Point(e.getX(),e.getY())这个点放到paint(Craphics g)方法中去
        public void addPaint(Point point){
            //点从MyMouseListener传过来放到集合里通过迭代器画出去
            points.add(point);//把当前的点传到oints=new ArrayList<>();集合中,这样我们这paint(Craphics g)、MyMouseListener类、addPaint(Point point)三个地方,就能关联起来了

        }

        //创建用于鼠标监听的内部类,正常情况下,我们是要继承MouseListener接口的,但是继承这个的话我要重写这个接口的全部方法,所以我们就只继承他的子类就可以了,因为他的子类(MouseAdapter)已经重写了接口的全部方法民
        private class MyMouseListener extends MouseAdapter{
            //需要的鼠标方法有按下、弹起、按住不放,当按住会产生,那这些点就会存在paint(Craphics g)方法中
            public void mousePressed(MouseEvent e){//鼠标的按下方法
                MyFrame myFrame=(MyFrame)e.getSource();//因为我们是用MyFrame窗体类调用他的,所以要把强转,这样我们就拿到这个窗口了
                //这里我们点击的时候就会在界面上产生一个点。

                //这个是用来产生点的地,那这个点也就是鼠标的点,怎么获取鼠标,MouserEvent e:相当于当前的鼠标
                myFrame.addPaint(new Point(e.getX(),e.getY()));//getX:x的坐标,gety:y的坐标,所以当鼠标点击的时候,我们会把当前鼠标点击的位置存储到集合,那集合的内容可以叫做,鼠标产生的点,也可以叫鼠标点击的位置

                //每次点击鼠标都需要重画一遍,如果不设置这个重画的话,那他只会画一次,但是我们画画都是连续性的,所以如果不重画的话,他不会显示什么内容的
                myFrame.repaint();//repaint:刷新页面
            }
        }
    }

图片思路:

相关