在校大学生的一份辛苦劳动成果写了一个小画板程序。
任务书... 1
1.1设计内容... 1
1.2设计任务及具体要求... 1
1.3软件开发运行环境.. 1
2 本组课题... 1
2.1课题... 1
2.2本人任务... 2
3 程序功能简介... 2
1.画板具体功能.. 2
2.功能分析:... 2
4 主体内容... 2
4.1设计分析... 2
4.2程序架构图... 3
4.2.1系统结构分析图... 3
4.2.2程序结构流程图... 4
4.2.3结构流程图... 5
4.3模块功能与说明... 6
4.4源程序... 10
4.4.1Gui类... 10
4.4.2DrawListener类... 13
4.4.3接口图形类... 18
4.5操作方法... 24
4.6实验结果... 25
4.7设计体会... 26
1 设计任务书
1.1设计内容
学习了《Java面向对象编程》的课程,为了更进一步的提高我们对Java的深入学习,进行了课程设计,我所选择课程设计是利用Java的GUI实现画图应用程度。其目的是通过本课程设计使我们能够较全面的掌握面向对象程序设计的有关概念和开发方法,以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。
运用JAVA语言,实现界面画板,进行简单图形绘制。
1.2设计任务及具体要求
主要利用java语言设计开发一个小型的画图应用程序,至少具有如下功能:可以进行绘画,有颜色的选择,可以绘制直线、曲线、椭圆、矩形,操作界面要符合用户的一般习惯。
1.3软件开发运行环境
本软件开发平台:JAVA
本软件开发环境:IntelliJ IDEA Community Edition 2018.1.4 x64
本软件运行平台:Windows 10
2 本组课题
2.1课题
JAVA绘图板课程设计。
2.2本人任务
1.编写画板界面。
2.添加组件监听、鼠标监听功能。
3.编写图形类的接口。
4.编写各种图形类并实现图形的重绘。
3 程序功能简介
1.画板具体功能
1)利用Java设计一个画图应用程序;
2)可绘制直线、曲线、椭圆、矩形;
3)可改变线条颜色;
2.功能分析:
用户可以在界面上通过点击各个不同的按钮,选择实现绘制的是哪种图形和颜色,也可以清除画板,程序将自动把所绘制的图形类放在一个集合中,最大化和最小化后遍历该集合,图形实现重绘。
画板画笔分为两种,一种是Graphics,一种是Graphics 2D。可以用来画基本图形还有喷桶、橡皮擦效果。
4 主体内容
4.1设计分析
1.绘图工具已经广为使用,利用JAVA语言编写的画板可以满足基本的图形要求,为了实现绘制矩形、圆形、椭圆、多边形、直线、曲线铅笔等基本图形,在此程序中定义上述几种图形类,实现编写的一个重绘接口。
2.在用户界面GUI类中,继承了JFrame类,添加各种按钮、两个面板,分别用来画图和存放按钮组件,界面采用流式布局,为组件添加编写好的事件监听机制。
3.在事件监听DrawListener类中实现了MouseListener、MouseMotionListener、ActionListener监听接口,并重写其绘图方法。
4.在事件监听类中,定义一个字符串str用来储存按钮按下时上面的内容,如果无文字,则判断为颜色按钮,把画笔颜色color设置为按钮颜色;有文字的话根据按钮文字的不同,去调用不同的图形类方法,并在绘制图形后保存在集合中。
5.在界面GUI类中调用DrawListener类,新建draw引用,为每个按钮添加该事件引用并调用ArrayList集合类,遍历所绘制的图形类,进行重绘。
4.2程序架构图
4.2.1系统结构分析图
画图区 画笔颜色
笔刷
工具栏 设置 橡皮檫
清除面板
形状选择
矩形 实矩形 椭圆 实椭圆 直线 曲线 多边形
4.2.2程序结构流程图
NetJavaShape接口
图形类 事件监听类 其它类
主界面类
4.2.3结构流程图
开始
Gui类
点击按钮
DrawListener类 NetJavaShape接口
判断
按钮 颜色类
图形类
画图 结束
4.3模块功能与说明
1.绘图主界面模块
1主类(GUI)用来生成主界面。
2完成画图的框架。
3主界面由画图区、工具栏组成,布局格式采用BorderLayout布局。
4界面截图
2.绘图类模块
1在程序中用到了JAVA的封装、多态、继承特性,定义了NetJavaShape接口,里面写了redraw()抽象方法。
2分别构造不同的图形类:直线类(reline)、实矩形类(refilljuxing)、曲线类(requxian)、射线类(reshexian)、矩形类(rejuxing)、折线类(rezhexian)、椭圆类(retuoyuan)、实椭圆类(refilltuoyuan)。
3每个图形类都实现NetJavaShape接口中的redraw()方法,每个方法中根据形状选择不同的绘制方法函数。
4每个类可以在事件监听类中新建不同的对象引用,根据按钮选择不同可以调用不同的图形类画法。
5部分代码
import java.awt.*; //定义一个接口,里面用抽象方法让图形类实现该接口
public interface NetJavaShape{
public abstract void redraw();
}
- 鼠标及组件的事件监听模块
1 DrawListener实现ActionListener、MouseListenerMouseMotionListener接口。
2定义List<NetJavaShape> getShapeArr()、setG(Graphics g)、setNowColor(JButton nowColor)方法用来获取图形类集合、画笔、当前按钮颜色。
3在actionPerformed(ActionEvent e)方法中用来判断按钮按下时要执行哪种命令。mouseDragged(MouseEvent e)方法中用来执行射线、曲线、橡皮檫、笔刷操作。mousePressed(MouseEvent e)、mouseReleased(MouseEvent e)方法中记录当前鼠标点击和释放的位置坐标。mouseReleased(MouseEvent e)中执行矩形、椭圆、实椭圆、折线、直线、实矩形、喷桶、多边形、擦除面板操作。
4 mouseClicked(MouseEvent e)方法中执行多边形连接操作。
}
else if ("擦除面板".equals(str)){
reclear=new clear(g);
reclear.redraw();
shapeArr.add(reclear);
}
}
@Override
public void mouseClicked(MouseEvent e) {
if(str.equals("多边形")&&flag){ //鼠标点击时绘制连接多边形
g.setColor(color);
x2=e.getX(); //获取新的点的坐标
y2=e.getY();
if(e.getClickCount()==2){ //记录点击次数,点击第二次后开始直线连接
g.drawLine(startx1,starty1,startx2,starty2);
flag=false;
}
g.drawLine(startx2,starty2,x2, y2);
startx2=x2; //存下上个点的坐标
starty2=y2;
}
}
@Override
public void mouseMoved(MouseEvent e) {
}
}
}
}
4.5操作方法
本软件由IntelliJ IDEA Community Edition 2018.1.4 x64开发,运行后直接进入界面。
1用户打开软件,点击工具栏界面上不同的按钮,可以画出不同的图形。 2系统默认画笔颜色是黑色,用户也可以点击颜色按钮进行不同颜色的图形绘制。 3当最大化和最小化时,绘制的图形不会改变,将自动进行图形重绘,也能够用笔刷和橡皮檫工具,实现图形美化。
4.6实验结果
基本实现图形绘制、颜色选择、橡皮檫、笔刷、喷桶功能,具体运行结果如下。
4.7设计体会
当把程序写好并进行调试时,并不是一帆风顺的,在程序编译过程中遇到了许许多多的大大小小的错误,经过一次又一次的改正错误最终完成了程序设计
1画图应用程序的Java源代码全部正确能够通过编译并正常运行。
2画图程序要求功能:画直线、曲线、矩形、椭圆、选择颜色等功能完全实现。
3通过Java编程完全实现了课程设计任务书的全部功能。学好一门语言,需要不断反复的练习,面向对象的设计模式,充分运用类与对象的关系,JAVA没有多继承,所以在画板软件中定义了一个接口,让不同的绘图类实现该接口,重写不同的方法。图形类中定义了面板、按钮组件,在事件监听类中,根据不同按钮,调用生成不同图形对象。在这里,为了实现重新绘制,需要图形对象放在集合中,然后在主类中遍历。
通过这次课程设计,提高了我对封装、继承、多态、接口、集合的认识,对事件处理也了解,知识体系进一步扩展,掌握的更加牢固紧密。