当前位置:文档之家› Java画图软件设计报告

Java画图软件设计报告

佛山科学技术学院《可视化编程技术》课程设计报告画图软件设计学生姓名:周敏婷学号: 2011914123年级专业:11级教育技术学2班指导老师:容汝佳学院:教育科学学院广东★佛山提交日期:2013年6月目录1. 前言 (2)2.概要设计 (3)2.1 开发环境 (3)2.2 画图软件功能 (3)2.3 界面设计 (3)2.4 类的框架结构图 (4)3. 详细设计 (4)3.1 使用的JAVA类的说明 (4)3.2 类的主要方法 (5)3.2.1 颜色选择器 (5)3.2.2 控制画笔样式 (5)3.2.3 选取颜色按钮的监听件类 (6)3.2.4 设计总体认识 (6)3.2.5 程序流程图 (7)4. 运行结果 (7)5. 测试分析 (8)5.1 程序运行情况 (8)6. 源程序 (8)参考文献 (14)设计总结 (14)摘要:该程序是一个图形界面的简单的java画图软件,具有良好的界面,使用人员能快捷简单地进行操作。

该画图软件操作较为简单,只需要一直按着左键就能根据你鼠标移动的方面,画出你想要的图案。

你也可以选择你自己想到的颜色和画笔的粗细。

而且可以显示你当前的画笔的状态。

界面为灰白对称。

是一个非常简单的作图工具,让人能轻松上手。

关键字:java,画图类,方法,事件1 前言随着科学技术的不断发展,计算机已经成为我们工作学习和生活中不可缺少的工具。

文本编辑器是个人计算机最司空见惯的应用程序了,在学习了Java语言之后,我决定使用Java语言编写一个简单的画图工具,可以实现简单的画图作图功能,满足日常基本的工作学习和娱乐需要。

Java是由Sun公司开发的新一代纯面向对象的网络编程语言。

其目标是建立一种在任意种机器、任一种操作系统的网络环境中运行的软件,实行所谓的“程序写一次,到处运行”的目标。

正因为如此,Java已成为当今Internet上最流行、最受欢迎的一种程序开发语言。

Java开发小组把Java按特性分为基本版、移动版、企业版,每个版本有一个软件开发包。

