public void newFile() {
index=0;
currentChoice=3; color=Color.black; stroke=1.0f; createNewItem();
repaint();//将有关值设置为初始状态,并且重画 }
5. 各种画图功能的实现 代码如下:
//定义画图的基本图形单元
class drawings implements Serializable//父类,基本图形单元,用到串行化接口,保存时所用 {
int x1,y1,x2,y2; int R,G,B; float stroke; int type; String s1; String s2;
//定义坐标属性 //定义线条粗细属性 //定义色彩属性 //定义字体属性 //定义字体风格属性
void draw(Graphics2D g2d){};//定义绘图函数 }
class Line extends drawings //直线类 {
void draw(Graphics2D g2d)
{g2d.setPaint(new Color(R,G,B)); g2d.setStroke(new BasicStroke(stroke,
BasicStroke.CAP_ROUND,BasicStroke.JOIN_BEVEL)); g2d.drawLine(x1,y1,x2,y2); } }
class Rect extends drawings//矩形类 {
void draw(Graphics2D g2d)
{g2d.setPaint(new Color(R,G,B));
g2d.setStroke(new BasicStroke(stroke)); g2d.drawRect(Math.min(x1,x2),Math.min(y1,y2), Math.abs(x1-x2),Math.abs(y1-y2)); }
26 / 31
}
class fillRect extends drawings//实心矩形类 {
void draw(Graphics2D g2d)
{g2d.setPaint(new Color(R,G,B));
g2d.setStroke(new BasicStroke(stroke)); g2d.fillRect(Math.min(x1,x2),Math.min(y1,y2), Math.abs(x1-x2),Math.abs(y1-y2)); } }
class Oval extends drawings//椭圆类 {
void draw(Graphics2D g2d)
{g2d.setPaint(new Color(R,G,B));
g2d.setStroke(new BasicStroke(stroke)); g2d.drawOval(Math.min(x1,x2),Math.min(y1,y2), Math.abs(x1-x2),Math.abs(y1-y2)); } }
class fillOval extends drawings//实心椭圆 {
void draw(Graphics2D g2d)
{g2d.setPaint(new Color(R,G,B));
g2d.setStroke(new BasicStroke(stroke)); g2d.fillOval(Math.min(x1,x2),Math.min(y1,y2), Math.abs(x1-x2),Math.abs(y1-y2)); } }
class Circle extends drawings//圆类 {
void draw(Graphics2D g2d)
{g2d.setPaint(new Color(R,G,B));
g2d.setStroke(new BasicStroke(stroke)); g2d.drawOval(Math.min(x1,x2),Math.min(y1,y2), Math.max(Math.abs(x1-x2),Math.abs(y1-y2)), Math.max(Math.abs(x1-x2),Math.abs(y1-y2)) ); } }
class fillCircle extends drawings//实心圆 {
void draw(Graphics2D g2d)
27 / 31
{g2d.setPaint(new Color(R,G,B));
g2d.setStroke(new BasicStroke(stroke)); g2d.fillOval(Math.min(x1,x2),Math.min(y1,y2),
Math.max(Math.abs(x1-x2),Math.abs(y1-y2)), Math.max(Math.abs(x1-x2),Math.abs(y1-y2)) ); } }
class RoundRect extends drawings//圆角矩形类 {
void draw(Graphics2D g2d)
{g2d.setPaint(new Color(R,G,B));
g2d.setStroke(new BasicStroke(stroke));
g2d.drawRoundRect(Math.min(x1,x2),Math.min(y1,y2), Math.abs(x1-x2),Math.abs(y1-y2), 50,35); } }
class fillRoundRect extends drawings//实心圆角矩形类 {
void draw(Graphics2D g2d)
{g2d.setPaint(new Color(R,G,B));
g2d.setStroke(new BasicStroke(stroke));
g2d.fillRoundRect(Math.min(x1,x2),Math.min(y1,y2), Math.abs(x1-x2),Math.abs(y1-y2), 50,35); } }
class Pencil extends drawings//随笔画类 {
void draw(Graphics2D g2d)
{g2d.setPaint(new Color(R,G,B)); g2d.setStroke(new BasicStroke(stroke,
BasicStroke.CAP_ROUND,BasicStroke.JOIN_BEVEL)); g2d.drawLine(x1,y1,x2,y2); } }
class Rubber extends drawings//橡皮擦类 {
void draw(Graphics2D g2d)
{g2d.setPaint(new Color(255,255,255)); g2d.setStroke(new BasicStroke(stroke+4,
BasicStroke.CAP_ROUND,BasicStroke.JOIN_BEVEL));
28 / 31
g2d.drawLine(x1,y1,x2,y2); } }
class Word extends drawings//输入文字类 {
void draw(Graphics2D g2d) {
g2d.setPaint(new Color(R,G,B));
g2d.setFont(new Font(s2,x2+y2,((int)stroke)*18)); if (s1!= null )
g2d.drawString(s1,x1,y1); } }
6. 各功能运行结果
打开、保存、设置线宽、颜色设置功能图分别见3-1, 3-2,3-3, 3-4,这里不再赘述。
图4-1 画矩形、椭圆、圆形、圆角矩形、直线、铅笔功能实现图
29 / 31
图4-2 橡皮擦功能实现图
图4-3 添加文字、设置线宽、设置颜色功能图
30 / 31
图4-4 综合功能图
5 设计小结
通过这次的课程设计的学习,我学到了Java中开发图形应用程序的常用控件、事件处理机制、常用功能的实现,如文件读取、数据流的读取和管理、绘图显示等。 通过这次的学习,让我对面向对象的程序设计有一个总体的把握,从软件工程的角度看,有一个完整的脉络,如需求、分析、设计、实现、测试。在需求中,确定要实现一个类似Windows操作系统中的画板程序,并分析了要实现的功能,通过设计类图理清各个类成员之间的静态关系(即依赖关系)、它们之间的动态关系(即调用关系)。然后编码实现,通过运行验证实现效果。
在今后的学习开发中将一直依据这一原则进行相关的开发。因此自己需要对这一过程有一个大体的认识。
参考文献
1. 黄晓东.Java课程设计案例精编(第二版).中国水利水电出版社。2007 2. 谭浩强.Java软件编程实例教程.北京.清华大学出版社.2008.9
3. 【美】John Lewis William Loftus. Java Software Solutions Foundations of Program Design,Sixth Edition.北京. 电子工业出版社,2009.6 4. 荆涛. 数据库平台及开发工具选择.农经纵横, 1999 (5) : 77~ 79
31 / 31