Java面向对象课程设计报告画图板毕业设计(论文)word格式.doc_第1页
Java面向对象课程设计报告画图板毕业设计(论文)word格式.doc_第2页
Java面向对象课程设计报告画图板毕业设计(论文)word格式.doc_第3页
Java面向对象课程设计报告画图板毕业设计(论文)word格式.doc_第4页
Java面向对象课程设计报告画图板毕业设计(论文)word格式.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

面向对象程序设计课程设计指导书课程设计名称:面向对象程序设计课程设计 指导老师:牛志毅课程设计周(时)数:2周指导方式:集体辅导与个别辅导相结合课程设计适用专业:信息与计算机科学课程设计教材及主要参考资料:Java程序设计与案例刘宝林主编,高等教育出版社服务课程名称:面向对象程序设计一、课程设计教学目的及基本要求通过本课程设计,使学生了解面向对象程序的开发思想、方法和步骤,掌握开发工具的使用,提高综合运用所学的理论知识和方法独立分析和解决问题的能力,进一步提高其开发应用程序的能力。要求明确本次课程设计所要用到的技术点并到网上搜索以及查阅相关的书籍来搜集资料。通过编写一个基于JAVA的应用系统综合实例,来掌握Java语言编程技巧。并学会编制结构清晰、风格良好的、数据结构适当的Java语言程序,从而具备解决综合性实际问题的能力。二、设计题目及要求(二选一) 设计一个图书信息管理系统图书信息包括图书编号、书名、作者、出版社、出版日期、图书简介及图书类别等。本系统功能描述:图书信息录入功能; 图书信息浏览功能;查询功能(至少一种查询方式);图书信息修改功能;及其它你认为必要的功能。 设计一个画图软件用户界面友好;能绘制基本形状的图形;可设置图形的颜色、线条的粗细和填充等属性;可将画好的图保存至文件,并能从文件中读取。三、设计报告的要求设计结束后要写出课程设计报告,以作为整个课程设计评分的书面依据和存档材料。设计报告以规定格式的电子文档书写、打印并装订,排版及图、表要清楚、工整。内容及要求如下: 封面:题目、班级、姓名、学号、指导教师和完成日期。正文包括以下7个内容:课题说明以无歧义的陈述说明程序设计的任务。程序设计思路简要说明程序设计的思路。程序源代码给出源代码及注释。程序测试给出程序主要运行界面截图。设计总结经验和体会等。参考文献列出参考的相关资料和书籍。五、课程设计考核方法及成绩评定 课程设计结束时,要求学生提交课程设计报告(附源程序)及可运行的软件系统。课程设计成绩分两部分,设计报告占50,设计作品占50。附件:课程设计报告封面和参考程序。32湖南科技学院课程设计报告课程名称:面向对象程序设计课程设计课程设计题目:画图板系:专 业:年级、班:姓 名:学 号:指导教师:职 称: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(new Ellipse2D.Double(x1,y1,85,90);绘制一个椭圆,然后translate(x1,y1); 将 Graphics2D 上下文的原点平移到当前坐标系中的点(x1,y1),在计算d=m*math.PI/180的值,rotate(d); 将当前的 Graphics2D Transform 与旋转转换连接,然后,translate(-x1,-y1); 将Graphics2D 上下文的原点平移到当前坐标系中的点(-x1,-y1)。draw(new Ellipse2D.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. 源代码及注释package myclass;import java.awt.*;import java.awt.event.*;import java.awt.geom.Ellipse2D;import java.awt.geom.Rectangle2D;import java.awt.image.BufferedImage;import java.beans.PropertyChangeEvent;import java.beans.PropertyChangeListener;import java.io.*;import java.util.ArrayList;import java.util.Random;import javax.imageio.ImageIO;import javax.swing.*;import javax.swing.event.*;import javax.swing.filechooser.FileFilter;import javax.swing.filechooser.FileNameExtensionFilter;import javax.swing.filechooser.FileView;import javax.swing.text.StyledEditorKit.ForegroundAction;import org.omg.CORBA.FREE_MEM;import org.w3c.dom.css.Rect;public class DrawingBoard public static void main(String args) DrawGraphic newPad = new DrawGraphic(); /创建窗口对象 class DrawGraphic extends JFrame private JButton choices; / 按钮数组private String names = 铅笔, 直线, 矩形, 椭圆,圆角矩阵, 圆,3D立方体,三角形,椭圆重叠,正余弦曲线,橡皮擦,背景色,颜色 ; / 按钮上的文本private String tipText = 自由绘制, 绘制直线, 绘制矩形, 绘制椭圆 ,绘制圆角矩阵,绘制圆,绘制3D立方体,绘制三角形,椭圆重叠,正余弦曲线,橡皮檫,设置透明背景色,选择颜色; / 按钮的提示字串JToolBar buttonBar; / 工具条Drawing itemlist=new Drawing1000;JCheckBox fillCheckBox;/复选框JSlider strokeSlider;/滑动条int index=0;private int currentType=1;/当前选择private Color color=Color.black;/颜色private float currentstroke=1.0f;/线条粗细private boolean currentfill=false;/是否填充private boolean isShiftDown = false;/释放按下shift键private JLabel statusBar; / 状态栏private double A=0,B1=0,C=0,D=0;/f(x)=A*sin(B*x)+C*cos(D*x);private DrawPanel drawingArea; / 画图区域private JPanel sliderPanel;/放置滑动条的面板private int width = 1000, height = 600; / 画图区域初始大小private JFileChooser chooser;/颜色选择private BufferedImage bi=null;/ 最后的图形要保存下来,使用缓冲图像private Graphics gg;/ 图像专用画笔 public DrawGraphic() /窗口的构造方法/super(画板); /显式调用父类的带参构造方法,设置窗口标题为画板this.setTitle(画板); /窗口的标题也通过窗口的属性来设置JMenuBar menuBar = new JMenuBar(); / 创建菜单条choices = new JButtonnames.length; / 创建按钮数组buttonBar = new JToolBar(JToolBar.HORIZONTAL); / 创建工具条对象,水平drawingArea = new DrawPanel(); / 创建画图区域for (int i = 0; i choices.length; i+) / 创建按钮数组中的各按钮对象choicesi = new JButton();choicesi.setFont(new Font(宋体, Font.BOLD, 14);/设置按钮文字字体choicesi.setToolTipText(tipTexti); / 设置按钮的提示文本choicesi.setText(namesi); / 设置按钮显示的文本buttonBar.add(choicesi); / 将按钮加入工具中fillCheckBox=new JCheckBox(实心 );/复选框buttonBar.add(fillCheckBox);sliderPanel = new JPanel();/放置滑动条的画板strokeSlider=new JSlider(1,20,1);/滑动条strokeSlider.setPaintTicks(true);strokeSlider.setPaintLabels(true);/显示数字strokeSlider.setSnapToTicks(true);/滑动至最近的数字strokeSlider.setMajorTickSpacing(5);/主刻度strokeSlider.setMinorTickSpacing(1);/次刻度strokeSlider.setValue(0);/当前默认值fillCheckBox.addActionListener(new ButtonListener();/监听复选框的变化buttonBar.add(strokeSlider);/添加滑动条JMenu fileMenu = new JMenu(文件); / 文件菜单对象menuBar.add(fileMenu);JMenuItem saveItem = new JMenuItem(保存.); / 创建菜单项saveItem.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)SaveFile();/如果被触发,则调用新建文件函数段);JMenuItem openItem = new JMenuItem(打开.);openItem.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)OpenFile();/如果被触发,则调用新建文件函数段);JMenuItem NewItem = new JMenuItem(新建.);NewItem.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)NewFile();/如果被触发,则调用新建文件函数段);JMenuItem exitItem = new JMenuItem(退出);fileMenu.add(saveItem); / 将菜单项加入菜单中fileMenu.add(openItem);fileMenu.add(NewItem);fileMenu.addSeparator(); / 分隔条fileMenu.add(exitItem);setJMenuBar(menuBar); / 设置窗口的菜单栏exitItem.addActionListener(new ActionListener() / 绑定退出菜单项的监听器Overridepublic void actionPerformed(ActionEvent e) / 实现ActionListener接口中的方法System.exit(0); / 退出系统);FileNameExtensionFilter filter = new FileNameExtensionFilter(JPG,jpg);chooser = new JFileChooser();/颜色选择chooser.setCurrentDirectory(new File(.);/默认当前文件夹chooser.setFileFilter(filter);/设置文件过滤器chooser.setAccessory(new ImagePreviewer(chooser);/添加图片预览chooser.setAcceptAllFileFilterUsed(false);/不显示所有文件(*.*)选项chooser.setFileView(new FileIconView(filter, new ImageIcon( );try UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName();/设置观感管理器 catch (Exception e) e.printStackTrace();Container c = getContentPane(); / 获取框架的内容面板c.add(buttonBar, BorderLayout.NORTH); / 在内容面板中加入工具栏c.add(drawingArea, BorderLayout.CENTER); / 加入画图区域ButtonListener buttonListener=new ButtonListener();for(int i=0;i getWidth() icon = new ImageIcon(icon.getImage().getScaledInstance(getWidth(), -1, Image.SCALE_DEFAULT);/图片太大,设置为缩略图setIcon(icon););void SaveFile()/保存文件功能int s = chooser.showSaveDialog(null);Graphics2D g2d=(Graphics2D)gg;for(int i=0;i=index;i+)/重新绘制itemlisti.draw(g2d);if (s = JFileChooser.APPROVE_OPTION) try ImageIO.write(bi, jpg, chooser.getSelectedFile();/输出 catch (Exception ex) ex.printStackTrace();void OpenFile()/打开文件int i = chooser.showOpenDialog(null);if (i = JFileChooser.APPROVE_OPTION) try / 将文件图像加载到内存中bi = ImageIO.read(chooser.getSelectedFile();/ 更换图像以后,画笔也必须更换为新的画笔gg = bi.getGraphics();/ 画笔默认白色gg.setColor(color);this.repaint(); catch (Exception ex) ex.printStackTrace();void NewFile()index=0;A=B1=C=D=0;gg.setColor(Color.white);/ 将画笔调整为白色gg.fillRect(0, 0, 1000, 600);/ 将图像涂白currentType=1;color=Color.black;currentstroke=1;createNewItem();repaint();/将有关值设置为初始状态,并且重画void createNewItem()/根据不同的选择创建不同的子类,实现图形的绘制switch(currentType)case 0:itemlistindex=new Pencil();/铅笔画break;case 1:itemlistindex=new Line();/直线break;case 2:itemlistindex=new Rectange();/矩形break;case 3:itemlistindex=new Oval();/椭圆break;case 4:itemlistindex=new RoundRect();/圆角矩阵break;case 5:itemlistindex=new Circle();/圆break;case 6:itemlistindex=new Rect3D();/3D立方体break;case 7:itemlistindex=new Triangle();/三角形break;case 8:itemlistindex=new Tuo();/椭圆重叠break;case 9:itemlistindex=new SinCos();/正余弦曲线break;case 10:itemlistindex=new Eraser();/橡皮檫break;itemlistindex.type=currentType;/保存当前选择itemlistindex.color=color;/保存当前颜色itemlistindex.fill=currentfill;/释放填充itemlistindex.isShiftDown=isShiftDown;/释放按下shift键itemlistindex.stroke=currentstroke;/当前大小itemlistindex.A=A;itemlistindex.B1=B1;itemlistindex.C=C;itemlistindex.D=D;/正余弦曲线参数class DrawPanel extends JPanel / 画图区域类public DrawPanel() setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR); / 设置光标bi = new BufferedImage(1000, 600, BufferedImage.TYPE_INT_RGB);gg = bi.getGraphics();gg.setColor(Color.white);/ 将画笔调整为白色gg.fillRect(0, 0, 1000, 600);/ 将图像涂白gg.setColor(Color.BLACK);/ 将画笔从新调成黑色/setBackground(Color.WHITE); / 设置画图区域背景为白色addMouseListener(new MouseA(); / 给画图区域添加鼠标监听器addMouseMotionListener(new MouseB();public void paintComponent(Graphics g) g.setColor(color);/设置颜色super.paintComponent(g);g.drawImage(bi, 0, 0, null);/ 手工强制清空面板Graphics2D g2d=(Graphics2D)g;float dashPattern = 10f ;/条纹中短横线的长度g2d.setColor(Color.PINK );/ 创建条纹笔迹BasicStroke stroke1 = new BasicStroke(10F, BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL, 10f, dashPattern, 5f);g2d.setStroke(stroke1);/ 获取当前面板的大小Rectangle rect = getBounds();/ 绘制黑色条纹边框g2d.drawRect(0, 0, rect.width, rect.height);/ 设置前景色为黄色g2d.setColor(Color.yellow);/ 创建新的条纹笔迹,颜色为黄色,15f较原来的5f偏移10个像素,因此彼此互相填充空白区域,产生间隔显示的效果stroke1 = new BasicStroke(10F, BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL, 10f, dashPattern, 15f);g2d.setStroke(stroke1);/ 绘制黄色条纹边框g2d.drawRect(0, 0, rect.width, rect.height);for(int i=0;i=index;i+)itemlisti.draw(g2d);class MouseA extends MouseAdapter / 鼠标进入、点击事件的监听器public void mousePressed(MouseEvent e) itemlistindex.x1=itemlistindex.x2=e.getX();itemlistindex.y1=itemlistindex.y2=e.getY();if(currentType=0|currentType=10)itemlistindex.x1=itemlistindex.x2=e.getX();itemlistindex.y1=itemlistindex.y2=e.getY();index+;createNewItem();if(currentType=9)return;repaint();statusBar.setText(鼠标按下 + e.getX() + , + e.getY() + ); / 设置状态栏文本public void mouseReleased(MouseEvent e) /鼠标释放监听if(currentType=0|currentType=10)itemlistindex.x1=e.getX();itemlistindex.y1=e.getY();if(currentType=9)/按下 调用setAB()设置正余弦曲线参数值setAB();itemlistindex.x2=e.getX();itemlistindex.y2=e.getY();repaint();/刷新index+;createNewItem();statusBar.setText(鼠标释放 + e.getX() + , + e.getY() + );public void mouseEntered(MouseEvent e) /鼠标进入监听statusBar.setText(鼠标进入 + e.getX() + , + e.getY() + );public void mouseExited(MouseEvent e) / 鼠标移出statusBar.setText(鼠标移出 + e.getX() + , + e.getY() + );class MouseB extends MouseMotionAdapter / 鼠标移动事件的监听器public void mouseDragged(MouseEvent e) if(currentType=0|currentType=10)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();isShiftDown = e.isShiftDown();statusBar.setText(鼠标拖动 + e.getX() + , + e.getY() + ); public void mouseMoved(MouseEvent e) /鼠标移动监听statusBar.setText(鼠标移动 + e.getX() + , + e.getY() + );public class ButtonListener implements ActionListener/按钮监听public void actionPerformed(ActionEvent e)for(int i=0;i=10;i+)if(e.getSource()=choicesi)currentType=i;/repaint();if(e.getSource()=choices11)/设置背景颜色setcolor();if(e.getSource()=fillCheckBox)/设置是否填充currentfill=fillCheckBox.isSelected();if(e.getSource()=choices12)/设置图形颜色chooseColor();repaint();createNewItem();public void setcolor()/设置背景颜色Graphics2D g2d=(Graphics2D)gg;Color c1=Color.white;c1=(JColorChooser.showDialog(this, 请选择透明色, c1);if(c1=null)return;g2d.setColor(c1);/ 绘制不同透明度的条纹背景for (int i = 0; i 0)tryA=Double.parseDouble(s);/将String类型转换为double类型catch(NumberFormatException e)flag=false;itemlistindex.A=A;else flag=false;if(flag)/A正确设置B的值s = (String)JOptionPane.showInputDialog(请输入Sin(BX)中的参数B); if

温馨提示

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

评论

0/150

提交评论