GUI编程核心技术AWT——鼠标监听事件、模拟简易画图工具

本文介绍如何使用AWT库在Java中实现一个简易画图工具,通过鼠标监听事件收集用户点击的坐标,并实时在画布上绘制出点。采用ArrayList存储坐标,利用迭代器遍历并绘制每个点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GUI编程核心技术AWT——鼠标监听事件、模拟简易画图工具

思路:要模拟一个简易画图工具,要有一个画板(MyFrame),一个画笔(paint),一个鼠标,用于鼠标监听事件(MyMouseListener),一个存点的数组或者集合(ArrayList)

步骤:

  1. 鼠标的点击的点存到数组中
  2. 画笔读取数组存的点
  3. 将读取到的点转换再画到画板上
  4. 然后画板再显示出来
package com.wei.lesson04;

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
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, 400, 400);
        //存鼠标点击的点  ArrayList:数组清单   用来存放点,再传给points
        points = new ArrayList<>();
        //建一个鼠标监听器,要针对画画的这个窗口
        //this代表当前的这个窗口
        this.addMouseListener(new MyMouseListener());//鼠标被监听上了
        setVisible(true);
    }


    @Override//画笔监听事件要和鼠标监听事件绑定
    public void paint(Graphics g) {
        //画下去的每一个位置都要和鼠标绑定
        Iterator iterator = points.iterator();//对points使用迭代器,遍历里面的点
        //如果迭代器里还存在点,就画下来,然后在对下一个点遍历
        while (iterator.hasNext()) {
            Point point = (Point) iterator.next();//返回一个Point类型的点
            g.setColor(Color.DARK_GRAY);
            //鼠标点击的点在窗口上可能显示的是一个圆
            g.drawOval(point.x, point.y, 10, 10);
        }
    }
    //把鼠标上点击的点添加到画笔上,就是鼠标和画笔绑定了
    public void addPaint(Point point) {//写一个方法调用用来存放鼠标的点的points
        points.add(point);//point表示当前传过来的点,把point存进points里
    }


    //适配器模式    监听器类
  private   class MyMouseListener extends MouseAdapter {
        @Override
        public void mousePressed(MouseEvent e) {//e获取鼠标的资源
            e.getSource();//getSource的资源的来源是Frame窗口,
            MyFrame frame = (MyFrame) e.getSource();//把Frame类型强转为MyFrame类型,就获取了画图的窗口里的鼠标相关的资源
            //这个点就是鼠标的点   把当前的点传给上面的points进行遍历
            frame.addPaint(new Point(e.getX(), e.getY())) ;//坐标

           //每次点击鼠标都要重新画一遍,将之前画的点保存了下来  才能画多个点
            frame.repaint();//刷新页面
        }
    }
}

在这里插入图片描述

学习路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万里顾—程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值