
java-GUI实现简单画笔小画板
发布日期:2021-05-06 23:18:23
浏览次数:31
分类:技术文章
本文共 1980 字,大约阅读时间需要 6 分钟。
GUI学习记录(2)
在一块画板上实现鼠标点击画图案的功能, (本文未实现拖动划线功能, 可见后续文章)
思路
与java设计GUI的大体思路一致, 先设置Frame类作为框架, 其中添加组件类作为功能补充. 该设计中需要设置鼠标监听类, 给frame加上组件
this.addMouseListener(new MyMouseListener());
并自己实现一个监听类, implements需要重写所有方法, 所以使用适配器
private class MyMouseListener extends MouseAdapter
给全局一个points数组变量, 保存所有点击的点的信息, 然后重写frame类的paint方法时改成迭代器依次画数组中的点
@Override public void paint(Graphics g) { // paint listen on mouse event Iterator iterator = points.iterator(); while (iterator.hasNext()){ Point point = (Point) iterator.next(); g.setColor(Color.GREEN); g.fillOval(point.x, point.y, 10, 10); } }
完整代码
import java.awt.*;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.util.ArrayList;import java.util.Iterator;public class testmousepaint { public static void main(String[] args) { MyFrame myFrame = new MyFrame("IDEA"); }}class MyFrame extends Frame{ ArrayList points; public MyFrame(String title) { super(title); setBounds(200, 200, 400, 400); this.addMouseListener(new MyMouseListener()); setVisible(true); setBounds(200,200,400,400); setBackground(Color.white); points = new ArrayList<>(); } @Override public void paint(Graphics g) { // paint listen on mouse event Iterator iterator = points.iterator(); while (iterator.hasNext()){ Point point = (Point) iterator.next(); g.setColor(Color.GREEN); g.fillOval(point.x, point.y, 10, 10); } } public void addpoint(Point point){ points.add(point); } private class MyMouseListener extends MouseAdapter{ @Override public void mousePressed(MouseEvent e) { MyFrame frame = (MyFrame) e.getSource(); frame.addpoint(new Point(e.getX(), e.getY())); // click and paint every time frame.repaint(); } }}
实现效果
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年03月23日 23时13分31秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
java并发学习12:问题引入
2019-03-04
java并发学习20:park与unpark
2019-03-04
java并发学习24:固定运行顺序模式
2019-03-04
html5学习9:HTML5文档结构详解
2019-03-04
介绍一个不错的分析客户价值的模型RFM
2019-03-04
SpringMVC---使用
2019-03-04
2.2.4 加减法运算和溢出判断更换
2019-03-04
2.2.6 强制类型转换
2019-03-04
计算机网络教程 谢希仁 第三章 数据链路层
2019-03-04
Redis缓存数据的处理流程
2019-03-04
Linux:文件句柄泄漏问题
2019-03-04
Linux:多线程简介
2019-03-04
【java】316. 去除重复字母----学会栈的使用
2019-03-04
【java】227. 基本计算器 II---思路简单,代码清晰!!!
2019-03-04
【java】115. 不同的子序列----学会动态规划,时间复杂度O(n^2)!!!
2019-03-04
【java】92. 反转链表 II---无需额外空间,时间复杂度O(n)!!!
2019-03-04
【java】368. 最大整除子集---使用动态规划,快速解决子问题!!!
2019-03-04
莫比乌斯函数
2019-03-04