1、佛山科学技术学院可视化编程技术课程设计报告画图软件设计学生姓名: 周敏婷 学 号: 2011914123年级专业:11 级教育技术学 2 班指导老师: 容汝佳学 院: 教育科学学院广东佛山提交日期:2013 年 6 月1目 录1. 前言22概要设计32.1 开发环境 32.2 画图软件功能 32.3 界面设计 32.4 类的框架结构图 43. 详细设计 43.1 使用的 JAVA 类的说明 43.2 类的主要方法 53.2.1 颜色选择器 53.2.2 控制画笔样式 53.2.3 选取颜色按钮的监听件类 63.2.4 设计总体认识 63.2.5 程序流程图 74. 运行结果75. 测试分析85
2、.1 程序运行情况86. 源程序8参考文献14设计总结142摘要:该程序是一个图形界面的简单的 java 画图软件,具有良好的界面,使用人员能快捷简单地进行操作。该画图软件操作较为简单,只需要一直按着左键就能根据你鼠标移动的方面,画出你想要的图案。你也可以选择你自己想到的颜色和画笔的粗细。而且可以显示你当前的画笔的状态。界面为灰白对称。是一个非常简单的作图工具,让人能轻松上手。关键字:java,画图类,方法,事件1 前言随着科学技术的不断发展,计算机已经成为我们工作学习和生活中不可缺少的工具。文本编辑器是个人计算机最司空见惯的应用程序了,在学习了 Java语言之后,我决定使用 Java 语言编
3、写一个简单的画图工具,可以实现简单的画图作图功能,满足日常基本的工作学习和娱乐需要。Java 是由 Sun 公司开发的新一代纯面向对象的网络编程语言。其目标是建立一种在任意种机器、任一种操作系统的网络环境中运行的软件,实行所谓的“程序写一次,到处运行”的目标。正因为如此,Java 已成为当今 Internet上最流行、最受欢迎的一种程序开发语言。Java 开发小组把 Java 按特性分为基本版、移动版、企业版,每个版本有一个软件开发包。Java 基本版本叫 Java 2 标准版(Java 2 Standard Edition,J2SE),它包含建立 Java 应用程序或者是 Applet 所需
4、的应用程序编程接口(API) 。Java 2 移动版(The Java 2 Mobile Edition,J2ME)包含创建无线 Java 应用程序的 API。还有 Java 2 企业版(The Java 2 Enterprise,J2EE)是 J2SE 的增强版本,包含建立多层架构应用程序 API。Java 语言是由 C+语言发展起而来的,是一种彻底的面向对象的程序设计语言。作为一种纯面向对象的程序设计语言,它非常适合大型软件的开发。Java 语言去掉了 C+语言的一些容易引起错误的特性。Java 语言的特点有:面向对象、跨平台、安全性、多线程和图形功能强。32 概要设计2.1 开发环境开发
5、平台:Microsoft Windows XP Professional Service Pack 2开发工具:JBuilder 2007 + JDK 1.6.0_022.2 画图软件功能功能 1:按着鼠标左键能随心所欲的画出想要的图形 功能 2:可自助地选择画笔的粗细功能 3:可自助地颜色选择功能 4:可以显示你当前的画笔状态2.3 界面设计图 2.3 画图面板42.4 类的框架结构图图 2.43 详细设计3.1 画图软件使用的 Java 类的说明类名:DrawPane 类 作用:主类,继承的父类: Frame 类,构造方法 DrawPane()实现了放各种组件,界面的构造,构造画图板 颜色
6、选择器和画笔的粗细等功能 类名:ButtonColorAction 实现的接口:ActionListener 作用:选取颜色按钮的监听事件类 监听按钮动作类名:ButtonCursor作用:鼠标进入按钮变换光标样式监听事件类 继承的类:MouseAdapter 继承了鼠标的适配器 类名:ButtonStrokeAction操作public class DrawPane extends Frameclass ButtonColorAction implements ActionListener class ButtonCursor extends MouseAdapterclass Button
7、StrokeAction implements ActionListenerclass Palette extends Panel implements MouseListener, MouseMotionListener属性package kasa;DrawPane5作用:设置画笔的监听事件类 实现的接口:ActionListener 作用:选取颜色按钮的监听事件类 监听按钮动作类名:Palette 继承的父类:Panel 类 作用:画板类 实现的接口:MouseListener, MouseMotionListener 重写了鼠标监听器的五个方法 mouseMoved(MouseEvent
8、 e)、mouseDragged(MouseEvent e)、mouseExited(MouseEvent e)、mouseEntered(MouseEvent e)和mouseReleased(MouseEvent e)。同时实现了 MouseMotionListener 接口,调用addMouseMotionListener(this)方法对鼠标的动作进行监听3.2 类的主要方法3.2.1 颜色选择器:Panel pane = new Panel(new GridLayout(2, 1); / 画笔颜色选择器Panel paneColor = new Panel(new GridLayou
9、t(1, 13); / 12 个颜色选择按钮Button buttonColor = new Button12;Color color = Color.black, Color.blue, Color.cyan, Color.darkGray,Color.gray, Color.green, Color.magenta, Color.orange,Color.pink, Color.red, Color.white, Color.yellow ; / 显示当前 颜 色的面板3.2.2 控制画笔样式:Panel paneStroke = new Panel(new GridLayout(1, 1
10、3); / 控制画笔样式buttonStrokeAction = new ButtonStrokeAction();Button buttonStroke = new Button11;buttonStroke0 = new Button(“1“);buttonStroke1 = new Button(“3“);buttonStroke2 = new Button(“5“);buttonStroke3 = new Button(“7“);buttonStroke4 = new Button(“9“);buttonStroke5 = new Button(“11“);buttonStroke6
11、= new Button(“13“);buttonStroke7 = new Button(“15“);6buttonStroke8 = new Button(“17“);buttonStroke9 = new Button(“);buttonStroke10 = new Button(“);drawWidth = new Label(“颜色“, Label.CENTER);drawCap = new Label(“, Label.CENTER);drawWidth.setBackground(Color.lightGray);drawCap.setBackground(Color.light
12、Gray);paneStroke.add(drawWidth);3.2.3 选取颜色按钮的监听事件类:class ButtonColorAction implements ActionListener public void actionPerformed(ActionEvent e) Colorcolor_temp=(Button) e.getSource().getBackground();nonceColor.setBackground(color_temp);palette.setColor(color_temp);3.2.4 设计的总体认识 JAVA 设计的摘要 JAVA 设计的目录
13、结构 JAVA 设计的概要和详细设计 JAVA 设计的版权意识 JAVA 设计需要编译的环境 JAVA 设计的实用性3.2.5 程序流程图开始7图 3 绘制画图软件方法 PAD 图4 运行结果图 4 画图软件结果显示粗细选择颜色选择绘图 绘图85 测试分析5.1 程序运行情况: 当运行程序的时候,你可以进入界面,单击你所需要的颜色和画笔的粗细来进行作图。当你觉得你对你的画不满意的时候,你可以选择白色来清除你的画面。6 程序清单:package kasa;import java.awt.BasicStroke;import java.awt.BorderLayout;import java.aw
14、t.Button;import java.awt.Color;import java.awt.Cursor;import java.awt.Dimension;import java.awt.Frame;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.GridLayout;import java.awt.Label;import java.awt.Panel;import java.awt.RenderingHints;import java.awt.event.ActionEvent;import jav
15、a.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.awt.image.BufferedImage;/* *JAVA版画图小工具 * * *
16、author kasa * */public class DrawPane extends Frame / 画板private Palette palette = null; / 显示当前颜色的面板private Panel nonceColor = null; / 画笔粗细9private Label drawWidth = null; / 画笔端点的装饰private Label drawCap = null; / 选取颜 色按钮的监听事件类private ButtonColorAction buttonColorAction = null;/ 鼠标进 入按钮后光标样 式的监听事件类pri
17、vate ButtonCursor buttonCursor = null; / 画笔样式的监听事件private ButtonStrokeAction buttonStrokeAction = null;/* * 构造方法 * */public DrawPane() / 设置标题栏文字super(“JAVA版画图小工具“); / 构造一个画图板palette = new Palette();Panel pane = new Panel(new GridLayout(2, 1); / 画笔颜色选择器Panel paneColor = new Panel(new GridLayout(1, 13
18、); / 12 个颜色选择按钮Button buttonColor = new Button12;Color color = Color.black, Color.blue, Color.cyan, Color.darkGray,Color.gray, Color.green, Color.magenta, Color.orange,Color.pink, Color.red, Color.white, Color.yellow ; / 显示当前 颜 色的面板nonceColor = new Panel();nonceColor.setBackground(Color.black);paneC
19、olor.add(nonceColor);buttonColorAction = new ButtonColorAction();buttonCursor = new ButtonCursor();for (int i = 0; i buttonColor.length; i+) buttonColori = new Button();buttonColori.setBackground(colori);buttonColori.addActionListener(buttonColorAction);buttonColori.addMouseListener(buttonCursor);pa
20、neColor.add(buttonColori);pane.add(paneColor); / 画笔颜色选择器Panel paneStroke = new Panel(new GridLayout(1, 13); / 控制画笔样式buttonStrokeAction = new ButtonStrokeAction();Button buttonStroke = new Button11;buttonStroke0 = new Button(“1“);buttonStroke1 = new Button(“3“);buttonStroke2 = new Button(“5“);buttonS
21、troke3 = new Button(“7“);buttonStroke4 = new Button(“9“);buttonStroke5 = new Button(“11“);10buttonStroke6 = new Button(“13“);buttonStroke7 = new Button(“15“);buttonStroke8 = new Button(“17“);buttonStroke9 = new Button(“);buttonStroke10 = new Button(“);drawWidth = new Label(“粗细“, Label.CENTER);drawCa
22、p = new Label(“, Label.CENTER);drawWidth.setBackground(Color.lightGray);drawCap.setBackground(Color.lightGray);paneStroke.add(drawWidth);for (int i = 0; i buttonStroke.length; i+) paneStroke.add(buttonStrokei);buttonStrokei.addMouseListener(buttonCursor);buttonStrokei.addActionListener(buttonStrokeA
23、ction);if (i = 8) buttonStrokei.setName(“width“); else buttonStrokei.setName(“cap“);if (i = 8) paneStroke.add(drawCap);pane.add(paneStroke); / 将画笔颜色选择器添加到窗体中this.add(pane, BorderLayout.NORTH); / 将画图板添加到窗体中this.add(palette); / 添加窗口监听,点 击关闭按钮时退出程序this.addWindowListener(new WindowAdapter() public void
24、windowClosing(WindowEvent e) System.exit(0);); / 设置窗口的大小this.setSize(new Dimension(400, 430); / 设置窗口位置,处于屏幕正中央this.setLocationRelativeTo(null); / 显示窗口this.setVisible(true);/* * 程序入口 * * param args * 字符串数组参数 */public static void main(String args) new DrawPane();/* * 选 取颜色按钮的监听事件类 * author kasa * */cl
25、ass ButtonColorAction implements ActionListener 11public void actionPerformed(ActionEvent e) Color color_temp = (Button) e.getSource().getBackground();nonceColor.setBackground(color_temp);palette.setColor(color_temp);/* * 鼠 标进入按钮变换光标样式监听事件类 * author kasa * */class ButtonCursor extends MouseAdapter p
26、ublic void mouseEntered(MouseEvent e) (Button) e.getSource().setCursor(new Cursor(Cursor.HAND_CURSOR);public void mouseExited(MouseEvent e) (Button) e.getSource().setCursor(new Cursor(Cursor.DEFAULT_CURSOR);/* * 设 置画笔的监听事件类 * author kasa * */class ButtonStrokeAction implements ActionListener public
27、void actionPerformed(ActionEvent e) Button button_temp = (Button) e.getSource();String name = button_temp.getName();if (name.equalsIgnoreCase(“width“) drawWidth.setText(button_temp.getLabel();palette.setStroke(Float.parseFloat(button_temp.getLabel(); else if (name.equalsIgnoreCase(“cap“) drawCap.set
28、Text(button_temp.getLabel();if (button_temp.getLabel().equals(“) palette.setStroke(BasicStroke.CAP_SQUARE); else if (button_temp.getLabel().equals(“) palette.setStroke(BasicStroke.CAP_ROUND);/* * 画板类 * * author kasa * */class Palette extends Panel implements MouseListener, 12MouseMotionListener / 鼠标
29、/ X/ 坐标的位置private int mouseX = 0; / 上一次 X 坐标位置private int oldMouseX = 0; / 鼠标 Y 坐标的位置private int mouseY = 0; / 上一次 Y 坐标位置private int oldMouseY = 0; / 画图颜色private Color color = null; / 画笔样式private BasicStroke stroke = null; / 缓存图形private BufferedImage image = null;/* * 构造一个画板 类 * */public Palette() t
30、his.addMouseListener(this);this.addMouseMotionListener(this); / 默认黑色画笔color = new Color(0, 0, 0); / 设置默认画笔样式stroke = new BasicStroke(3.0f, BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND); / 建立 1280 * 1024 的 RGB 缓存图象image = new BufferedImage(1280, 1024, BufferedImage.TYPE_INT_RGB); / 设置颜色image.getGraph
31、ics().setColor(Color.white); / 画背景image.getGraphics().fillRect(0, 0, 1280, 1024);/* * 重写 paint 绘图 方法 */public void paint(Graphics g) super.paint(g); / 转换为 Graphics2DGraphics2D g2d = (Graphics2D) g; / 获取缓存图形 Graphics2DGraphics2D bg = image.createGraphics(); / 图形抗锯齿bg.setRenderingHint(RenderingHints.K
32、EY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); / 设置绘图颜色bg.setColor(color); / 设置画笔样式bg.setStroke(stroke); / 画线,从上一个点到新的点bg.drawLine(oldMouseX, oldMouseY, mouseX, mouseY); / 将缓存中的图形画到画板上g2d.drawImage(image, 0, 0, this);/* * 重写 update 方法 */public void update(Graphics g) this.paint(g);13/* * return
33、 stroke */public BasicStroke getStroke() return stroke;/* * param stroke 要设置的 stroke */public void setStroke(BasicStroke stroke) this.stroke = stroke;/* * 设 置画笔粗细 * param width */public void setStroke(float width) this.stroke = new BasicStroke(width, stroke.getEndCap(),stroke.getLineJoin();/* * 设置画笔
34、端点的装饰 * param cap 参考 java.awt.BasicStroke 类静态字段 */public void setStroke(int cap) this.stroke = new BasicStroke(stroke.getLineWidth(), cap,stroke.getLineJoin();/* * return color */public Color getColor() return color;/* * param color 要设置的 color */public void setColor(Color color) this.color = color;p
35、ublic void mouseClicked(MouseEvent mouseEvent) /* * 鼠 标按下 */public void mousePressed(MouseEvent mouseEvent) this.oldMouseX = this.mouseX = mouseEvent.getX();this.oldMouseY = this.mouseY = mouseEvent.getY();repaint();14public void mouseReleased(MouseEvent mouseEvent) /* * 鼠 标进入棋盘 */public void mouseE
36、ntered(MouseEvent mouseEvent) this.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR);/* * 鼠 标退出棋盘 */public void mouseExited(MouseEvent mouseEvent) this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR);/* * 鼠 标拖动 */public void mouseDragged(MouseEvent mouseEvent) this.oldMouseX = this.mouseX;this.oldMouseY = t
37、his.mouseY;this.mouseX = mouseEvent.getX();this.mouseY = mouseEvent.getY();repaint();public void mouseMoved(MouseEvent mouseEvent) 参考文献Java 语言程序设计.清华大学出版社.丁振凡主编设计总结经过一个学期的 JAVA 学习,对 JAVA 编程有了一定的认识,在做这个课程设计的时候,刚开始感觉自己无从下手,不知道该怎么开始,很茫然。最终利用网络资源和查阅图书馆的书籍,在老师和同学的指导和讨论下,经过一段时间终于完成了这个设计。当程序运行结束看到弹出的计算器的界面
38、时,感到很欣慰,虽然只是一个小小的东西,但却是自己起步的成就,从中学到了很多书本知识不能体现的东西,对 JAVA 的学习有了一定的兴趣。也通过这次的程序设计感觉到自己平时对于编程实际操作的贫乏,没有把书本上的知识真正的掌握牢固。这次的设计作品是画图软件的设计。其实一开始设计出来的效果只是单一的一个画图软件,只能单纯地画图和能够双击清楚画面,但是考虑到功能并不多,所以打算添加颜色选择和粗细选择的功能。因为,本人知识有限,所以上网搜15索了一下,发现网上这种 java 版本的画图程序也是蛮多的。所以参考了一下,决定选用按钮来控制颜色和画笔的粗细。因此本作品是 DrawPane 类, 继承了 Fra
39、me 类,放各种组件,界面的构造,构造画图板颜色选择器和画笔的粗细。 ButtonColorAction 选取颜色按钮的监听事件类,ButtonCursor 鼠标进入按钮变换光标样式监听事件类,ButtonStrokeAction 设置画笔的监听事件类Palette 画板类。继承了 Panel 类,实现了 MouseListener, MouseMotionListener 两个接口,重写了鼠标监听器的五个方法。在网上参考了一下一些也是通过设计按钮的监听事件类的程序,在他们的基础上更改了自己原本的程序。放置了各种组件,以及设置了一些颜色的数量。因为网上的颜色数目比较多,我就把一些删除了,把界面
40、简单化了。同样,画笔的粗细也一样,把一些删除了。主要是参考了网上程序的通过 ButtonStrokeAction 设置画笔的监听事件类 Palette 画板类。通过这次作品的学习真的获益良多,因为从你开始设计一个程序,你就必须得回顾好多知识,又因为自己的不怎么熟悉java,所以很多东西都要慢慢看,有时还需要上网参考一下别人的程序。当然,在这过程,我遇到有自己不能处理的问题,我都是通过问同学,问师兄师姐来解决。当程序出现 bug 的时候,我会从上往下,寻找自己的程序是不是打错,然后再看是不是不符合程序。最终把 bug 消除。这是一个蛮吃力的过程。然后,在这份实验报告的时候,我觉得就是对自己作品的一个理清思路,因为有些是参考网上的程序的,所以,你必须理解了你最终编写出来的程序,你才能把这个实验报告写出来。不然,有些地方,你真的无处下手说明清楚。在最后,我要感谢我的老师在这个学期以来,对我的悉心指导,因为我们有的时候真的对java 有点不解,但是他仍然能帮助我们理清思路,帮助我们更好地学习 java。