学习JAVA也有几个星期了,这次的画板开发算是刚入门的成果。虽然做的还是……嗯……很挫……不过也算开始熟悉了。
到现在为止,自己编写的这个程序已经有了4个版本了。从刚开始只能画直线的,到加上矩形、椭圆、曲线等、再加上颜色的选择和橡皮的运用;从一开始的只有一个有着几百行的冗长的主程序,到后面的慢慢简化;从毫无美观可言的一个“白板”,到后面有着形象布局的版面。这个过程虽然不长,进步却是可观的。至于说进步在哪里的话,有图有真相。
先来看最初的样子吧,这个可以说是毫无技术感可言,甚至比几岁孩子蹩脚的画还要难看。如果要说它能够有什么作为的话,我可以理直气壮地告诉你,可以在上面画直线!不过,也仅仅是画直线而已。
第二个版本加了一点修饰,也无非是上了画布面板和几个按钮罢了,代码方面多了一个动作监听器用以判断选择了哪个按钮,另外就是加上了椭圆和矩形的画法。说道这两图形,单单使用Graphics中的drawOval和drawRect并不能得到想要的效果,这主要是因为他们的构造方法分别是:
drawOval(int x,int y, int width, int height){};
drawRect(int x,int y, int width, int height){};
单单将获得的起始点坐标(x1,y1)和结束点坐标(x2,y2)输入进去是不能根据鼠标的移动画出图形的。后来将参数改成了(x1,y1,x2-x1,y2-y1),看起来似乎可以了,但这仅仅考虑到了想x2>x1且y2>y1的情况,也即是只能向右下角拉出图形。于是再次修改,针对每种情况进行分析,得到了下面的代码:
if(command.equals("Oval")){
if(x1<x2&&y1<y2){gg.drawOval(x1, y1, x2-x1, y2-y1);
}else if(x1<x2&&y1>y2){gg.drawOval(x1, y2, x2-x1, y1-y2);
}else if(x1>x2&&y1<y2){gg.drawOval(x2, y1, x1-x2, y2-y1);
}else if(x1>x2&&y1>y2){gg.drawOval(x2, y2, x1-x2, y1-y2);
}
矩形的画法是一样的,不过在下偷懒了,用了这么一种囧方法:
gg.drawLine(x1,y1,x2,y1);
gg.drawLine(x1,y1,x1,y2);
gg.drawLine(x1,y2,x2,y2);
gg.drawLine(x2,y1,x2,y2);
无论走向哪边,把四个点连接起来总不会错吧……于是,接下来的版本就是下面这个样子:(粉粉的可爱吧……不过话说后面三个选项其实是摆设……)
接下来是第三个版本,将图标换成了图片格式,加上了曲线、圆角矩形和颜色选择,改进了画面布局,看起来有模有样了。这个版本除了样式改变了一些之外,代码上将各种选项实现的方法类和主函数分开,使主程序代码看起来更为简洁直观,也利于后面修改和添加新功能。新的样子如下图,盗版了XP的画板样式。很像有木有?尤其是下面那个颜色栏对吧?不过,我会告诉你那是个整的截下来的大图吗?
现在是目前的版本,改进了的只有一点点,主要实现了橡皮擦的功能以及颜色栏的选择。现在的颜色栏是可以直接点击选择颜色的,左边的用来监听选择的颜色,右边自然是颜色选择器了。
画板做到这里,算是略有所得了。这途中遇到了许多问题,也曾苦恼、灰心过,但最终那些问题都在在不断地探索和求教中得到了解决。今后的学习中也将会遇到更多的问题,但只要不放弃,总会有解决的时候的。这算是第一篇博文了吧,有关一个初学者的肤浅的体会。