java课程设计报告简单绘画板.doc

上传人:仙人指路1688 文档编号:2387059 上传时间:2023-02-17 格式:DOC 页数:20 大小:231.50KB
返回 下载 相关 举报
java课程设计报告简单绘画板.doc_第1页
第1页 / 共20页
java课程设计报告简单绘画板.doc_第2页
第2页 / 共20页
java课程设计报告简单绘画板.doc_第3页
第3页 / 共20页
java课程设计报告简单绘画板.doc_第4页
第4页 / 共20页
java课程设计报告简单绘画板.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《java课程设计报告简单绘画板.doc》由会员分享,可在线阅读,更多相关《java课程设计报告简单绘画板.doc(20页珍藏版)》请在三一办公上搜索。

1、Java课程设计报告题目: 一个简单的绘画板 班级: 学号: 姓名: 指导老师: 完成起止日期: 2011年12月7日 2011年12月26日目录1、题目与要求 31.1、题目 31.2、参考文献 32、功能描述 43、设计思想与系统结构53.1、类设计53.2、结构图64、用户界面75、代码分析86、实验总结19课程设计题目与要求1.1 .课题题目参考Windows附件中的绘图工具,使用Java语言设计并实现一个简单的绘图板。(界面使用AWT或SWING)a) 实现各类基本图形的编辑b) 实现文件的保存和读取功能。1.2 .参考文献1java编程思想,机械工业出版社,1999年4月2java

2、项目设计与开发范例,电子工业出版社,2005年4月,唐小军等3java开放源码编程,电子工业出版社,2005年1月,沃纳斯4.java程序设计,清华大学出版社,2004年8月,雍俊海功能描述a) 画笔功能程序实现画笔功能,可以拖动鼠标画任意曲线,曲线颜色可从调试板选择。b) 直线功能程序实现画直线功能,可以以任意点为起点,拖动鼠标画任意长的线段,线段颜色可由调试板选择。c) 矩形功能程序实现画矩形功能,可以以任意点为矩形的左上角端点,拖动鼠标画任意矩形,矩形颜色可由调试板选择。d) 椭圆功能程序实现画椭圆功能,可以以任意点为椭圆的左端边界,画任意椭圆,椭圆颜色可由调试板选择。e) 调色板功能程

3、序实现调试板功能,可以选择画笔的颜色和填充图形的颜色。f) 清除功能程序实现清除画板功能,可以清除以前在画板上画的所有图形。g) 文件保存程序实现文件保存功能,可以保存画图文件,可以在以后继续编辑。h) 文件打开程序实现打开以前保存的画图文件的功能,可以打开以前保存的图片,继续编辑。设计思想与系统结构3.1.类设计 图3.13.2.结构图界 面菜单栏工作区线矩形圆形保存打开鼠标动作监听选 择绘制菜单选择监听 图3.2用户界面 图4.1操作:画直线,曲线,圆,椭圆,矩形 图4.2代码分析import java.awt.*; import java.awt.event.*; import java

4、.util.*; import javax.swing.*;import java.awt.geom.*; import java.io.*; public class Painting public static void main(String args) new paintboard(画板); /*点*/class Point implements Serializable /对象序列化接口int x,y; /点坐标Color col; /颜色int tool; /工具类型int boarder; /边界Point(int x, int y, Color col, int tool, i

5、nt boarder) this.x = x; this.y = y; this.col = col; this.tool = tool; this.boarder = boarder; /*画板*/class paintboard extends Frame implements ActionListener,MouseMotionListener,MouseListener,ItemListener int x = -1, y = -1; int con = 1;/画笔大小 int Econ = 5;/橡皮大小 int toolFlag = 0;/toolFlag:工具标记 /*toolF

6、lag工具对应表: (0-画笔);(1-橡皮);(2-清除); (3-直线);(4-圆);(5-矩形); (6-撤销) */Color c = new Color(0,0,0); /画笔颜色 BasicStrokesize=newBasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); /画笔粗细Point cutflag = new Point(-1, -1, c, 6, con);/截断标志 Vector paintInfo = null;/点信息向量组 int n = 1; FileInputStream picIn =