Java基本版本叫Java 2标准版(Java 2 Standard Edition,J2SE),它包含建立Java应用程序或者是Applet 所需的应用程序编程接口(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语言的特点有:面向对象、跨平台、安全性、多线程和图形功能强。

2 概要设计2.1开发环境开发平台:Microsoft Windows XP Professional Service Pack 2开发工具:JBuilder 2007 + JDK 1.6.0_022.2画图软件功能功能 1:按着鼠标左键能随心所欲的画出想要的图形功能 2:可自助地选择画笔的粗细功能3:可自助地颜色选择功能4:可以显示你当前的画笔状态2.3界面设计图2.3 画图面板2.4类的框架结构图DrawPane属性package kasa;操作public class DrawPane extends Frameclass ButtonColorAction implements ActionListenerc lass ButtonCursor extends MouseAdapterclass ButtonStrokeAction implements ActionListenerclass Palette extends Panel implements MouseListener, MouseMotionListener图2.43详细设计3.1画图软件使用的Java类的说明类名:DrawPane类作用:主类,继承的父类: Frame类,构造方法DrawPane()实现了放各种组件,界面的构造,构造画图板颜色选择器和画笔的粗细等功能类名:ButtonColorAction 实现的接口:ActionListener作用:选取颜色按钮的监听事件类监听按钮动作类名:ButtonCursor作用:鼠标进入按钮变换光标样式监听事件类继承的类:MouseAdapter 继承了鼠标的适配器类名:ButtonStrokeAction作用:设置画笔的监听事件类实现的接口:ActionListener 作用:选取颜色按钮的监听事件类监听按钮动作类名:Palette 继承的父类:Panel类作用:画板类实现的接口:MouseListener, MouseMotionListener 重写了鼠标监听器的五个方法mouseMoved(MouseEvent 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 GridLayout(1, 13)); // 12 个颜色选择按钮Button[] buttonColor = new Button[12];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, 13)); // 控制画笔样式buttonStrokeAction = new ButtonStrokeAction();Button[] buttonStroke = new Button[11];buttonStroke[0] = new Button("1");buttonStroke[1] = new Button("3");buttonStroke[2] = new Button("5");buttonStroke[3] = new Button("7");buttonStroke[4] = new Button("9");buttonStroke[5] = new Button("11");buttonStroke[6] = new Button("13");buttonStroke[7] = new Button("15");buttonStroke[8] = new Button("17");buttonStroke[9] = new Button("■");buttonStroke[10] = new Button("●");drawWidth = new Label("颜色", Label.CENTER);drawCap = new Label("●", Label.CENTER);drawWidth.setBackground(Color.lightGray);drawCap.setBackground(Color.lightGray);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设计的目录结构●JAVA设计的概要和详细设计●JAVA设计的版权意识●JAVA设计需要编译的环境●JAVA设计的实用性3.2.5程序流程图图3绘制画图软件方法PAD 图4运行结果图4 画图软件结果显示开始 粗细选择 颜色选择 绘图 绘图5测试分析5.1程序运行情况:当运行程序的时候,你可以进入界面,单击你所需要的颜色和画笔的粗细来进行作图。

当你觉得你对你的画不满意的时候,你可以选择白色来清除你的画面。

6 程序清单:package kasa;import java.awt.BasicStroke;import java.awt.BorderLayout;import java.awt.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 bel;import java.awt.Panel;import java.awt.RenderingHints;import java.awt.event.ActionEvent;import java.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版画图小工具 * * * @author kasa * */public class DrawPane extends Frame { // 画板private Palette palette = null; // 显示当前颜色的面板private Panel nonceColor = null; // 画笔粗细private Label drawWidth = null; // 画笔端点的装饰private Label drawCap = null; // 选取颜色按钮的监听事件类private ButtonColorAction buttonColorAction = null;// 鼠标进入按钮后光标样式的监听事件类private 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)); // 12 个颜色选择按钮Button[] buttonColor = new Button[12];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);paneColor.add(nonceColor);buttonColorAction = new ButtonColorAction();buttonCursor = new ButtonCursor();for (int i = 0; i < buttonColor.length; i++) {buttonColor[i] = new Button();buttonColor[i].setBackground(color[i]);buttonColor[i].addActionListener(buttonColorAction);buttonColor[i].addMouseListener(buttonCursor);paneColor.add(buttonColor[i]);}pane.add(paneColor); // 画笔颜色选择器Panel paneStroke = new Panel(new GridLayout(1, 13)); // 控制画笔样式buttonStrokeAction = new ButtonStrokeAction();Button[] buttonStroke = new Button[11];buttonStroke[0] = new Button("1");buttonStroke[1] = new Button("3");buttonStroke[2] = new Button("5");buttonStroke[3] = new Button("7");buttonStroke[4] = new Button("9");buttonStroke[5] = new Button("11");buttonStroke[6] = new Button("13");buttonStroke[7] = new Button("15");buttonStroke[8] = new Button("17");buttonStroke[9] = new Button("■");buttonStroke[10] = new Button("●");drawWidth = new Label("粗细", Label.CENTER);drawCap = 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(buttonStroke[i]);buttonStroke[i].addMouseListener(buttonCursor);buttonStroke[i].addActionListener(buttonStrokeAction);if (i <= 8) {buttonStroke[i].setName("width");} else {buttonStroke[i].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 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 * */class ButtonColorAction implements ActionListener { public 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 {public void mouseEntered(MouseEvent e) {((Button) e.getSource()).setCursor(new Cursor(Cursor.HAND_CURSOR));}public void mouseExited(MouseEvent e) {((Button) e.getSource()).setCursor(newCursor(Cursor.DEFAULT_CURSOR));}}/** * 设置画笔的监听事件类 * @author kasa * */class ButtonStrokeAction implements ActionListener { public 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.setText(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, MouseMotionListener { // 鼠标// 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() {this.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.getGraphics().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.KEY_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);}/** * @return 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());}/** * 设置画笔端点的装饰* @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;}public void mouseClicked(MouseEvent mouseEvent) {}/** * 鼠标按下 */public void mousePressed(MouseEvent mouseEvent) { this.oldMouseX = this.mouseX = mouseEvent.getX();this.oldMouseY = this.mouseY = mouseEvent.getY();repaint();}public void mouseReleased(MouseEvent mouseEvent) {}/** * 鼠标进入棋盘 */public void mouseEntered(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 = this.mouseY;this.mouseX = mouseEvent.getX();this.mouseY = mouseEvent.getY();repaint();}public void mouseMoved(MouseEvent mouseEvent) {}}参考文献Java语言程序设计.清华大学出版社.丁振凡主编设计总结经过一个学期的JAVA学习,对JAVA编程有了一定的认识,在做这个课程设计的时候,刚开始感觉自己无从下手,不知道该怎么开始,很茫然。

相关主题