《Java画图板课程设计报告(共32页).doc》由会员分享,可在线阅读,更多相关《Java画图板课程设计报告(共32页).doc(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上华 北 科 技 学 院课程设计说明书班级: 计算B092 学号: 7 姓名: 李 宁 设计题目: 画图板软件开发和设计 设计时间: 2012.12.26 至 2012.12.30 指导教师: 杨 阳 评 语: _评阅成绩: 评阅教师: 目录专心-专注-专业1 引 言1.1课程设计选题画图板软件开发和设计1.2课程设计的目的巩固和加深以Java 语言为基础的面向对象编程技术理论知识的理解,提高实际动手编程能力的培养,掌握以Java为核心的应用软件开发方案,达到能独立阅读、编制和调试一定规模的Java程序的水平。1.3本选题的设计背景日常生活、学习中我们经常需要画图,简单
2、的画图我们可以手工画图,但往往还是不能满足需求。因此,借助计算机准确而快速的画图就十分有必要了。好的画图工具能够很好的完成日常生活中的各种画图工作。学习了Java语言后设计开发一个画图软件是对Java语言学习的巩固以及提高。能够在实践中更深的理解面向对象语言,同时提高了解决问题的能力。2 需求分析 2.1 功能需求考虑到画图板的实际需要,画图板要实现打开、保存图片,用于打开本地图片或保存当前图片至本地;选择需要绘制的图形,用于选择需要绘制的图形样式,如直线、矩形、椭圆等;设置背景色、画笔色以及画笔大小,用于设置画板背景颜色、画笔颜色和当前画笔粗细;擦除错误操作;显示帮助信息等。2.2 软件开发
3、运行环境本软件开发平台: Java SE本软件集成开发环境: MyEclipse9.1本软件运行环境: Windows xp 或以上版本3 总体设计3.1 软件结构设计3.1.1 结构设计 菜单栏的设计及功能实现:菜单栏主要包括文件、编辑、设置、帮助等常见菜单。其中文件菜单有新建、打开、保存、另存为、退出等功能;编辑菜单有撤销、恢复等功能;设置菜单含有对画笔颜色、画笔大小等的设置功能;帮助菜单提供画图板的帮助信息。 画图区的设计:对图片的编辑处理区。 工具栏的设计:根据实际需要选择不同的工具完成画图操作。 其他功能设计。3.2软件功能模块及主要类设计3.2.1功能描述本软件可以绘制日常生活、学
4、习中的一般图形。软件主要有菜单栏、工具栏、画图区组成,菜单栏具有新建、打开、保存等常见的功能;工具栏可以选择用户需要的图形样式、设置参数、插入文本等操作;画图区就是简单绘图区域,用户在画图区可自由绘制图形。右击工具栏可设置工具是否可拖动。还可以根据不同的需要设置背景色,画笔大小、画笔颜色。能够在任意点添加文字并设置文字样式和字体。3.2.2总体结构图菜单栏工具栏状态栏文件编辑设置帮助画图区文件操作形状选择设置鼠标状态新建打开保存自由直线矩形圆立方体背景色画笔大小文字样式画笔色图 3.2.1 画图板总体结构图3.2.3主要类设计(1) Paint类 Paint类为主类,定义main方法;(2)
5、MyPaint类 MyPaint类继承JFrame类,用于实现画图板的总体构架。包括菜单栏设计、工具栏设计、画图区创建、鼠标事件等等。画图板的基本功能都靠MyPaint类来实现。(3) DrawPanel类 DrawPanel来是MyPaint类的内部类,是用来画图的。(4) drawings类 drawings类是画图类,基本图形的单元。其各个子类用以实现画各种图形包括以下几个子类:1Line类:绘制直线;2 Rect类:绘制矩形;3fillRect:绘制实心矩形;4Oval类:绘制椭圆;5fillOval类:绘制实心椭圆;6Circle类:绘制圆;7fillCircle类:绘制实心圆;8R
6、oundRect:绘制圆角矩形;9fillRoundRect类:绘制实心圆角矩形;10Pencil类:自由笔;11 Rect3D 类:绘制3D矩形;12fillRect3D类:绘制实现3D矩形;13Cube类:绘制立方体;14Rubber类:橡皮类;15 Word类:文本类;4 详细设计与实现4.1 主界面4.1.1主界面功能设计画图板的主界面分为菜单栏、工具栏、画图区、状态栏四部分。其中,菜单栏实现了图片的打开、新建、保存等操作;工具栏实现了画笔的各种操作;画图区实现了图片的操作面板;状态栏实现了显示鼠标当前状态。4.1.2主界面设计画图板的主界面如图所示,在主类中加载了系统风格,使其界面更
7、为美观;为工具栏和工具栏按钮添加了颜色,使画图板颜色不单调;为画图板得主窗口设置图标,使画图板更有个性。在实现画图功能的基础上使其外观更为人性化。图 4.1.1 主界面图4.1.3主界面主要代码 设置窗体图标:Toolkit kit=Toolkit.getDefaultToolkit();/获取Toolkit实例Image image=kit.getImage(Icons/Title.jpg);/获取图片setIconImage(image); /设置窗体图标 加载系统风格:try UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelC
8、lassName(); /加载系统界面风格 catch (Exception e) 设置鼠标样式:setCursor(new Cursor(Cursor.HAND_CURSOR);/设置画图板鼠标样式 背景色:setBackground(new Color(0,255,0);4.2 菜单栏4.2.1菜单栏功能设计菜单栏包括文件、编辑、设置、帮助四部分。其中,文件菜单实现了新建、打开、保存、退出功能;编辑菜单实现了撤销和恢复功能;设置菜单实现了画笔颜色、画笔大小和立方体宽度的设置;帮助菜单实现了关于画图板的帮助信息;4.2.2菜单栏界面设计1.文件菜单:图 4.2.1 文件菜单2.编辑菜单:图
9、4.2.3 编辑菜单3.设置菜单:图 4.2.3 设置菜单4.帮助菜单:图 4.2.4 帮助菜单5.打开文件窗口:图 4.2.5 打开窗口6.撤销菜单(此功能尚不完善):图 4.2.6 撤销操作7.画笔颜色选择:图 4.2.7 画笔颜色选择8.画笔大小设置:图 4.2.8 设置画笔大小9.立方体宽度设置:图4.2.8 设置立方体宽度10.“关于画图板”帮助:图4.2.10 关于画图板11.“关于作者”帮助图4.2.11关于作者4.2.3菜单栏主要代码菜单栏代码较多,详细代码见附录。4.3 工具栏4.3.1工具栏功能设计工具栏是一系列快捷操作的按钮,分别是:新建、打开、保存、自由画笔、直线、空心
10、矩形、实心矩形、空心椭圆、实心椭圆、圆、实心圆、空心圆角矩形、实心圆角矩形、3D矩形、3D矩形、3D长方体、橡皮、设置背景色、画笔颜色、画笔粗细、添加文字,用来实现相应的功能。另外还为工具栏设置了按钮图片和鼠标右击事件,右击鼠标可以设置工具栏是否可拖动。4.3.2工具栏界面设计图4.3.1 工具栏界面4.3.3工具栏主要代码 工具栏按钮图标:items=new ImageIconnames.length;/创建各种基本图形的按钮 choices=new JButtonnames.length;buttonPanel = new JToolBar( JToolBar.VERTICAL);butt
11、onPanel = new JToolBar( JToolBar.HORIZONTAL);ButtonHandler handler=new ButtonHandler();ButtonHandler1 handler1=new ButtonHandler1();buttonPanel.setBackground(new Color(0,255,0);/工具栏背景色设置/导入图形图标,图标存放在项目文件夹下的Icons目录内 for(int i=0;ichoices.length;i+)itemsi=new ImageIcon(Icons/+namesi+.gif);choicesi=new
12、JButton(itemsi);choicesi.setToolTipText(tipTexti);choicesi.setBackground(new Color(0,255,0);/按钮背景色设置buttonPanel.add(choicesi); 鼠标右击事件:/ 工具栏右击菜单,设置工具栏是否可拖动void ToolMenu() final JPopupMenu ToolMenu;ToolMenu = new JPopupMenu();final JCheckBox move = new JCheckBox(工具栏是否可拖动);move.setBackground(new Color(
13、0, 255, 0);ToolMenu.add(move);buttonPanel.addMouseListener(new MouseAdapter() public void mousePressed(MouseEvent e) if (e.getModifiers() = InputEvent.BUTTON3_MASK)ToolMenu.show(buttonPanel, e.getX(), e.getY(););move.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) i
14、f (move.isSelected() buttonPanel.setFloatable(true); else buttonPanel.setFloatable(false););4.4 画图区4.4.1画图区功能设计画图区可以绘制各种图形,可以进行擦除操作,还可以根据实际需要添加文本。4.4.2画图区界面设计图4.4.1 画图界面4.4.3画图区主要代码详细代码见附录。4.5 状态栏4.5.1状态栏功能设计状态栏是显示鼠标的状态的信息栏,随时反馈鼠标信息。4.5.2状态栏设计 图4.5.1 状态栏显示4.5.3状态栏代码部分代码如下,详细代码见附录:public void mouseRe
15、leased(MouseEvent e)statusBar.setText(鼠标松开:+e.getX()+,+e.getY()+);if(currentChoice=3|currentChoice=16)itemListindex.x1=e.getX();itemListindex.y1=e.getY(); itemListindex.x2=e.getX();itemListindex.y2=e.getY();repaint();index+;createNewItem();5 小结和展望一周的时间很快,作为Java初学者的我在一周的时间内完成画图板软件的开发、设计不免有很多漏洞。但是重要的不
16、是结果,而是从中学到了什么!从写字板到画图板,相同的地方不少,但不同的地方更多。写字板是文本处理,从文本区定义到读写文件都相对容易些。而画图板就不同了,画图面板要自己定义,还要设置各种参数。一开始就觉得挺难入手,但是作为Java语言的入门级开发产品,不管多少困难也要坚持到最后。通过查阅书籍、上网搜索资料以及同学间的交流,最终还是比较成功的完成了画图板软件的设计。 画图板软件的开发,使我收获了更多的知识。而这些知识是实践中才能学得到的。想起一句话:纸上得来终觉浅,绝知此事要躬行。没错,学习不仅仅是大脑的思考,更要有实践的配合。现在觉得自己掌握的Java知识比课堂上学到的多很多,同时对其他编程语言
17、的学习也有了一定的帮助。软件设计向来不是一路顺风的,在开发过程中总会突发奇想的实现某些其他功能,但总是失败,比如像文本处理的撤销与恢复操作,觉得这个功能很有必要,但是没有实现。如果画错了就只能重画了,因此解决这一问题意义很大,期待以后能够解决这一问题。参 考 文 献1 耿祥义, 张跃平. Java大学实用教程 M. 北京:电子工业出版社, 2011.2 陈嵩 等. 新手学Java M. 北京:北京希望电子出版社, 2010.附 录使用说明书本软件由MyEclipse9.1开发,运行文件后直接进入窗口。菜单栏有新建、打开、保存、另存为、退出功能。可用键盘快捷键实现相应功能。打开文件只可打开本软件
18、生成的图片文件,再次提示用户注意。编辑菜单尚不完善,后续版本将会解决,望用户包涵。设置菜单可设置画笔颜色、画笔大小和立方体宽度,如有需要可在此进行设置。帮助菜单显示本软件信息与作者信息,如有需要,请您按照相关联系方式进行联系。由于作者水平有限,本软件不免有很多错误的地方,欢迎广大用户提出意见!源程序清单Paint.java:import java.awt.*;import java.awt.event.*;import java.io.*;import javax.swing.*;import javax.swing.event.UndoableEditEvent;import javax.s
19、wing.undo.*;public class Paintpublic static void main(String args)try UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName(); /加载系统界面风格 catch (Exception e) new MyPaint();class MyPaint extends JFrameJMenuBar jmenuBar;private ObjectInputStream input;private ObjectOutputStream output; /定义输入
20、输出流,用来调用和保存图像文件private JButton choices; /按钮数组private String names=New,/新建Open,/打开Save,/保存Pencil,/自由画笔Line,/直线Rect,/空心矩形fRect,/实心矩形Oval,/空心椭圆fOval,/实心椭圆Circle,/圆形fCircle,/实心圆形RoundRect,/圆角矩形frRect,/实心圆角矩形3DRect,/3D矩形f3DRect,/实心3D矩形Cube,/立方体Rubber,/橡皮擦bgColor,/背景色 Color,/画笔颜色Stroke,/画笔大小Word/文本输入;Grap
21、hicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();String styleNames = ge.getAvailableFontFamilyNames(); /加载系统字体private Icon items;private String tipText=新建,打开,保存,自由画笔,直线,空心矩形,实心矩形,空心椭圆,实心椭圆,圆,实心圆,空心圆角矩形,实心圆角矩形,3D矩形,3D矩形,3D长方体,橡皮,设置背景色,画笔颜色,画笔粗细,添加文字;/按钮提示说明JToolBar buttonPanel ;
22、/定义按钮面板private JLabel statusBar;/显示鼠标状态的提示条 private DrawPanel drawingArea;/定义画图区域 private int width=850,height=550;/画图区域初始大小 drawings itemList=new drawings5000;/用来存放基本图形的数组 private int currentChoice=3;/设置初始画笔为自由笔画 int index=0;/已绘制图形数目 private Color color=Color.black;/画笔颜色 int R,G,B;/颜色值 int f1,f2;/存
23、放当前字体风格 String style1;/存放当前字体private float stroke=1.0f;/设置画笔粗细static int thickness=10;/立方体宽度JCheckBox bold,italic;/定义字体风格选择框MyUndoManager myUndo;JComboBox styles;/字体选择框Toolkit kit=Toolkit.getDefaultToolkit();/获取Toolkit实例Image image=kit.getImage(Icons/Title.jpg);/获取图片public MyPaint()setTitle(画图板 1.0开
24、发者预览版);setLocation(200,100);/画图板窗口起始位置setSize(850,550);/画图板大小setVisible(true);setIconImage(image); /设置窗体图标setCursor(new Cursor(Cursor.HAND_CURSOR);/设置画图板鼠标样式drawingArea=new DrawPanel(); setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);addWindowListener(new WindowAdapter() public void windowClosi
25、ng(WindowEvent e) if (JOptionPane.showConfirmDialog(new Frame(),你确定退出吗?,退出提示,JOptionPane.WARNING_MESSAGE) = JOptionPane.OK_OPTION)System.exit(0););/关闭确认提示getJMenuBar(); /获取菜单栏myUndo = new MyUndoManager();items=new ImageIconnames.length;/创建各种基本图形的按钮 choices=new JButtonnames.length;buttonPanel = new J
26、ToolBar( JToolBar.VERTICAL);buttonPanel = new JToolBar( JToolBar.HORIZONTAL);ButtonHandler handler=new ButtonHandler();ButtonHandler1 handler1=new ButtonHandler1();buttonPanel.setBackground(new Color(0,255,0);/工具栏背景色设置/导入图形图标,图标存放在项目文件夹下的Icons目录内 for(int i=0;ichoices.length;i+)itemsi=new ImageIcon(I
27、cons/+namesi+.gif);choicesi=new JButton(itemsi);choicesi.setToolTipText(tipTexti);choicesi.setBackground(new Color(0,255,0);/按钮背景色设置buttonPanel.add(choicesi);ToolMenu(); /工具栏右击事件调用/将动作侦听器加入按钮里面for(int i=3;ichoices.length-4;i+)choicesi.addActionListener(handler);choices0.addActionListener(new ActionL
28、istener()public void actionPerformed(ActionEvent e)newFile(););choices1.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)loadFile(););choices2.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)saveFile();); choiceschoices.length-4.addActio
29、nListener(handler1);choiceschoices.length-3.addActionListener(handler1); choiceschoices.length-2.addActionListener(handler1);choiceschoices.length-1.addActionListener(handler1);/字体风格选择styles=new JComboBox(styleNames);styles.setMaximumRowCount(10);styles.addItemListener(new ItemListener()public void
30、itemStateChanged(ItemEvent e)style1=styleNamesstyles.getSelectedIndex(););/字体选择bold=new JCheckBox(加粗);italic=new JCheckBox(倾斜);checkBoxHandler cHandler=new checkBoxHandler();bold.addItemListener(cHandler);italic.addItemListener(cHandler);bold.setBackground(new Color(0,255,0);italic.setBackground(new
31、 Color(0,255,0);buttonPanel.add(bold);buttonPanel.add(italic);buttonPanel.addSeparator();buttonPanel.add(new JLabel(字体:);buttonPanel.add(styles);buttonPanel.setFloatable(false);styles.setMinimumSize(new Dimension(100,20);/字体选框大小设置styles.setMaximumSize(new Dimension(120,20);Container c=getContentPane
32、();c.add(buttonPanel,BorderLayout.NORTH);c.add(drawingArea,BorderLayout.CENTER);statusBar=new JLabel();c.add(statusBar,BorderLayout.SOUTH);createNewItem();setSize(width,height);show();/按钮侦听器ButtonHanler类,内部类,用来侦听基本按钮的操作public class ButtonHandler implements ActionListenerpublic void actionPerformed(A
33、ctionEvent e)for(int j=3;jchoices.length-4;j+)if(e.getSource()=choicesj)currentChoice=j;createNewItem();repaint();/按钮侦听器ButtonHanler1类,用来侦听颜色选择、画笔粗细设置、文字输入按钮的操作public class ButtonHandler1 implements ActionListenerpublic void actionPerformed(ActionEvent e)if(e.getSource()=choiceschoices.length-4)Setb
34、gColor();if(e.getSource()=choiceschoices.length-3)chooseColor();if(e.getSource()=choiceschoices.length-2)setStroke();if(e.getSource()=choiceschoices.length-1)JOptionPane.showMessageDialog(null,在鼠标点击处添加文本,添加文本,JOptionPane.INFORMATION_MESSAGE );currentChoice=17;createNewItem();repaint();/鼠标事件mouseA类,继
35、承了MouseAdapter,用来完成鼠标相应事件操作class mouseA extends MouseAdapterpublic void mousePressed(MouseEvent e)statusBar.setText(鼠标点击:+e.getX()+,+e.getY()+);/设置状态提示itemListindex.x1=itemListindex.x2=e.getX();itemListindex.y1=itemListindex.y2=e.getY();/如果当前选择的图形是随笔画或者橡皮擦,则进行下面的操作 if(currentChoice=3|currentChoice=1
36、6)itemListindex.x1=itemListindex.x2=e.getX();itemListindex.y1=itemListindex.y2=e.getY();index+;createNewItem();/如果当前选择的图形式文字输入,则进行下面操作if(currentChoice=17)itemListindex.x1=e.getX();itemListindex.y1=e.getY();String input;input=JOptionPane.showInputDialog(输入要添加的文本内容);itemListindex.s1=input;itemListinde
37、x.x2=f1;itemListindex.y2=f2;itemListindex.s2=style1;index+;currentChoice=17;createNewItem();drawingArea.repaint();public void mouseReleased(MouseEvent e)statusBar.setText(鼠标松开:+e.getX()+,+e.getY()+);if(currentChoice=3|currentChoice=16)itemListindex.x1=e.getX();itemListindex.y1=e.getY(); itemListinde
38、x.x2=e.getX();itemListindex.y2=e.getY();repaint();index+;createNewItem();public void mouseEntered(MouseEvent e)statusBar.setText(鼠标进入:+e.getX()+,+e.getY()+);public void mouseExited(MouseEvent e)statusBar.setText(鼠标移出:+e.getX()+,+e.getY()+);/鼠标事件mouseB类继承了MouseMotionAdapter,用来完成鼠标拖动和鼠标移动时的相应操作class m
39、ouseB extends MouseMotionAdapterpublic void mouseDragged(MouseEvent e)statusBar.setText(画图:+e.getX()+,+e.getY()+);if(currentChoice=3|currentChoice=16)itemListindex-1.x1=itemListindex.x2=itemListindex.x1=e.getX();itemListindex-1.y1=itemListindex.y2=itemListindex.y1=e.getY();index+;createNewItem();elseitemListindex.x2=e.getX();itemListindex.y2=e.getY();repaint();public void mouseMoved(MouseEvent e)statusBar.setText(鼠标位置:+e.getX()+,+e.getY()+);