7、null; FileOutputStream picOut = null; ObjectInputStream VIn = null; ObjectOutputStream VOut = null; / *工具面板-画笔,直线,圆,矩形,橡皮,清除*/ Panel toolPanel; /画板组件JButton eraser, drLine,drCircle,drRect; /橡皮,画线,画圆,画矩形JButton clear ,pen; /清除,铅笔Choice SizeChoice,EraserChoice; /选择颜色,选择画笔大小,选择橡皮大小JButton colchooser; /

8、调色板Label 大小B,大小E; /保存功能 JButton openPic,savePic; /打开,保存按钮FileDialog openPicture,savePicture; /打开,保存对话框paintboard(String s) super(s); addMouseMotionListener(this); addMouseListener(this); paintInfo = new Vector(); /点信息向量组/*各工具按钮及选择项*/ /画笔大小选择 SizeChoice = new Choice(); SizeChoice.add(1); SizeChoice.a

9、dd(3); SizeChoice.add(5); SizeChoice.add(7); SizeChoice.add(9); SizeChoice.add(11); SizeChoice.add(15); SizeChoice.add(19); SizeChoice.addItemListener(this); /事件监听/橡皮大小选择 EraserChoice = new Choice();EraserChoice.add(2);EraserChoice.add(5); EraserChoice.add(9); EraserChoice.add(13); EraserChoice.add(

10、17); EraserChoice.add(21); EraserChoice.add(25); EraserChoice.addItemListener(this); /事件监听toolPanel = new Panel();Color bc=new Color(0,255,0);/JButton背景色clear = new JButton(清除);/清除/clear.setIcon(clearicon);clear.setBackground(bc);eraser = new JButton(橡皮);eraser.setBackground(bc);pen = new JButton(画笔

11、);/画笔/pen.setIcon(penicon);pen.setBackground(bc);drLine = new JButton(直线); drLine.setBackground(bc);drCircle = new JButton(圆形); drCircle.setBackground(bc);drRect = new JButton(矩形); drRect.setBackground(bc);openPic = new JButton(打开);/打开/openPic.setIcon(openicon);openPic.setBackground(bc);savePic = ne

12、w JButton(保存); /保存/savePic.setIcon(saveicon);savePic.setBackground(bc);colchooser = new JButton(调色板); colchooser.setBackground(bc);/各组件事件监听 clear.addActionListener(this); eraser.addActionListener(this); pen.addActionListener(this); drLine.addActionListener(this); drCircle.addActionListener(this); dr

13、Rect.addActionListener(this); openPic.addActionListener(this); savePic.addActionListener(this); colchooser.addActionListener(this); Color lc=new Color(150,150,150);/颜色 = new Label(画笔颜色,Label.CENTER); /颜色.setBackground(lc);大小B = new Label(画笔大小,Label.CENTER); 大小B.setBackground(lc);大小E = new Label(橡皮大小

14、,Label.CENTER); 大小E.setBackground(lc);/面板添加组件 toolPanel.add(pen); /画笔toolPanel.add(drLine); /画直线toolPanel.add(drCircle); /画圆toolPanel.add(drRect); /画矩形toolPanel.add(大小B);/画笔大小标签toolPanel.add(SizeChoice); /画笔大小选项toolPanel.add(colchooser); /调色板toolPanel.add(eraser); /橡皮按钮toolPanel.add(大小E); /橡皮大小标签too

15、lPanel.add(EraserChoice); /橡皮大小选项toolPanel.add(clear); /清除toolPanel.add(openPic); /打开toolPanel.add(savePic); /保存/工具面板添加到APPLET面板 add(toolPanel,BorderLayout.NORTH); setBounds(0,0,1000,700);/画板边界大小 setVisible(true); validate(); openPicture = new FileDialog(this,打开,FileDialog.LOAD); /文件打开对话框openPicture

16、.setVisible(false); savePicture = new FileDialog(this,保存,FileDialog.SAVE); /文件保存对话框savePicture.setVisible(false); openPicture.addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)openPicture.setVisible(false); ); /打开窗口事件监听savePicture.addWindowListener(new WindowAdapter() publ

17、ic void windowClosing(WindowEvent e) savePicture.setVisible(false); ); /保存窗口事件监听addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); /主程序窗口事件监听 /*画图*/public void paint(Graphics g) Graphics2D g2d = (Graphics2D)g; /二维图形Point p1,p2; /点n = paintInfo.size(); /

