学习Java初期(现在也在初期),做了一个简单的画板,时至今日,才打开ItEye(时过境迁,JavaEye已经强制转型为ItEye了,可叹啊)开始回顾我的画板诞生的全过程,由于个人偏好,本人将我开发的东东通通冠以“魔幻蓝诗”商标,如有雷同,铲草除根
。
首先,阐述一下个人认为的开发画板的技术点:监听器的使用、画板的重绘(牵涉到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:个人认为,我们在开发各种项目时应该遵循模块化设计的理念,即一个方法只做一件事。
- 大小: 55.8 KB
分享到:
相关推荐
24智工蓝诗玉24112040148 (2).zip
#### 二、案例一:江西会昌残疾青年蓝诗勇的电商创业之路 ##### 1. 背景简介 - **人物简介**:蓝诗勇,江西会昌县筠门岭镇民范村人,自小患有先天性下肢残疾。 - **教育经历**:毕业于江西渝州科技职业学院。 - **...
maxwell simplorer simulink 永磁同步电机矢量控制联合仿真,电机为分数槽绕组,使用pi控制SVPWM调制,修改文件路径后可使用,软件版本matlab 2017b, Maxwell electronics 2021b 共包含两个文件, Maxwell和Simplorer联合仿真文件,以及Maxwell Simplorer simulink 三者联合仿真文件。
基于springboot的网上图书商城--论文.zip
门板边挡板分离喂料机sw19全套技术资料100%好用.zip
信号与系统matlab仿真实验报告2024(学生提交).docx
洗砂机stp全套技术资料100%好用.zip
用句子记忆单词带背版本,适合时间比较充足想打好基础的同学
电子PCB板龙门铣自动化生产线sw17可编辑全套技术资料100%好用.zip
最新紧固件标准型号对照表.docx
【创新无忧】基于matlab遗传算法GA优化极限学习机KELM故障诊断【含Matlab源码 10735期】.zip
【创新无忧】基于matlab极光算法PLO优化极限学习机KELM故障诊断【含Matlab源码 10707期】.zip
java面向对象程序设计实验报告
展示PRD文档的关键要素编写具体示例。同时提供了一份模板,方便撰写PRD文档。
内容概要:本文详细介绍了一个基于广义变分同步优化(GVSAO)的时间序列预测模型项目。该项目涵盖了从项目背景到最终部署的整个流程,包括数据预处理、模型构建、训练、优化、GUI界面设计、实时预测及系统部署等方面。GVSAO作为一种新型优化方法,能更好地处理非线性关系和高维数据的特点,在预测股票价格、电力负荷、天气变化等方面显示出优越性能。文中提供的MATLAB代码和可视化工具使模型实现和评估更为便捷。 适合人群:对时间序列预测感兴趣的科研工作者、学生和工程师,特别是那些想要深入了解同步优化技术及其应用场景的人。 使用场景及目标:①适用于金融、能源、气象和制造业等多个领域的时间序列预测;②提升模型预测精度;③提供一个完整的项目实施模板供学习模仿。使用该模型可以更有效地挖掘时间序列数据背后隐含的趋势和规律,辅助商业决策和社会管理。 其他说明:本文档不仅包含理论概念和技术细节,还有丰富的实例演示,可以帮助读者全面掌握基于GVSAO的时间序列预测技巧。同时,附带完整的程序代码使得研究成果可以直接应用于实际工作中。
DSP芯片程序读取 DSP28德州仪器28系列DSP反汇编,定点器件和浮点器件均支持,能够根据out、hex或bin文件建立可以编译的CCS汇编语言工程,并且编译后可生成二进制完全相同的bin文件,方便进行研究软件设计思路,二次开发,器件迁移,混淆再链接,研究通信协议,解除ID限制,提取算法等,小批量的代码转C。
内容概要:本文介绍了一种基于对比学习的图异常检测算法,涵盖数据预处理、对比样本构建、模型设计(含选择适当的GNN架构及设计对比学习模块)、异常检测流程、结果评估方法和代码实例六个主要环节。文章特别强调在常规数据集(如Cora、PubMed)的应用上力求获得较高的AUC分数,超过80%,并且提供了详细的操作指导和Python源代码示例供开发者学习。 适用人群:主要面向有一定机器学习、深度学习理论基础,尤其关注图结构数据处理的研究人员、数据科学家和技术专家。对于有志于从事网络安全监控、金融风控等领域工作的专业人士尤为有用。 使用场景及目标:①针对具有大量节点关系的数据结构进行高效的异常识别;②利用先进的AI技术和工具箱快速搭建并迭代优化系统性能,达成高效准确的预测;③为后续研究提供参考和启示。 其他说明:文中不仅深入解析了每一阶段的技术细节,而且通过具体的Python实现片段帮助读者更好地理解和实践这一复杂的过程。对于期望深入挖掘对比学习在非传统数据格式下应用可能性的人而言是个宝贵的参考资料。
MIPI-DPU platform TCL
【JavaScrip】一个傻妞机器人插件库_pgj
comsol锂离子电池组充放电循环强制液冷散热仿真。 模型为SolidWorks导入,可以提供原模型。 电池模型:一维电化学(p2d)模型耦合三维热模型