题目要求:编写Java程序,创建一个窗体,并实现交互。在窗体内“单击鼠标左键”,在光标处绘制一个“绿圆”;窗体内“单击鼠标右键”,在光标处绘制一个“红色方框”;窗体内“双击鼠标左键”,清空所有已画“圆”和“方”。

采用iterator迭代器

package homework0307;import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;public class Homework0307 {public static void main(String[] args) {new MyJFrame("画图");}
}class MyJFrame extends JFrame {//监听鼠标当前的位置,用集合来存储这个点// 定义一个MyPoint类型的Arrlylist(调用get()时需要)ArrayList points;//记录鼠标点击的次数int mc = 0;public MyJFrame(String title){super(title);setVisible(true);setBounds(200,200,400,300);//存鼠标正击的点points = new ArrayList<>();//鼠标监听器,正对这个窗口this.addMouseListener(new MyMouseListener());this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);}class MyMouseListener extends MouseAdapter {@Overridepublic void mouseClicked(MouseEvent e){mc = e.getClickCount();                                           //接受鼠标点击的次数MyJFrame myJFrame = (MyJFrame) e.getSource();                     //e.getSource(),返回当前对象if(mc == 1) {points.add(new MyPoint(e.getX(),e.getY(),e.getButton()));     //单击的情况记录下单击的位置坐标并添加到集合中}myJFrame.repaint();                                               // //每次点击鼠标都需要重新画一遍}}/*此处判断单双击的情况仍然存在较大缺陷,因为在每次触发双击事件的同时会触发单击事件.所以我目前有一个修改的想法,不使用系统提供的e.getClickCount()方法.可以考虑当第一次单击鼠标的时候让鼠标单击事件延时0.2秒执行,而在这段时间里等待第二次单击,如果有第二次单击,那么我们执行双击事件任务,取消单击任务;如果在这段时间没有等到再次单击,那么执行单击任务由于对java延时函数的掌握不够深入,暂时没有办法完成,在此留下一个思路*/@Overridepublic void paint(Graphics g) {super.paint(g);Iterator iterator = points.iterator();if(mc == 1) {while (iterator.hasNext()){MyPoint mypoint = (MyPoint) iterator.next();if (mypoint.button == MouseEvent.BUTTON1) {                            //点击鼠标左键的情况g.setColor(Color.GREEN);g.fillOval(mypoint.x, mypoint.y, 40, 40);}if (mypoint.button == MouseEvent.BUTTON3) {                            //点击鼠标右键的情况g.setColor(Color.RED);g.fillRect(mypoint.x, mypoint.y, 40, 40);}}}else if(mc == 2){                                                              //双击则清除此前所有点击的点points.clear();}}/*此处同样可以调用point.get()方法来进行遍历集合if(mc == 1) {for(int i = 0; i < points.size(); i++){if (points.get(i).button == MouseEvent.BUTTON1) {                        //点击鼠标左键的情况g.setColor(Color.GREEN);g.fillOval(points.get(i).x, points.get(i).y, 40, 40);}if (points.get(i).button == MouseEvent.BUTTON3) {                       //点击鼠标右键的情况g.setColor(Color.RED);g.fillRect(points.get(i).x, points.get(i).y, 40, 40);}}需要注意的是,如果调用paint.get()来进行遍历,定义ArrayList时需要改成  ArrayList<MyPoint> points;*/class MyPoint {                                                                   //自定义MyPoint类来记录每个点的坐标及左右键情况int x, y, button;public MyPoint(int x, int y, int button){this.x = x;this.y = y;this.button = button;}}
}

这里除了使用iterator迭代器以外,同样可以使用arraylist类里的get()方法来遍历每一个元素

需要注意的是,如果调用paint.get()来进行遍历,定义ArrayList时需要改成  ArrayList<MyPoint> points;