18、点的个数if(toolFlag=2) g.clearRect(0,0,getSize().width,getSize().height);/清除画板内容for(int i=0; in ;i+) p1 = (Point)paintInfo.elementAt(i); p2 = (Point)paintInfo.elementAt(i+1); size = new BasicStroke(p1.boarder,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); g2d.setColor(p1.col); g2d.setStroke(size); if(p1.

19、tool=p2.tool) /判断点的类型 switch(p1.tool) case 0:/画笔 Line2D line1 = new Line2D.Double(p1.x, p1.y, p2.x, p2.y); g2d.draw(line1); break; case 1:/橡皮 g.clearRect(p1.x, p1.y, p1.boarder, p1.boarder); break; case 3:/画直线 Line2D line2 = new Line2D.Double(p1.x, p1.y, p2.x, p2.y); g2d.draw(line2); break; case 4:/

20、画圆 Ellipse2D ellipse = new Ellipse2D.Double(p1.x, p1.y, Math.abs(p2.x-p1.x) , Math.abs(p2.y-p1.y); g2d.draw(ellipse); break; case 5:/画矩形 Rectangle2D rect = new Rectangle2D.Double(p1.x, p1.y, Math.abs(p2.x-p1.x) , Math.abs(p2.y-p1.y); g2d.draw(rect); break; case 6:/截断,跳过 i=i+1; break; default : /end

21、switch /end if /end for /*事件处理*/public void itemStateChanged(ItemEvent e) if(e.getSource()=SizeChoice)/画笔大小 String selected = SizeChoice.getSelectedItem(); if(selected=1) con = 1; size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); else if(selected=3) con = 3; size = new BasicSt

22、roke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); else if(selected=5) con = 5; size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); else if(selected=7) con = 7; size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); else if(selected=9) con = 9; size = new B

23、asicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); else if(selected=11) con = 11; size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); else if(selected=15) con = 15; size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); else if(selected=19) con = 19;

24、size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); else if(e.getSource()=EraserChoice)/橡皮大小 String Esize = EraserChoice.getSelectedItem(); if(Esize=2) Econ = 2*2; if(Esize=5) Econ = 5*2; else if(Esize=9) Econ = 9*2; else if(Esize=13) Econ = 13*2; else if(Esize=17) Econ = 17*2;

25、else if(Esize=21) Econ = 21*2; else if(Esize=25) Econ = 25*2; /* 单击鼠标拖动 ,画笔,橡皮 */public void mouseDragged(MouseEvent e) Point p1 ; switch(toolFlag) case 0:/画笔 x = (int)e.getX(); y = (int)e.getY(); p1 = new Point(x, y, c, toolFlag, con); paintInfo.addElement(p1); repaint(); break; case 1:/橡皮 x = (int

26、)e.getX(); y = (int)e.getY(); p1 = new Point(x, y, null, toolFlag, Econ);/用无色的点重新覆盖掉以前的点 paintInfo.addElement(p1); repaint(); break; default : /*鼠标移动*/public void mouseMoved(MouseEvent e) /*更新*/public void update(Graphics g) paint(g); /*单击鼠标拖动,画直线,画圆,画矩形*/public void mousePressed(MouseEvent e) Point

27、 p2; switch(toolFlag) case 3:/直线 x = (int)e.getX(); y = (int)e.getY(); p2 = new Point(x, y, c, toolFlag, con); paintInfo.addElement(p2); break; case 4: /圆 x = (int)e.getX(); y = (int)e.getY(); p2 = new Point(x, y, c, toolFlag, con); paintInfo.addElement(p2); break; case 5: /矩形 x = (int)e.getX(); y =

