Java面向对象课程设计报告画图板.docx
- 文档编号:588337
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:47
- 大小:1.03MB
Java面向对象课程设计报告画图板.docx
《Java面向对象课程设计报告画图板.docx》由会员分享,可在线阅读,更多相关《Java面向对象课程设计报告画图板.docx(47页珍藏版)》请在冰点文库上搜索。
Java面向对象课程设计报告画图板
《面向对象程序设计课程设计》指导书
课程设计名称:
面向对象程序设计课程设计 指导老师:
牛志毅
课程设计周(时)数:
2周
指导方式:
集体辅导与个别辅导相结合
课程设计适用专业:
信息与计算机科学
课程设计教材及主要参考资料:
《Java程序设计与案例》刘宝林主编,高等教育出版社
服务课程名称:
面向对象程序设计
一、课程设计教学目的及基本要求
通过本课程设计,使学生了解面向对象程序的开发思想、方法和步骤,掌握开发工具的使用,提高综合运用所学的理论知识和方法独立分析和解决问题的能力,进一步提高其开发应用程序的能力。
要求明确本次课程设计所要用到的技术点并到网上搜索以及查阅相关的书籍来搜集资料。
通过编写一个基于JAVA的应用系统综合实例,来掌握Java语言编程技巧。
并学会编制结构清晰、风格良好的、数据结构适当的Java语言程序,从而具备解决综合性实际问题的能力。
二、设计题目及要求(二选一)
⑴设计一个图书信息管理系统
①图书信息包括图书编号、书名、作者、出版社、出版日期、图书简介及图书类别等。
②本系统功能描述:
图书信息录入功能;
图书信息浏览功能;
查询功能(至少一种查询方式);
图书信息修改功能;
及其它你认为必要的功能。
⑵设计一个画图软件
①用户界面友好;
②能绘制基本形状的图形;
③可设置图形的颜色、线条的粗细和填充等属性;
④可将画好的图保存至文件,并能从文件中读取。
三、设计报告的要求
设计结束后要写出课程设计报告,以作为整个课程设计评分的书面依据和存档材料。
设计报告以规定格式的电子文档书写、打印并装订,排版及图、表要清楚、工整。
内容及要求如下:
封面:
题目、班级、姓名、学号、指导教师和完成日期。
正文包括以下7个内容:
①课题说明
以无歧义的陈述说明程序设计的任务。
②程序设计思路
简要说明程序设计的思路。
③程序源代码
给出源代码及注释。
④程序测试
给出程序主要运行界面截图。
⑤设计总结
经验和体会等。
⑥参考文献
列出参考的相关资料和书籍。
五、课程设计考核方法及成绩评定
课程设计结束时,要求学生提交课程设计报告(附源程序)及可运行的软件系统。
课程设计成绩分两部分,设计报告占50%,设计作品占50%。
附件:
课程设计报告封面和参考程序。
湖南科技学院
课程设计报告
课程名称:
面向对象程序设计课程设计
课程设计题目:
画图板
系:
专业:
年级、班:
姓名:
学号:
指导教师:
职称:
2012年6月
1.课题的任务和要求
设计一个画图软件
①用户界面友好;
②能绘制基本形状的图形;
③可设置图形的颜色、线条的粗细和填充等属性;
④可将画好的图保存至文件,并能从文件中读取。
2.程序设计思路
该课题的任务是设计一个画图软件,要求能绘制基本形状的图形;同时可以设置图形的颜色、线条的粗细和是否填充等属性;并且可以将画好的图形以某种格式,比如说JPG保存至文件,并能从文件中读取某种格式的图像文件并显示出来。
首先,作为画图板,应该能够绘制基本的图形,像"铅笔","直线","矩形","椭圆",”圆”,同时考虑到实用性,画图板应该能够提供橡皮擦,设置线条粗细,颜色,背景颜色的功能。
在鼠标停留在按钮上时,按钮上应该提供显示提示文字,通过设置JButton的setText方法即可达到要求,在使用线条工具来绘制线条时,如果设置图形过于粗大,要求绘制出来图形能够消除锯齿,思路是在设置Graphics2D的大小时,设置Graphics2D,setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);即可达到要求
第二,考虑到平时画图时,总是喜欢按住shift来绘制45°,90°的线条,为方便用户,画图板也必须提供相应的功能,思路是判断线条的角度,如果角度大于0°同时小于45°,则绘制45°的斜线,如果线条的角度大于45°小于90°,则绘制90度的直线。
第三,关于设置背景颜色,考虑到美观,使用了渐变背景色,思路是在设置Graphics2D的背景色时,通过绘制不同透明度的条纹背景,与设置不同级别的透明度来达到绘制渐变背景色的目的。
第四,关于画图板,在提供通用的功能的同时,应该能够提供一些扩展功能,这是课程设计的一项基本要求,对于扩展功能我提供了绘制圆角矩阵,三角形,3D立方体,和绘制f(x)=A*sin(Bx)+C*cos(Cx),绘制重叠椭圆等扩展功能,绘制圆角矩阵是通过Graphics2D的drawRoundRect来实现的,而3D立方体则是通过fill3DRect实现的,而三角形是通过绘制首尾相连的三条直线来实现的。
而正余弦曲线则完全是通过计算出曲线的值,然后绘制一小段直线,通过绘制很多这样的小直线相连来达到绘制正余弦曲线的目的。
的值,然后绘制一小段直线,通过绘制很多这样的小直线相连来达到绘制正余弦曲线的目的。
而重叠椭圆的实现则是通过Graphics2D的draw(newEllipse2D.Double(x1,y1,85,90);绘制一个椭圆,然后translate(x1,y1);将Graphics2D上下文的原点平移到当前坐标系中的点(x1,y1),在计算d=m*math..PI/180的值,rotate(d);将当前的Graphics2DTransform与旋转转换连接,然后,translate(-x1,-y1);将Graphics2D上下文的原点平移到当前坐标系中的点(-x1,-y1)。
draw(newEllipse2D.Double(x1,y1,85,90));再来绘制一个椭圆,通过这样的处理,来绘制一个在一个圆平面且重叠的椭圆图形。
第五,关于设置是否填充的问题,对于直线来说,是否填充是没有实际意义的,所以不予考虑,释放填充应该考虑圆,椭圆,圆角矩阵,三角形,对于圆和椭圆的填充是通过调用
Graphics2D的drawOval方法实现的,圆角矩阵则是通过调用Graphics2D的drawRoundRect来实现的,而三角行的填充则是通过调用Graphics2D的fillPolygon方法来实现的.而填充与否的判断则是通过isfill的真与假来实现的.
第六,要求能够保存图形与打开已有的图形,这是通过使用BufferedImage来缓存绘制的图形,然后使用ImageIO将绘制的图形在重新绘制一次再保存到指定的位置,从而实现了文件的保存,打开文件时,考虑到实用性与方便,提供了预览图像的功能,通过继承Jpanel,将选得的图片通过setIcon绘制在出来,实现预览的功能。
打开是通过ImageIO将图片绘制在面板上。
为方便用户,提供了一个File的菜单,菜单中提供了新建,保存,打开,退出的功能。
第七,考虑到美观,使用了观感器的图形界面。
主要是通过观感管理器来实现的。
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());对于背景颜色则是通过设置渐变背景颜色来实现的。
第八,在用户退出时,要求能询问用户是否保存作品,考虑到菜单中有保存的选项,所以通过菜单退出时没有提供询问是否保存的功能,而在实际生活中,考虑到有时候会忘记保存,所以通过右上角窗口退出时必须询问是否保存,是否保存则是通过JOptionPane.showConfirmDialog来实现的,当用户选择Yes时,保存文件。
其他则直接退出。
根据课题要求,首先对要实现的功能类型抽象出一个公共的基类Drawing,子类Line,Rectange,Oval,Pencil,RoundRect,Circle,Rect3D,Triangle,SinCos,Tuo,Eraser通过继承基类来实现不同的功能,在使用时,通过基类来调用不同的子类,很好地体现了面向对象的Java语言的多态,抽象,继承的思想。
用户通过选择不同的按钮来绘制图形,这主要是利用按钮监听将不同的绘图功能绑定到不同的按钮上,通过监听用户的选择来创建不同的子类,通过子类绘制不同的图形。
3.源代码及注释
packagemyclass;
importjava.awt.*;
importjava.awt.event.*;
importjava.awt.geom.Ellipse2D;
importjava.awt.geom.Rectangle2D;
importjava.awt.image.BufferedImage;
importjava.beans.PropertyChangeEvent;
importjava.beans.PropertyChangeListener;
importjava.io.*;
importjava.util.ArrayList;
importjava.util.Random;
importjavax.imageio.ImageIO;
importjavax.swing.*;
importjavax.swing.event.*;
importjavax.swing.filechooser.FileFilter;
importjavax.swing.filechooser.FileNameExtensionFilter;
importjavax.swing.filechooser.FileView;
importjavax.swing.text.StyledEditorKit.ForegroundAction;
importorg.omg.CORBA.FREE_MEM;
importorg.w3c.dom.css.Rect;
publicclassDrawingBoard{
publicstaticvoidmain(String[]args){
DrawGraphicnewPad=newDrawGraphic();//创建窗口对象
}
}
classDrawGraphicextendsJFrame{
privateJButtonchoices[];//按钮数组
privateStringnames[]={"铅笔","直线","矩形","椭圆","圆角矩阵","圆","3D立方体","三角形","椭圆重叠","正余弦曲线","橡皮擦","背景色","颜色"};//按钮上的文本
privateStringtipText[]={"自由绘制","绘制直线","绘制矩形","绘制椭圆","绘制圆角矩阵","绘制圆","绘制3D立方体","绘制三角形","椭圆重叠","正余弦曲线","橡皮檫","设置透明背景色","选择颜色"};//按钮的提示字串
JToolBarbuttonBar;//工具条
Drawing[]itemlist=newDrawing[1000];
JCheckBoxfillCheckBox;//复选框
JSliderstrokeSlider;//滑动条
intindex=0;
privateintcurrentType=1;//当前选择
privateColorcolor=Color.black;//颜色
privatefloatcurrentstroke=1.0f;//线条粗细
privatebooleancurrentfill=false;//是否填充
privatebooleanisShiftDown=false;//释放按下shift键
privateJLabelstatusBar;//状态栏
privatedoubleA=0,B1=0,C=0,D=0;//f(x)=A*sin(B*x)+C*cos(D*x);
privateDrawPaneldrawingArea;//画图区域
privateJPanelsliderPanel;//放置滑动条的面板
privateintwidth=1000,height=600;//画图区域初始大小
privateJFileChooserchooser;//颜色选择
privateBufferedImagebi=null;//最后的图形要保存下来,使用缓冲图像
privateGraphicsgg;//图像专用画笔
publicDrawGraphic()
{
//窗口的构造方法
//super("画板");//显式调用父类的带参构造方法,设置窗口标题为"画板"
this.setTitle("画板");//窗口的标题也通过窗口的属性来设置
JMenuBarmenuBar=newJMenuBar();//创建菜单条
choices=newJButton[names.length];//创建按钮数组
buttonBar=newJToolBar(JToolBar.HORIZONTAL);//创建工具条对象,水平
drawingArea=newDrawPanel();//创建画图区域
for(inti=0;i choices[i]=newJButton(); choices[i].setFont(newFont("宋体",Font.BOLD,14));//设置按钮文字字体 choices[i].setToolTipText(tipText[i]);//设置按钮的提示文本 choices[i].setText(names[i]);//设置按钮显示的文本 buttonBar.add(choices[i]);//将按钮加入工具中 } fillCheckBox=newJCheckBox("实心");//复选框 buttonBar.add(fillCheckBox); sliderPanel=newJPanel();//放置滑动条的画板 strokeSlider=newJSlider(1,20,1);//滑动条 strokeSlider.setPaintTicks(true); strokeSlider.setPaintLabels(true);//显示数字 strokeSlider.setSnapToTicks(true);//滑动至最近的数字 strokeSlider.setMajorTickSpacing(5);//主刻度 strokeSlider.setMinorTickSpacing (1);//次刻度 strokeSlider.setValue(0);//当前默认值 fillCheckBox.addActionListener(newButtonListener());//监听复选框的变化 buttonBar.add(strokeSlider);//添加滑动条 JMenufileMenu=newJMenu("文件");//"文件"菜单对象 menuBar.add(fileMenu); JMenuItemsaveItem=newJMenuItem("保存...");//创建菜单项 saveItem.addActionListener( newActionListener(){ publicvoidactionPerformed(ActionEvente) { SaveFile();//如果被触发,则调用新建文件函数段 } } ); JMenuItemopenItem=newJMenuItem("打开..."); openItem.addActionListener( newActionListener(){ publicvoidactionPerformed(ActionEvente) { OpenFile();//如果被触发,则调用新建文件函数段 } } ); JMenuItemNewItem=newJMenuItem("新建..."); NewItem.addActionListener( newActionListener(){ publicvoidactionPerformed(ActionEvente) { NewFile();//如果被触发,则调用新建文件函数段 } } ); JMenuItemexitItem=newJMenuItem("退出"); fileMenu.add(saveItem);//将菜单项加入菜单中 fileMenu.add(openItem); fileMenu.add(NewItem); fileMenu.addSeparator();//分隔条 fileMenu.add(exitItem); setJMenuBar(menuBar);//设置窗口的菜单栏 exitItem.addActionListener(newActionListener(){//绑定退出菜单项的监听器 @Override publicvoidactionPerformed(ActionEvente){//实现ActionListener接口中的方法 System.exit(0);//退出系统 } }); FileNameExtensionFilterfilter=newFileNameExtensionFilter("JPG", "jpg"); chooser=newJFileChooser();//颜色选择 chooser.setCurrentDirectory(newFile("."));//默认当前文件夹 chooser.setFileFilter(filter);//设置文件过滤器 chooser.setAccessory(newImagePreviewer(chooser));//添加图片预览 chooser.setAcceptAllFileFilterUsed(false);//不显示'所有文件(*.*)选项 chooser.setFileView(newFileIconView(filter,newImageIcon())); try{ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());//设置观感管理器 }catch(Exceptione){ e.printStackTrace(); } Containerc=getContentPane();//获取框架的内容面板 c.add(buttonBar,BorderLayout.NORTH);//在内容面板中加入工具栏 c.add(drawingArea,BorderLayout.CENTER);//加入画图区域 ButtonListenerbuttonListener=newButtonListener(); for(inti=0;i { choices[i].addActionListener(buttonListener);//添加按钮监听 } createNewItem(); statusBar=newJLabel();//创建状态栏 addSlider(strokeSlider,statusBar);//添加状态栏 c.add(sliderPanel,BorderLayout.SOUTH);//状态栏位置 statusBar.setText("欢迎使用画板");//设置状态栏显示的文本 setSize(width,height);//设置初始窗口大小 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗口的关门操作 addWindowListener(newWindowAdapter(){ publicvoidwindowClosing(WindowEventwe){//当点击关闭按钮 intop=JOptionPane.showConfirmDialog(null,""+"作品"+"是否保存"); if(op==JOptionPane.YES_OPTION) { SaveFile(); }}}); setVisible(true);//设置窗口可见 } privatevoidaddSlider(JSliders,JLabelstatusBar2)//滑动条变化监听 { s.addChangeListener(newChangeListener() { publicvoidstateChanged(ChangeEventevent) { JSlidersource=(JSlider)event.getSource(); currentstroke=(int)source.getValue();//当前大小 itemlist[index].stroke=currentstroke;//保存线条大小设置 } }); JPanelpanel1=newJPanel(); panel1.add(s); panel1.add(statusBar2); sliderPanel.add(panel1); } classFileIconViewextendsFileView//文件预览 { publicFileIconView(FileFilteraFilter,IconanIcon) { filter=aFilter; icon=anIcon; } publicIcongetIcon(Filef) { if(! f.isDirectory()&&filter.accept(f))returnicon; elsereturnnull; } privateFileFilterfilter; privateIconicon;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 面向 对象 课程设计 报告 画图板