GUI 2.8 AWT 鼠标监听器

2.8 鼠标监听

目的:想要使用鼠标画画

package com.GGp.lesson03;

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.Iterator;

public class TestMouseListener {
    public static void main(String[] args) {
        new MyFrame("画图");
    }
}
//自己的类
class MyFrame extends Frame{
    //画画需要画笔,需要监听鼠标当前的位置,需要集合来存储这个点
    ArrayList points;

    public MyFrame(String title){
        super(title);
        setBounds(200,200,500,500);
        //存鼠标点击的点
        points = new ArrayList<>();

        setVisible(true);
        //鼠标监听器,监听这个窗口
        this.addMouseListener(new MyMouseListener());
        //窗口关闭监视器
        this.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
    //重写画画的方法

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        //画画,监听鼠标的事件
        Iterator iterator = points.iterator();//迭代器
        while (iterator.hasNext()){
            Point point = (Point) iterator.next();
            g.setColor(Color.blue);
            g.fillOval(point.x,point.y,10,10);
        }
    }

    //添加一个点到界面上
    public void addPaint(Point point){
        points.add(point);
    }

    //适配器模式
    private class MyMouseListener extends MouseAdapter{
        //鼠标  点击,弹起,按住不放

        //重写鼠标点击
        @Override
        public void mousePressed(MouseEvent e) {
            Frame frame = (Frame) e.getSource();
            //这个我们点击的时候,就会在界面上产生一个点!即为画
            //这个点就是鼠标的点
            addPaint(new Point(e.getX(),e.getY()));

            //每次点击鼠标都需要重新画一遍
            frame.repaint();//刷新
        }
    }
}

优化:结构更加清晰

public class TestMouseListener {
    public static void main(String[] args) {
        new MyFrame("画图");
    }
}
//自己的类
class MyFrame extends Frame{
    //画画需要画笔,需要监听鼠标当前的位置,需要集合来存储这个点
    //存鼠标点击的点
    ArrayList points = new ArrayList<>();;

    //方法:将获得的点添加到集合中
    public void addPaint(Point point){
        points.add(point);
    }

    public MyFrame(String title){
        super(title);
        setBounds(200,200,500,500);
        setVisible(true);

        //鼠标监听器,监听这个窗口
        this.addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                super.mousePressed(e);
                Frame frame = (Frame) e.getSource();
                //这个我们点击的时候,就会在界面上产生一个点!即为画
                //这个点就是鼠标的点
                addPaint(new Point(e.getX(),e.getY()));//调用addPoint方法,将点存入设定的集合中

                //每次点击鼠标都需要重新画一遍
                frame.repaint();//刷新
            }
        });
        //窗口关闭监视器
        this.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
    //重写画画的方法
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        //画画,监听鼠标的事件
        Iterator iterator = points.iterator();//集合中的迭代器
        while (iterator.hasNext()){//如果里面还存在数据,则继续迭代,且指向下一个
            Point point = (Point) iterator.next();//将其中指向的数据命名为point
            g.setColor(Color.blue);
            g.fillOval(point.x,point.y,10,10);//集合中的迭代器,指向下一个点坐标,作为画图的坐标
        }
    }
}
posted @   NeverGGp  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示