简易画图板的升级版本1.2
来源:互联网 发布:网络刷手是可靠吗 编辑:程序博客网 时间:2024/05/18 02:39
自打上次做了画图板之后已经很久没更新了,原因可能是因为我老是觉得自己的java烂到爆,总想着以后再去解决。但是事情不该拖的。反正,今天总算是解决了。如释重负吧。不过,这个鬼东西,闲着没事的时候我还会继续优化,继续升级我的各种版本。
言归正传。先来给大家展示一下这货~~
这次的画图板,我在上次做画图板的基础上(详情见上上上一篇博客)添加了以下功能:重绘,铅笔,橡皮,圆角矩形,颜色面板。下面我简单用语言描述一下我所遇到的重点问题,详细请见代码,下载地址请戳这里:http://download.csdn.net/detail/miao933/5492989
1.先来说一下重绘功能,所谓的重绘,其实是重写paint方法。由于每次对JPanel 进行点击,更改大小等任何操作的时候,系统会自动调用paint方法,而原本的paint方法没有内容,导致用户所画图形会消失。为了解决此问题而重写该方法。
写该方法的时候要注意三个问题:a. mouselistener 应该由panel_draw添加,防止坐标偏移。(同理,画布Graphics也要注意由panel_draw获取)
b.在paint方法中要用super调用父类的方法,形如:super.paint(g),原因是因为此方法实际上将绘制工作委托给三个受保护的方法: paintComponent, paintBorder和paintChildren.按列出的顺序调用这些方法,以确保子组件出现在组件本身的顶部。所以如果不调父类该方法,那么paint方法的重写是没有意义的,没有真正达到重绘的目的。
c.自己定义一个MyList队列,用来存放每一次绘制的shape,以便重绘时调用,将队列中的内容重新绘制到面板上。
2.再来说说铅笔功能。打开xp画图板,用铅笔功能绘制一段线条,再拿放大镜放大,便可以看出它是由一段一段的线段组成的。因此我们仍可以采用之前我上次博客中绘制直线 的方法,只需稍做修改,不停地侦听并转换坐标即可。
3.橡皮功能,我是用fillRect 实现的,并在传参之前将color 赋值为白色。还有一点缺陷,就是当鼠标拖动速度过快的时候,变使得橡皮所擦内容出现间距。也许会在接下来的版本中进行改进。
4.圆角矩形,更简单了,系统中就有该方法。不多说了,和上次实现的矩形类似。
5.最后说一下颜色面板的问题。和工具面板一样,为了减少冗余代码,定义了一个String类型的数组,然后在for 循环内进行设置按钮,以及添加监听,使得画板富有生命。
6.补充一条传参的问题,传参发生在两个类之间建立的联系上,一般来说是一个形如X x = new X();在括号内进行传参,当需传很多数据,其值又是变量,只要把他定义成当前类的属性,然后统一用this传给对方即可解决。
7.再次补充,内部类。实现接口或抽象方法中的方法时可以利用内部类。
ps:这次做画图板最大的收获呢,就是我一直以来望而却步的java,其实没有想象中的可怕,反而让我有了兴趣。也让我学会了思考。
- 简易画图板的升级版本1.2
- 简易画图板的优化
- Java 编写的简易画图板
- 简易画图板的再次优化
- java编写简易的画图板
- 简易画图板
- 简易画图板
- 简易画图板的基本界面框架
- 基于zepto.js的canvas简易画图板
- Java版简易画图板的实现
- java_简易画图板
- 简易画图板练习
- java,制作简易画图板
- 简易画图板的继续优化,分类与铅笔的实现
- 下面我将分享用Java制作简易画图板的过程。
- java实现简易画图板 & 曲线的画法 & 总结
- 简易的xp系统画图板制作思路与流程
- XP画图板版本1
- Android应用在不同版本间兼容性处理 .
- Maven仓库管理-Nexus
- 利用折半查找,寻找元素在数组中合适恰当的位置
- alsa的snd_pcm_readi()函数和snd_pcm_writei()
- linux io分析
- 简易画图板的升级版本1.2
- 他人的近期目标
- ArrayList对动态数组进行排序数组由Scanner后台动态接收数组元素
- 选择排序实例
- 犀牛书第3章 数据类型和值(下篇):传值与传址
- Android Thread.UncaughtExceptionHandler捕获 .
- 冒泡排序实例
- 字符串进行截取替换操作实例代码
- Linux/Unix环境下的make和makefile详解