28、 (int)e.getY(); p2 = new Point(x, y, c, toolFlag, con); paintInfo.addElement(p2); break; default : /*鼠标释放*/public void mouseReleased(MouseEvent e) Point p3; switch(toolFlag) case 0:/画笔 paintInfo.addElement(cutflag); /截断画笔break; case 1: /橡皮 paintInfo.addElement(cutflag); /截断橡皮break; case 3:/直线 x = (i

29、nt)e.getX(); y = (int)e.getY(); p3 = new Point(x, y, c, toolFlag, con); paintInfo.addElement(p3); paintInfo.addElement(cutflag); repaint(); break; case 4: /圆 x = (int)e.getX(); y = (int)e.getY(); p3 = new Point(x, y, c, toolFlag, con); paintInfo.addElement(p3); paintInfo.addElement(cutflag); repaint

30、(); break; case 5: /矩形 x = (int)e.getX(); y = (int)e.getY(); p3 = new Point(x, y, c, toolFlag, con); paintInfo.addElement(p3); paintInfo.addElement(cutflag); repaint(); break; default: public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) public void mouseClicked(MouseEvent e)

31、 /*动作事件处理*/public void actionPerformed(ActionEvent e) if(e.getSource()=pen)/画笔 toolFlag = 0; if(e.getSource()=eraser)/橡皮 toolFlag = 1; if(e.getSource()=clear)/清除 toolFlag = 2; paintInfo.removeAllElements(); repaint(); if(e.getSource()=drLine)/画线 toolFlag = 3; if(e.getSource()=drCircle)/画圆 toolFlag =

32、 4; if(e.getSource()=drRect)/画矩形 toolFlag = 5; if(e.getSource()=colchooser)/调色板 Color newColor = JColorChooser.showDialog(this,调色板,c); c = newColor; if(e.getSource()=openPic)/打开图画 openPicture.setVisible(true); if(openPicture.getFile()!=null) int tempflag; tempflag = toolFlag; toolFlag = 2 ; /paintIn

33、fo.removeAllElements();/移除所有点的信息 /repaint(); /清除画板内容try paintInfo.removeAllElements();/移除所有点的信息 repaint(); /清除画板内容File filein = new File(openPicture.getDirectory(),openPicture.getFile(); /打开文件picIn = new FileInputStream(filein); VIn = new ObjectInputStream(picIn); paintInfo = (Vector)VIn.readObject(

34、); /依次将文件中的点信息读入到点向量组中VIn.close(); repaint(); /重绘点toolFlag = tempflag;/工具类型恢复为载入文件之前的状态 catch(ClassNotFoundException IOe2) /捕获文件类型不正确异常 repaint(); toolFlag = tempflag; System.out.println(can not read object); catch(IOException IOe) /捕获文件无法读取异常 repaint(); toolFlag = tempflag; System.out.println(can n

35、ot read file); if(e.getSource()=savePic)/保存图画 savePicture.setVisible(true); try File fileout = new File(savePicture.getDirectory(),savePicture.getFile(); /保存文件picOut = new FileOutputStream(fileout); VOut = new ObjectOutputStream(picOut); VOut.writeObject(paintInfo); /将点向量组中的点信息写入对象输出流VOut.close(); c

36、atch(IOException IOe) /捕获文件写入异常 System.out.println(can not write object); /end paintboard课程设计总结作为一名计算机科学与技术专业的的学生,我觉得能做类似的课程设计是十分有意义,而且是十分必要的。在已度过的大三的时间里我们大多数接触的是专业基础课。我们在课堂上掌握的仅仅是专业基础课的理论面,如何去锻炼我们的实践能力?如何把我们所学到的专业基础理论知识用到实践中去呢?我想做类似的大作业就为我们提供了良好的实践平台。在做本次课程设计的过程中,我感触最深的当数查阅大量的书籍了。为了让自己的设计更加完善,更加符合软件工程标准,一次次翻阅各种参考资料是十分必要的,同时也是必不可少的。作为一名专业学生掌握一门或几门程序设计语言是必不可少的,由于本次课程设计要求用java进行开发,在这过程中我对各种的开发环境进行了探索并且在学习的过程中带着问题去学我发现效率很好,记得大一学c语言好难就是因为我们没有把自己放在使用者的角度,单单是为了学而学,这样效率当然不会高。边学边用这样才会提高效率,这是我作本次课程设计的又一个收获。但是由于本人水平有限,难免会有错误,还望老师批评指正。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号