if(mc == 1) {for(int i = 0; i < points.size(); i++){if (points.get(i).button == MouseEvent.BUTTON1) {                        //点击鼠标左键的情况g.setColor(Color.GREEN);g.fillOval(points.get(i).x, points.get(i).y, 40, 40);}if (points.get(i).button == MouseEvent.BUTTON3) {                       //点击鼠标右键的情况g.setColor(Color.RED);g.fillRect(points.get(i).x, points.get(i).y, 40, 40);}}

同样,由于本人的水平有限,此处判断单双击的情况仍然存在较大缺陷,因为在每次触发双击事件的同时会触发单击事件.
所以我目前有一个修改的想法,不使用系统提供的e.getClickCount()方法.
可以考虑当第一次单击鼠标的时候让鼠标单击事件延时0.2秒执行,而在这段时间里等待第二次单击,
如果有第二次单击,那么我们执行双击事件任务,取消单击任务;
如果在这段时间没有等到再次单击,那么执行单击任务;

由于对java延时函数的掌握不够深入,暂时没有办法完成,在此希望有大佬求教!

本题同样也还有一些其他解法供参考:(以下附上同学的做法)

fhttps://blog.csdn.net/weixin_60807817/article/details/123745316?utm_source=app&app_version=5.2.1&code=app_1562916241&uLinkId=usr1mkqgl919blen

JAVA学习——GUI鼠标画图交互练习相关推荐

  1. Java学习第六天<用户交互Scanner与进阶使用><顺序结构><选择结构><循环结构1>

    用户交互Scanner与进阶使用 public class Demo01 {public static void main(String[] args) {//创建一个扫描对象,用于接收键盘数据Sca ...

  2. Java之GUI编程学习笔记六 —— AWT相关(画笔paint、鼠标监听事件、模拟画图工具)

    Java之GUI编程学习笔记六 -- AWT相关(画笔paint) 参考教程B站狂神https://www.bilibili.com/video/BV1DJ411B75F 了解paint Frame自 ...

  3. 基于《狂神说java》GUI编程--学习笔记

    前言: 本笔记参考于学友:小尹^_^ :本笔记仅做学习与复习使用,不存在刻意抄袭. ---------------------------------------------------------- ...

  4. Java学习之路12——GUI编程

    组件:窗口.弹窗.面板.文本框.列表框.按钮.图片.监听事件.鼠标.键盘事件 一.简介 GUI的核心开发技术:Swing AWT. 弊端: 页面不美观 需要jre环境 学习的必要性 可以写出自己心中想 ...

  5. java 中gui的作用_java学习中最应该注意的Java GUI用户界面以何为基础

    java中的GUI编程(Graphic User Interface,图形用户接口),是在它的笼统窗(Abstract Window Toolkit,AWT)上完成的,java.awt是AWT的东西类 ...

  6. java获取界面输入数字_通过JAVA设计 GUI 界面的计算器程序,用户可以通过鼠标依次输入参加计算的数值,进行加、减、乘、...

    通过JAVA设计 GUI 界面的计算器程序,用户可以通过鼠标依次输入参加计算的数值,进行加.减.乘. 2016-08-22 0 0 0 4.0 分 其他 1 积分下载 如何获取积分? 通过JAVA设计 ...

  7. java学习2-javafx写GUI程序1

    使用eclipse开发javafx,需要安装java8以上版本,下载scene builder 制作FXML文件. 新建package HelloJava.java是main函数所在类.起到调度作用 ...

  8. 【Java】浅谈Java的GUI开发

    GUI是什么? 图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面. 图形用户界面是一种人与计算机通信的界面显示格 ...

  9. 【java毕业设计】基于java+swing+GUI的连连看游戏设计与实现(毕业论文+程序源码)——连连看游戏

    基于java+swing+GUI的连连看游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+swing+GUI的连连看游戏设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦 ...

  10. Java:GUI编程

    文章目录 GUI编程 AWT 一.AWT介绍 二.组件和容器(Component和Container) 2.1.Frame 2.2.Panel 三.布局管理器 3.1.第一种布局管理器--FlowLa ...

最新文章

  1. java timer.schedule如何控制执行次数_Java 分布式任务调度平台:PowerJob 快速开始+配置详解...
  2. 【PC工具】U盘SD卡测试工具,速度测试,坏块测试查找
  3. linux下本地的源的格式,[Linux]CentOS7搭建/配置:YUM仓库/源[本地源/HTTP源/自建源仓库...
  4. dealloc不调用的情况
  5. 【Java】批判一个有关++的Java选择题
  6. VS中添加新项 数据选项卡下没有ADO.NET实体数据模型解决方案
  7. 用html做网页作品,HTML5实例:用HTML5制作的网页的15个优秀案例
  8. 获取窗口句柄 c语言,VC++编程获取窗口句柄的方法小结分享
  9. Your GPU Compute Capability计算能力
  10. NoSQLBooster for MongoDB软件使用
  11. 十七、DS1302的基本应用
  12. Unity-遮挡剔除
  13. 全球及中国隐形眼镜护理液行业消费规模及投资竞争力分析报告2021-2027年
  14. Python数据分析高薪实战第四天 构建国产电视剧评分数据集
  15. sklearn.neighbors.KNeighborsClassifier()函数解析
  16. Linux学习之定时任务调度
  17. 知云文献翻译打不开_英文PDF文献翻译神器-知云文献翻译
  18. js根据name获取所有的值
  19. AVA Actions Dataset 详解
  20. Linux 文档编辑 : ex 命令详解

热门文章

  1. FreeCAD源码分析: PartDesign模块
  2. javascript中继承的几种方式
  3. 堪培拉地理位置经纬度_澳大利亚的经纬度气候地形
  4. hspice 2019 安装流程
  5. 下载抖音无水印视频的微信小程序
  6. 蓝方防守、HW总结报告模板
  7. 聚合支付PC端-银联扫码支付
  8. python开新窗口的方法_python tkinter点击按钮打开新窗口
  9. java基础 CAS算法的简单理解
  10. 教你用Python 做PPT之制作动态图~做出来的效果高级又好看