学习Java初期(现在也在初期),做了一个简单的画板,时至今日,才打开ItEye(时过境迁,JavaEye已经强制转型为ItEye了,可叹啊)开始回顾我的画板诞生的全过程,由于个人偏好,本人将我开发的东东通通冠以“魔幻蓝诗”商标,如有雷同,铲草除根
![](/images/smiles/icon_biggrin.gif)
。
首先,阐述一下个人认为的开发画板的技术点:监听器的使用、画板的重绘(牵涉到list的使用)、以及画图形算法、构造器使用等等。这四个问题在我开发画板的过程中一定程度上阻缓了我,可能是因为基础知识不太牢固(以后不能这样子了,应该是现在开始不能这样子了)。
在监听器的使用过程中,对各种方法不是很熟练,前期只处于一种简单模仿的状态,通俗点就是抄代码。后来发现这样子有点自欺欺人的感觉,在不断地理解中终于在一定程度上理解了监听器,并学会了使用监听器,个人认为,在使用监听器的使用中,第一要务是要清楚各个监听器的作用:ActionListener是用来对一个动作进行监听,比如说我们在按下一个按钮的时候可以得到这个按钮上的指令(使用getActionCommand),在使用MouseListener的时候,我们可以跟踪鼠标的动作,具体在这个项目中就是可以得到画图时的坐标位置,即使用mousePressed、mouseReleased两个方法,当然,还要在鼠标释放时调用画图形的方法,如下所示:
public void mouseReleased(MouseEvent e){
//得到鼠标释放时的坐标
x2 = e.getX();
y2 = e.getY();
Shape sh = null;
//作图
g.setColor(c);
if("直线".equals(shape))
sh = new Line(x1,y1,x2,y2);
if("矩形".equals(shape))
sh = new Rect(x1,y1,x2,y2 );
if("圆形".equals(shape))
sh = new Oval(x1,y1,x2,y2);
//设置颜色
sh.setColor(c);
//调用绘制的方法
sh.draw(g);
//用队列保存
list.add(sh);
}//End of mouseReleased
接下来,就开始是画图的算法了,在我的另一篇博文中有提到我在纠结矩形的算法,后来,在思考和交流中,思考出两种实现方法,如下(一种是画矩形,另一种是画圆形,但是画圆形的方法可以转化到画矩形中来):
//画矩形的方法
g.drawLine(x1, y1, x2, y1);
g.drawLine(x1, y1, x1, y2);
g.drawLine(x1, y2, x2, y2);
g.drawLine(x2, y1, x2, y2);
//画圆
if(x2 > x1 && y2 > y1)
g.drawOval(x1, y1, x2 - x1, y2 - y1);
if(x2 > x1 && y1 > y2)
g.drawOval(x1, y2, x2 - x1, y1 - y2);
if(x1 > x2 && y1 > y2)
g.drawOval(x2, y2, x1 - x2, y1 - y2);
if(x1 > x2 && y2 > y1)
g.drawOval(x2, y1, x1 - x2, y2 - y1);
没错,在画矩形的时候,我把它转化为了四条首尾相接的直线了。由于我的画板只简单实现了矩形和圆形、直线,故没有其他图形的算法介绍了。
第三,就是构造器了,这个不是太纠结,我在写构造器时,最常出现的一句注释就是:构造器传参,相信大家对这点都有了解,下面是监听器中的构造器:
//构造器传参
public DrawListener(java.awt.Graphics g,
List<Integer> list){
this.list = list;
this.g = g;
}//End of constructor of DrawListener
最后一个就是重绘了。首先,我们知道在重绘时,我们需要使用JFrame中的paint方法,在使用这个方法时,我们得先调用JFrame中的paint方法,即使用super关键字调用。
在重绘的过程,很重要的一点是先得使用list:List list = new ArrayList();用来存储图形的形状,这点我们在mouseReleased的方法中可以看到如何将图形保存到list中:
/**
*重写JFrame中的paint方法
*/
public void paint(Graphics g){
//首先实现JFrame中的paint方法
super.paint(g);
//遍历队列,获得图形,实现重绘
for(int i = 0; i < list.size(); i ++){
//得到list中的坐标
Shape sh = (Shape) list.get(i);
//重绘
sh.draw(gR);
}//End of for
}//End of paint
以上就是我在做画板时遇到的几个问题,也是认为一些重要的东西,至于其他的窗体显示神马的,由于写过的次数太多,在此不想再罗嗦了,此外,我的画板有点靠近系统的画板的是,我的画板在底部的面板上添加了一些颜色按钮,可以直接点击获得颜色,此处也是关系到监听器的使用,另外,颜色选择器也添加在左边面板上,其调用在actionPerformed中。这个画板的界面在附件里,可以打开看一看。
当然,画板我还会继续的,因为我的习惯是,追求完美,而且,开发画板绝对不是想淘汰掉现在的大家使用的画板,只是一种学习水平的检验。现在的画板有点不堪入目,初具雏形罢了,如题所示,这只是魔幻蓝诗@画板3.0版(不过可想而知前两个版本有多锉了),现在准备进入下一代,相信一定会有多改观的。到时,在让大家再看看,不过可能要一些时日了,最近的课程和实验不少,而且还有三个比赛在等着我。但是,无论如何,加油吧!
PS:个人认为,我们在开发各种项目时应该遵循模块化设计的理念,即一个方法只做一件事。
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0045/4720/635268cd-c0ed-38a1-b960-77ce7fb4f836-thumb.jpg)
- 大小: 55.8 KB
分享到:
相关推荐
DataFrame iloc练习.ipynb
plc
制造企业数字化中台(技术中台、数据中台、业务中台)建设方案.pptx
实验二 预习报告.docx
20240702作业1
浅谈PLC在自动洗车系统中的应用.doc
Lengstorf, Hansen, Prettyman -- PHP 8 for Absolute Beginners -- 2022
智慧校园建设是在国家政策推动下,为深化教育改革、提升教育质量和管理效率而提出的重要项目。该项目旨在通过信息化手段,解决传统教育中存在的资源分散、管理混乱等问题,实现教育资源的高效利用和教学质量的全面提升。 目前,教育信息化虽取得一定进展,但面临“孤岛架构”的挑战,包括硬件资源无法共享、数据孤岛、应用孤岛等问题,导致资源浪费和管理效率低下。为此,智慧校园的建设目标聚焦于家校沟通便捷化、校园管理科学化、校园生活轻松化、课堂教学互动化和校园设施智能化,以提高教学效率和学生学习体验。 智慧校园的核心价值在于构建先进的网络教学平台和管理信息系统,实现教学资源的高效配置和利用,促进师生互动,提高管理效率,降低成本,构建健康高雅的生活环境。解决方案涵盖综合应用平台规划、系统架构设计、媒体发布、数字会议系统等,通过后台服务层、基础接入层和用户接入层的有机结合,实现智慧校园的全面功能。 智慧校园管理平台作为核心组成部分,提供模块化体系,包括公开课、直播、教学资源等23大应用,支持与第三方接口对接,实现多级管理。电教预约管理平台通过移动端APP或web后台简化预约流程,提高教室和会议室资源利用率,支持会议预订、审批、信息发布和环境管控。 教育录播系统和云平台支持教师制作和分享优质教学资源,进行在线组卷和评卷,同时提供学生应用,如高清视频录制、在线直播和互动交流,促进教学资源的共享和教育均衡化发展。这些系统的整合应用,将极大地推动教育信息化进程,实现教育资源的最大化利用和教育质量的全面提升。
c#输出文字5行5列随机组合代码
制造集团企业供应链整体方案含数字化.pptx
皮带运输机PLC电气控制系统设计.doc
Солем -- Программирование компьютерного зрения на языке Python -- 2016
2022-2028全球与中国GaAs器件市场现状及未来发展趋势.docx
Reitz, Schlusser -- The Hitchhiker's Guide to Python -- 2016
当然可以!以下是一些JavaScript语言教程、案例和相关项目资源的推荐: 教程资源: MDN Web 文档:MDN提供了JavaScript的全面教程,包括语法、数据类型、函数、面向对象编程等内容。 JavaScript 教程 - 廖雪峰:廖雪峰的网站提供了简洁明了的JavaScript教程,适合初学者入门。 W3Schools JavaScript 教程:W3Schools是一个广为人知的Web开发教程网站,提供了丰富的JavaScript教程和示例。 案例资源: JavaScript30:由 Wes Bos 创作的免费 JavaScript 30 天挑战,每天一个小项目,涵盖了各种 JavaScript 技术和 API。 CodePen:CodePen是一个在线社区,提供了大量的前端开发案例,你可以在这里找到各种JavaScript项目的示例和代码。 相关项目资源: GitHub:GitHub是一个代码托管平台,你可以在上面找到各种JavaScript项目和库,可以通过搜索关键词来发现你感兴趣的项目。 Awesome JavaScript:这是一个GitHub仓库,收集
pycharm安装教程
数字化转型背景下的企业数据资产管理两份文件.pptx
C#输出2500进制2位数文字排列组合代码正确