java2实用教程课程设计-画图板开发.doc_第1页
java2实用教程课程设计-画图板开发.doc_第2页
java2实用教程课程设计-画图板开发.doc_第3页
java2实用教程课程设计-画图板开发.doc_第4页
java2实用教程课程设计-画图板开发.doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

信息科学与工程学院课 程 设 计 任 务 书 题 目: 画图板开发 学 号: 姓 名: 年 级: 专 业: 课 程: java2实用教程 指导教师: 职 称: 完成时间: 2011年12月 课程设计任务书及成绩评定课程设计的任务和具体要求 通过本绘图程序的编写,我们可以看到如何运用自己已经掌握的知识,自己动手来完成一个java绘图程序,通过整个流程的熟悉以及对程序组织结构和框架的理解,也可以极大的促进我们对java程序和面向对象程序设计的认识和掌握。通过本次课程的学习,我们可以更加系统地学习和了解如何从整体上设计和实现一个程序,这对我们今后学习、开发和设计更大更复杂的程序有着很大的帮助。 指导教师签字: 日期: 指导教师评语: 成绩: 指导教师签字: 日期: 课程设计所需软件、硬件等硬件:pc、u盘软件:windows xp java 课程设计进度计划 起至日期2011年11月至2011年12月工作内容1.设计准备阶段2.分析设计阶段3.测试分析设计4.总结报告阶段备注查阅资料,方案论证找出实现方法,按照需求分析、总体设计、详细设计用java做参考文献、资料索引(序号、文献名称、编著者、出版单位)1.java语言程序设计课程实践 陈明. 清华大学出版社.2.java语言最新实用案例教程. 杨树林、胡洁萍 清华大学出版社.3. java2实用教程(第3版) 耿祥义 清华大学出版社目录一:程序设计的目的和意义二:程序设计: (一):程序基本组成框架和结构 (二):画图板相关操作三:系统功能设计分析四:程序结构说明五:程序绘图效果示意图六:程序源代码及其分析说明七总结一 :程序设计的目的和意义用过微软windows操作系统的人一定都对windows自带的画图板非常的熟悉。同图像处理软件界的“大哥大”photoshop比起来,它虽然不及photoshop的功能强大、内容丰富,但是作为windows一直以来都内带的附件程序,它具有小巧玲珑、简单实用等其它绘图软件所不具备的优点。同时它的风格也被许多其它绘图软件所效仿。通过本绘图程序的编写,我们可以看到如何运用自己已经掌握的知识,自己动手来完成一个java绘图程序,通过整个流程的熟悉以及对程序组织结构和框架的理解,也可以极大的促进我们对java程序和面向对象程序设计的认识和掌握。通过本次课程的学习,我们可以更加系统地学习和了解如何从整体上设计和实现一个程序,这对我们今后学习、开发和设计更大更复杂的程序有着很大的帮助。二 :程序设计本程序完成的是一个类似于windows画图板的绘图程序。由于不是开发和设计专业的绘图和图像制作软件,所以,完成的程序的简单功能包括以下几项:1. 新建一个空白图形文件:用于绘制新的图形。2. 打开或保存一个图形文件,便于对图形文件的管理。3. 绘制一些基本的画图组件:直线、矩形、实心矩形、椭圆、实心椭圆、圆、实心圆、圆角矩形、实心圆角矩形等。4. 可以用鼠标在绘图面板上单击拖动进行随笔画。5. 橡皮擦:可以将已绘制好的图形擦掉。6. 添加文字:可以在绘图区域内添加文字。7. 选择文字的字体:通过一个下拉式的选择条,可以选中所需要的字体。本程序中包括:宋体、隶书、华文彩云、仿宋_gb2312、华文行楷、方正舒体、times new roman、serif、monospaced、sonsserif、garamond。当然,在下面的的程序分析中可以看到,由于我们灵活设置了字体数组,是的可以随意添加系统支持的任何字体。大大方便和简化了程序设计。8. 选择文字的字体风格:通过两个复选框按钮,可以选择需要的字体风格,包括:粗体、斜体,使用者有三种选择方式,包括:同时选中两者、只选择其中一种、两者都不选中。9. 设置画笔的颜色:可以选择当前绘制图形的画笔颜色,让图形更加丰富多彩、生动活泼。10. 设置画笔的粗细:该选项在作用于基本图形组件和文字时,它的效果是不一样的。当作用于绘制图形组件时,它的作用是改变画笔绘制线条的粗细;当作用于文字时,它的作用是改变文字的大小。由此可以看到,虽然我们的画图板程序不及那些专业的绘图程序,但是,“麻雀虽小,五脏俱全”,它已经具备了一个绘图软件所应该有的基本功能和操作。通过对本程序的分析,我们可以更加系统地学习和了解如何从整体上设计和实现一个程序。(一):程序基本组成框架和结构1. 一组基本图形按钮,包括:pencil(随笔画)、line(直线)、rect(矩形)、frect(实心矩形)、oval(椭圆)、foval(实心椭圆)、circle(圆)、fcircle(实心圆)、roundrect(圆角矩形)、frrect(实心圆角矩形)、rubber(橡皮擦)、word(文字)。这些基本图形都继承于同一个父类:drawings。drawings 具有变量(属性):int x1,x2,y1,y2; /用来存放相应图形元素的坐标int r,g,b; /用来存放图形色彩颜色信息float stroke; /用来存放画笔粗细int type; /用来保存图形类型string s1; /用来保存输入文字字符串string s2; /用来保存字体类型字符串同时,drawing还具有方法:void draw ( graphics2d g2d ) ;draw()方法中用到了java绘图里面的graphics2d类,所有继承drawings类的图形子类都重写了此方法。这就是java程序中类的继承的概念。它对于程序代码的重用是很重要的,将极大的方便和简略程序代码。2. 此外,程序中还包括一下三个基本操作按钮: 新建(new):新建一个图形文件。 打开(open):打开一个图形文件。 保存(save):保存当前图形文件。3. 选择颜色和设置当前画笔粗细的按钮分别为:颜色(color)、线条粗细(stroke)。4. 选择当前字体风格的选择框为:粗体(bold)、斜体(italic),用以设置当前字体的风格。5. 选择当前字体的下拉式复选框为:styles。6. 菜单条及其组成: 文件(file)菜单项,包括:new(新建一个图形文件)、load(打开一个图形文件)、save(保存当前图形文件)、exit(退出程序)。 颜色(color)菜单项:用来设置当前颜色。 线条粗细(stroke)菜单项:用来设置当前画笔粗细。 帮助(help)菜单项:有关的程序帮助提示。(二):画图板相关操作1. 新建一个图形文件单击工具栏上的图标,或选择filenew菜单,则清除当前所绘制的图像,回到初始画面。2. 打开已有的文件单击工具栏上的图标,或选择fileload菜单,则清除当前所绘制的图像,并弹出打开文件对话框要求选择要打开的文件。如下图:3. 保存单击工具栏上的图标,或选择filesave菜单,则弹出要求保存文件对话框。如下图:4. 绘制基本图形基本图形包括以下几种:pencil:随笔画,图标为:。line:直线,图标为:。rect:矩形,图标为:。frect:实心矩形,图标为:。oval:椭圆,图标为:。foval:实心椭圆,图标为:。circle:圆,图标为:。fcircle:实心圆,图标为:。roundrect:圆角矩形,图标为:。frrect:实心圆角矩形,图标为:。rubber:橡皮擦,图标为:。绘图时,单击工具栏上相应图形的图标,然后用鼠标拖动,在绘图区域内进行绘图即可。5. 设置画笔大小单击工具栏上的图标,或单击strokeset stroke菜单,则弹出相应的设置当前画笔粗细对话框。如下图:6. 选择颜色单击工具栏区域,或单击colorchoose color菜单,则弹出相应的选择当前画图颜色对话框。如下图:7. 选择字体风格在工具栏区域 ,可以选择相应的字体风格,有粗体、斜体和粗斜体三种可供选择。8. 选择字体在工具栏区域,可以选择字体,本程序中有如下几种字体可供选择:宋体、隶书、华文彩云、仿宋_gb2312、华文行楷、方正舒体、time new roman、serif、monospaced、sonsserif、garamond。三 :系统功能设计分析画板主要由以下几个部分组成:主窗体的设计。主类(qingdrawpad)用来生成主界面,完成画图板的主要框架。主类由jframe派生出来。主界面由菜单栏、工具栏和画图区域三部分组成,布局格式采用borderlayout布局形式。1.菜单栏和工具栏的设计。菜单栏包括文件菜单栏、颜色菜单栏、线条粗细菜单栏和提示菜单栏。其中文件菜单栏包括文件的新建、打开、保存等选项;颜色菜单栏可以进行颜色选择;线条粗细菜单栏设置线条的粗细;提示菜单栏给出提示信息。工具栏由新建、打开和保存文件按钮、基本图形的按钮、选择字体风格复选框和字体下拉列表框组成。在主类中添加并对菜单栏和工具栏添加事件监听。一.事件响应的处理。对菜单栏、工具栏和用鼠标画图的事件响应进行处理。1.菜单栏中文件的新建、打开和保存菜单事件的处理:java把每个文件都视作顺序字节流。如果要在java中进行文件处理,则必须用到java.io包。这个包定义了一些流类,选用fileinputstream(从文件中读入数据)和fileoutputstream(向文件输出数据),通过建立这些文件的对象便可以打开文件。这些流相应地从inputstream和outputstream派生,这些文件均使用文件流,所以必须将文件结构化以适应程序的要求。我们需要对保存的对象序列化,然后以输出流的方式保存。在程序中用newfile()、loadfile()和savefile()三个函数分别实现文件的新建、打开和保存。2.工具栏事件的处理:主要有一些button组成。我们用buttonhandler内部类处理基本单元事件,buttonhandler1内部类处理新建、打开和保存文件按钮,在画图类drawpanel中定义createnewitem()函数处理工具栏中的画图事件。3.鼠标画图:由于画图板主要是用来画图,所以需要在程序中添加对鼠标按下、拖动、进入、退出、移动和单机事件进行监听并进行处理。内部类mousea定义了完成鼠标按下、松开、进入、退出事件响应。内部类mouseb完成鼠标拖动和移动事件响应。二.画图的基本功能。在程序设计中用到了动态绑定,我们可以提取他们的公共属性,先建立一个父类,然后建立各个子类,继承父类中的方法并将父类中的draw函数重写。一些关于图形形状的类,最主要是用于画图、字体和橡皮擦等基本类型。如circle、triangle、rectangle,它们都是有超类(object类)派生的。在面向对象编程中,每个类都有画出自己的能力,每个类都有自己的draw函数,但每种形状的draw函数都不一样,但在绘制任何形状时,只需简单调用父类drawing的draw方法,然后让程序动态地根据对象的类型决定使用哪个子类的draw方法。为了使画出的图形更加美观,我们在draw函数中使用了graphics2d的对象的引用。这样可以在不改变原程序的情况下,添加扩展的图形,是程序变得更加强大。同时,为了文件的保存,父类实现serialize接口,将对象线性化。四 :程序结构说明本程序主体为一个文件:qingdrawpad.java。其中包括的程序段有: qingdrawpad():构造函数,用以初始化。 choosecolor():选择当前绘图颜色程序段。 setstroke():设置当前画笔粗细程序段。 loadfile():调用图形文件程序段。 newfile():新建一个图形文件程序段。 savefile():保存当前所绘制图形程序段。 creatnewitem():新建一个基本图形单元程序段。相应的内部类有: buttonhandler:用来处理基本图形单元的按钮事件。 buttonhandler1:用来处理new、open、save三个操作按钮的按钮事件。 drawpanel:用来创建绘图区域的子类。 mousea:继承了mouseadapter,用来完成鼠标相应事件的操作,如单击、松开、进入和离开等。 mouseb:继承了mousemotionadapter,用来完成鼠标拖动和鼠标移动的相应事件操作。此外,还继承了父类drawings的基本图形子类,如前所述,这里不再重复。五 :程序绘图效果示意图我们可以看到,整个程序界面很简洁,而且界面操作、提示内容全部是中文,一目了然。在左上方的菜单栏里有文件、颜色、线条粗细、帮助4个下拉式菜单,可以对绘图文件进行相应的操作。下面一排是工具栏的工具按钮,从左到右依次为:新建文件、打开文件、保存文件、随笔画、直线、空心矩形、实心矩形、空心椭圆、空心圆、实心圆、空心圆角矩形、实心圆角矩形、橡皮擦、颜色选择按钮、线条粗细设置按钮、文字添加按钮、粗体字体选择框、斜体字体选择框、字体选择下拉式选择框。整个工具栏是可以拖动的,可以将它拖动到程序窗口的任意位置。工具栏下面的整个白色区域就是绘图区域,即绘图面板,它的大小可以随着窗口的大小自动调整。在窗口的最底部是程序设计作者标注,以及鼠标状态提示条,可以显示当前的鼠标状态,包括进出窗口、移动、单击、松开等。如图所示 六 :程序源代码及其分析说明*/package drawingpanelimport java.awt.*;import java.awt.geom.*;import java.awt.event.*;import javax.swing.*;import java.io.*;import java.util.*;public class qingdrawpad extends jframe /主类,扩展了jframe类,用来生成主界面 private objectinputstream input; private objectoutputstream output; /定义输入输出流,用来调用和保存图像文件 private jbutton choices; /按钮数组,存放以下名称的功能按钮 private string names = new, open, save, /这三个是基本操作按钮,包括新建、打开、保存 /*下面是我们的画图板上面有的基本的几个绘图单元按钮*/ pencil, line, rect, frect, oval, foval, circle, fcircle, roundrect, frrect, rubber, color, stroke, word ; private string stylenames= 宋体 , 隶书 , 华文彩云 , 仿宋_gb2312 , 华文行楷 , 方正舒体 , times new roman , serif , monospaced , sonsserif , garamond ; private icon items; private string tiptext= /这里是鼠标移动到相应按钮上面上停留时给出的提示说明条 新建一个文件, 打开一个文件, 保存当前文件, 绘制线条, 绘制直线, 绘制空心矩形, 绘制实心矩形, 绘制空心椭圆, 绘制实心椭圆, 绘制空心圆形, 绘制实心圆形, 绘制空心圆角矩形, 绘制实心圆角矩形, 橡皮擦, 选择颜色, 设置线条粗细, 输入文字 ; jtoolbar buttonpanel ; /定义按钮面板 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; /用来存放当前字体风格 string style1; /用来存放当前字体 private float stroke=1.0f; /设置画笔粗细,默认值为1.0f jcheckbox bold,italic; /bold为粗体,italic为斜体,二者可以同时使用 jcombobox styles; public qingdrawpad() super(卿乐绘图画板(中国风); jmenubar bar=new jmenubar();/定义菜单条 jmenu filemenu=new jmenu(文件); /filemenu.setmnemonic(f);/新建文件菜单条 jmenuitem newitem=new jmenuitem(新建); newitem.addactionlistener( new actionlistener() public void actionperformed(actionevent e) newfile();/如果被触发,则调用新建文件函数段 ); filemenu.add(newitem);/保存文件菜单项 jmenuitem saveitem=new jmenuitem(保存); saveitem.addactionlistener( new actionlistener() public void actionperformed(actionevent e) savefile();/如果被触发,则调用保存文件函数段 ); filemenu.add(saveitem);/打开文件菜单项 jmenuitem loaditem=new jmenuitem(打开); loaditem.addactionlistener( new actionlistener() public void actionperformed(actionevent e) loadfile();/如果被触发,则调用打开文件函数段 ); filemenu.add(loaditem); filemenu.addseparator();/退出菜单项 jmenuitem exititem=new jmenuitem(退出); exititem.addactionlistener( new actionlistener() public void actionperformed(actionevent e) system.exit(0);/如果被触发,则退出画图板程序 ); filemenu.add(exititem); bar.add(filemenu);/设置颜色菜单条 jmenu colormenu=new jmenu(颜色);/选择颜色菜单项 jmenuitem coloritem=new jmenuitem(选择颜色); coloritem.addactionlistener( new actionlistener() public void actionperformed(actionevent e) choosecolor();/如果被触发,则调用选择颜色函数段 ); colormenu.add(coloritem); bar.add(colormenu);/设置线条粗细菜单条 jmenu strokemenu=new jmenu(线条粗细);/设置线条粗细菜单项 jmenuitem strokeitem=new jmenuitem(设置线条粗细); strokeitem.addactionlistener( new actionlistener() public void actionperformed(actionevent e) setstroke(); ); strokemenu.add(strokeitem); bar.add(strokemenu);/设置提示菜单条 jmenu helpmenu=new jmenu(帮助);/设置提示菜单项 jmenuitem aboutitem=new jmenuitem(关于画板); aboutitem.addactionlistener( new actionlistener() public void actionperformed(actionevent e) joptionpane.showmessagedialog(null, “this is a mini drawing padncopyright (c) 2011 zaozhuang university”, 画图板说明 , joptionpane.information_message ); ); helpmenu.add(aboutitem); bar.add(helpmenu); items=new imageiconnames.length;/创建各种基本图形的按钮 drawingarea=new drawpanel(); choices=new jbuttonnames.length; buttonpanel = new jtoolbar( jtoolbar.vertical ) ; buttonpanel = new jtoolbar( jtoolbar.horizontal) ; buttonhandler handler=new buttonhandler(); buttonhandler1 handler1=new buttonhandler1();/导入我们需要的图形图标,这些图标都存放在与源文件相同的目录下面 for(int i=0;ichoices.length;i+) itemsi=new imageicon(namesi + .gif); choicesi=new jbutton(,itemsi); choicesi.settooltiptext(tiptexti); buttonpanel.add(choicesi); /将动作侦听器加入按钮里面 for(int i=3;ichoices.length-3;i+) choicesi.addactionlistener(handler); choices0.addactionlistener( new actionlistener() 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-3.addactionlistener(handler1); choiceschoices.length-2.addactionlistener(handler1); choiceschoices.length-1.addactionlistener(handler1);/字体风格选择 styles=new jcombobox(stylenames); styles.setmaximumrowcount(8); styles.additemlistener( new itemlistener() public void itemstatechanged(itemevent e) style1=stylenamesstyles.getselectedindex(); );/字体选择 bold=new jcheckbox(粗体); italic=new jcheckbox(斜体); checkboxhandler chandler=new checkboxhandler(); bold.additemlistener(chandler); italic.additemlistener(chandler); jpanel wordpanel=new jpanel(); buttonpanel.add(bold); buttonpanel.add(italic); buttonpanel.add(styles); styles.setminimumsize( new dimension ( 50, 20 ) ); styles.setmaximumsize(new dimension ( 100, 20 ) ); container c=getcontentpane(); super.setjmenubar( bar ); c.add(buttonpanel,borderlayout.north); c.add(drawingarea,borderlayout.center); statusbar=new jlabel(); c.add(statusbar,borderlayout.south); statusbar.settext( 欢迎使用卿乐绘图画板o(_)o ); createnewitem(); setsize(width,height); show(); /按钮侦听器buttonhanler类,内部类,用来侦听基本按钮的操作public class buttonhandler implements actionlistener public void actionperformed(actionevent e) for(int j=3;jchoices.length-3;j+) if(e.getsource()=choicesj) currentchoice=j; createnewitem(); repaint(); /按钮侦听器buttonhanler1类,用来侦听颜色选择、画笔粗细设置、文字输入按钮的操作public class buttonhandler1 implements actionlistener public void actionperformed(actionevent e) 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=14; createnewitem(); repaint(); /鼠标事件mousea类,继承了mouseadapter,用来完成鼠标相应事件操作 class mousea extends mouseadapter public 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=13) itemlistindex.x1=itemlistindex.x2=e.getx(); itemlistindex.y1=itemlistindex.y2=e.gety(); index+; createnewitem(); /如果当前选择的图形式文字输入,则进行下面操作 if(currentchoice=14) itemlistindex.x1=e.getx(); itemlistindex.y1=e.gety(); string input; input=joptionpane.showinputdialog( 请输入你想要输入的文本); itemlistindex.s1=input; itemlistindex.x2=f1; itemlistindex.y2=f2; itemlistindex.s2=style1; index+; currentchoice=14; createnewitem(); drawingarea.repaint(); public void mousereleased(mouseevent e) statusbar.settext(鼠标松开位置: + e.getx() + , + e.gety() + ); if(currentchoice=3|currentchoice=13) itemlistindex.x1=e.getx(); itemlistindex.y1=e.gety(); itemlistindex.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 mouseb extends mousemotionadapter public void mousedragged(mouseevent e) statusbar.settext(鼠标拖动位置: + e.getx() + , + e.gety() + ); if(currentchoice=3|currentchoice=13) itemlistindex-1.x1=itemlistindex.x2=itemlistindex.x1=e.getx(); itemlistindex-1.y1=itemlistindex.y2=itemlistindex.y1=e.gety(); index+; createnewitem(); else itemlistindex.x2=e.getx(); itemlistindex.y2=e.gety(); repaint(); public void mousemoved(mouseevent e) statusbar.settext(鼠标移动位置: +

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论