Java 语言课程设计实验报告
一、 课程题目
设计一个画图程序,能够实现画笔、画直线、画圆形、画矩形的功能,并且在绘图过
程中能够修改该画笔的大小以及颜色。该画图程序还需具有橡皮擦功能以及清空整个画面
的功能。
二、需求分析
此程序要实现的功能如下:
1、这个画图程序,最基本的功能是,作为一个画笔,能利用它实现在屏幕上任意绘画、
书写的功能;
2、利用这个画图程序,通过选择画直线、画圆形、画矩形等功能选项并且在屏幕上拖动
鼠标操作能实现画出相应图形的功能;
3、这个画图程序,还需具备橡皮擦的功能,利用这个橡皮擦能够擦除屏幕上的图案,并
且此橡皮擦也应该能够改变大小;
4、这个画图程序,还应该做到能够改变画笔颜色的功能;
5、这个画图程序,还应该具备能够清除整个屏幕已绘制图画的功能。
三、概要设计
1、此程序为实现这些功能模块,必须首先定义一个工具面板,将这些画笔、画直线、画
圆形、画矩形、画笔颜色、画笔大小、橡皮等功能组件放入这个工具面板中。
2、此程序为实现利用鼠标做画笔的功能,必会产生鼠标事件 MouseEvent。因此,为实
现鼠标画图的功能,必须用到鼠标触发事件,故在此程序中,必须实现“委托事件模型”,
用到事件源、事件对象以及监听者对象。
3、此程序中,必须用到的包如下:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import java.awt.geom.*;
4、此程序中,涉及到以下三个类:
① class Point
此类用于定义一组数据成员,并且使用构造函数将他们分别初使化,以方便在下面的
程序中使用他们。
② class paintboard expends Frame implements
ActionListener,MouseMotionListener,
MouseListener,ItemListener
此类用于实现这个程序的大部分功能,在这个类中除了定义一些基本变量以及构造函数
外,还定义了很多成员方法,这些成员方法将实现鼠标触发事件的一系列绘图功能。
③ public class PaintBrush
这个类是主类,是程序得以运行的入口。在这个主类中定义了主方法,是该程序执行
的入口。
四、详细设计
1) class Point
在这个类中定义了用于截断的一系列标志变量,有初始坐标、颜色、工具选择等,并且
在这个类中还定义了构造函数 Point(int x, int y, Color col, int tool, int boarder),用
于完成对这些变量的初始化工作。
2 ) class paintboard expends Frame implements
ActionListener,MouseMotionListener,
MouseListener,ItemListener
这个类用来实现整个程序的大部分功能,并且在这个类中定义了大部分的成员函数和
成员方法,在这个类中用到的主要成员方法如下:
Public void paint(Graphics g)
public void itemStateChanged(ItemEvent e)
public void mouseDragged(MouseEvent e)
public void mousePressed(MouseEvent e)
public void mouseReleased(MouseEvent e)
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public void mouseMoved(MouseEvent e){}
public void actionPerformed(ActionEvent e)
1 定义的变量:
在这个类中,首先定义了画笔的大小、画笔的颜色、画笔的粗细、橡皮的大小、
工具的选择等一些变量,并且还用到了系统中自带的一些类初使化了一些面板工具对
象,用于完成对面板工具、画直线、画椭圆、画矩形、橡皮擦、清除等一些工具按钮
的定义。
2 初使化构造函数:
在这个初使化构造函数中,首先继承了父类 Frame,然后初使化了各工具按钮以
及各个选择项,包括颜色选择、画笔大小选择、橡皮大小选择,并且将这些组件添加
到了工具面板中,最后还对各个组件注册了事件监听者对象。
3 paint()方法:
这个方法主要用于在 Applet 的界面中显示文字、图形和其它界面元素。本程序中,
在这个方法中,定义了一些工具选项设置,给用户选择画笔、画直线、画圆、橡皮擦等一
些功能。
4 itemStateChanged()方法:
这个方法用来实现的功能很简单,主要是用来改变画笔大小、画笔颜色、橡皮大小的。
在此方法中,设置了大小以及颜色的一些预选项,以供用户对大小以及颜色做出选择。
5 mouseDragged()方法:
此 方 法 是 处 理 MouseEvent 事 件 以 实 现 MouseMotionListener 接 口 的 对 象 。
MouseMotionListener 是事件监听者,mouseDragged(MouseEvent e)是成员方
法,代表鼠标拖动事件,在这个方法中,还用到了 MouseEvent 类常用成员方法:
public int getX()以及 public int getY(),用来返回发生鼠标事件的 X 及 Y 的坐标。
这个方法中,主要用来控件画笔和橡皮的转换。
6 mousePressed()方法:
此 方 法 是 处 理 MouseEvent 事 件 以 实 现 MouseListener 接 口 的 对 象 。
MouseListener 是事件监听者,mouseDPressed(MouseEvent e)是成员方法,代表鼠
标按下事件。这个方法主要用来控件用户画直线、画圆、画矩形这些功能之间的转换。
⑦ mouseReleased()方法:
mouseEntered()方法:
mouseExited()方法:
mouseClicked()方法:
这些方法和 mousePressed()方法属于同一类,他主要用来表示鼠标释放事件,
是对上述各个功能完成后对鼠标事件的又一次触发。
五、测试数据及运行结果
1、画笔在屏幕上绘画
2、改变画笔的粗细
3、画直线、画圆、画矩形