JAVA画图板程序实验报告(附完整代码)分析.pdf

上传人:ylj18****41534 文档编号:73129616 上传时间:2023-02-15 格式:PDF 页数:15 大小:1.34MB
返回 下载 相关 举报
JAVA画图板程序实验报告(附完整代码)分析.pdf_第1页
第1页 / 共15页
JAVA画图板程序实验报告(附完整代码)分析.pdf_第2页
第2页 / 共15页
点击查看更多>>
资源描述

《JAVA画图板程序实验报告(附完整代码)分析.pdf》由会员分享,可在线阅读,更多相关《JAVA画图板程序实验报告(附完整代码)分析.pdf(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 1 画板程序 一、软件系统分析和设计方案 1、功能需求分析 设计类似于 Windows 画板的程序,程序可以通过功能菜单(或工具条)进行功能选择操作,在画板中可以用鼠标操作绘制不同颜色的点,直线,多边形和椭圆,可以保存和打开自定义的图形文件。2、结构设计过程 经过对需求的分析,我们设计的画图板界面主要包括菜单栏、工具栏、画板三个部分。菜单栏包含文件、编辑、帮助等常见功能菜单,实现打开保存文件等功能;工具栏主要包括画笔、矩形、椭圆、直线、刷子、橡皮、文字、颜色等工具,可完成一些基本操作;画板能够编辑处理图片及文字。而代码实现上采用面向对象的思想,将上述组件封装与一个画板类中布局并实现功能;通过

2、一个窗框类实现画板对象;最后在主类中建立窗框对象。思路如下图:二、软件实现和代码编写 具体代码及详细注释如下:import java.awt.*;import java.awt.event.*;import java.awt.geom.*;import javax.swing.*;import javax.swing.UIManager.*;import java.io.*;import java.util.Vector;2 /主类建立窗框 public class DrawPad public static void main(String args)try/优化UI效果 for(LookA

3、ndFeelInfo info:UIManager.getInstalledLookAndFeels()if(Nimbus.equals(info.getName()UIManager.setLookAndFeel(info.getClassName();break;catch(Exception e)System.out.println(e);new DrawFrame();/添加窗口和画板组件 class DrawFrame extends JFrame public DrawFrame()DrawPanel panel=new DrawPanel();add(panel);setTitl

4、e(简单JAVA画板);setBounds(100,100,800,600);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/定义绘画点的基本属性 class position implements Serializable int x;int y;int type;String s;Color color;/定义画板组件 class DrawPanel extends JPanel implements ActionListener,MouseListener,MouseMotionListener JMenu

5、Bar mb;/菜单栏 JMenu menu1,menu2,menu3;JMenuItem i1,i2,i3,i4;JPanel jp1;/工具栏 public JButton anj0,anj1,anj2,anj3,anj4,anj5,anj6,anj7,anj8,anj9,anj10;JLabel l1,lcolor;Vector thedraw=new Vector();/保存画图轨迹的数组 int style=0;/保存画图类型,默认为画笔 int x1=0;/保存点的坐标 int x2=0;int y1=0;int y2=0;String input=;/默认输入文字内容 Color

6、 linecolor=Color.BLACK;/默认线的颜色 3 public DrawPanel()setBackground(Color.WHITE);setLayout(new BorderLayout();setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR);/上部菜单栏 mb=new JMenuBar();mb.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);add(mb,BorderLayout.NORTH);/加入菜单栏的组件 menu1=

7、new JMenu(文件 );menu2=new JMenu(编辑 );menu3=new JMenu(帮助 );i1=new JMenuItem(打开 ,new ImageIcon(img/open.png);i2=new JMenuItem(保存 ,new ImageIcon(img/save.png);i3=new JMenuItem(清空 ,new ImageIcon(img/clear.png);i4=new JMenuItem(关于简单JAVA画板 ,new ImageIcon(img/about.png);menu1.add(i1);menu1.addSeparator();me

8、nu1.add(i2);menu2.add(i3);menu3.add(i4);mb.add(menu1);mb.add(menu2);mb.add(menu3);add(mb,BorderLayout.NORTH);/侧边工具栏 jp1=new JPanel();jp1.setBackground(Color.LIGHT_GRAY);jp1.setLayout(new BoxLayout(jp1,BoxLayout.Y_AXIS);jp1.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);add(jp1,BorderLay

9、out.WEST);/加入工具栏的组件 anj0=new JButton(画笔,new ImageIcon(img/pen.png);anj1=new JButton(刷子,new ImageIcon(img/brush.png);anj2=new JButton(橡皮,new ImageIcon(img/erease.png);anj3=new JButton(文字,new ImageIcon(img/word.png);anj4=new JButton(直线,new ImageIcon(img/sline.png);anj5=new JButton(矩形,new ImageIcon(img

10、/rec.png);anj6=new JButton(圆矩,new ImageIcon(img/frec.png);anj7=new JButton(椭圆,new ImageIcon(img/eli.png);anj10=new JButton();lcolor=new JLabel();/会变色的方块 l1=new JLabel(颜色);anj10.add(lcolor);anj10.add(l1);jp1.add(anj0);jp1.add(anj1);jp1.add(anj2);jp1.add(anj3);jp1.add(anj4);jp1.add(anj5);4 jp1.add(anj

11、6);jp1.add(anj7);jp1.add(anj10);/事件处理 i1.addActionListener(this);i2.addActionListener(this);i3.addActionListener(this);i4.addActionListener(this);anj0.addActionListener(this);anj1.addActionListener(this);anj2.addActionListener(this);anj3.addActionListener(this);anj4.addActionListener(this);anj5.addA

12、ctionListener(this);anj6.addActionListener(this);anj7.addActionListener(this);anj10.addActionListener(this);addMouseListener(this);addMouseMotionListener(this);/记录鼠标选择的功能 public void actionPerformed(ActionEvent e)if(e.getSource()=anj0)style=0;else if(e.getSource()=anj1)style=1;else if(e.getSource()=

13、anj2)style=2;else if(e.getSource()=anj3)style=3;input=JOptionPane.showInputDialog(输入文字后在画板上点击放置);else if(e.getSource()=anj4)style=4;else if(e.getSource()=anj5)style=5;else if(e.getSource()=anj6)style=6;else if(e.getSource()=anj7)style=7;else if(e.getSource()=anj10)linecolor=JColorChooser.showDialog(

14、null,请选择颜色,Color.BLACK);lcolor.setForeground(linecolor);else if(e.getActionCommand().equals(关于简单JAVA画板 )JOptionPane.showMessageDialog(null,这是一个简单的JAVA画板。n开发者:B13070630n2014年12月于南邮,关于,JOptionPane.INFORMATION_MESSAGE);else if(e.getActionCommand().equals(清空 )thedraw.removeAllElements();else if(e.getAct

15、ionCommand().equals(保存 )JFileChooser sfc=new JFileChooser();int flag=-1;/显示保存文件的对话框 try flag=sfc.showSaveDialog(this);catch(HeadlessException he)System.out.println(Save File Dialog Exception!);5 /获取选择文件的路径 if(flag=JFileChooser.APPROVE_OPTION)String filename=sfc.getSelectedFile().getPath();try FileOu

16、tputStream fos=new FileOutputStream(filename);ObjectOutputStream oos=new ObjectOutputStream(fos);oos.writeObject(thedraw);oos.close();catch(Exception es)System.out.println(es);else if(e.getActionCommand().equals(打开 )JFileChooser ofc=new JFileChooser();int flag=-1;try flag=ofc.showOpenDialog(this);ca

17、tch(HeadlessException he)System.out.println(Save File Dialog Exception!);/获取选择文件的路径 if(flag=JFileChooser.APPROVE_OPTION)String filename=ofc.getSelectedFile().getPath();try FileInputStream fis=new FileInputStream(filename);ObjectInputStream ois=new ObjectInputStream(fis);thedraw=(Vector)ois.readObjec

18、t();ois.close();catch(Exception es)System.out.println(es);repaint();/刷新画板 /paintComponent方法调用绘制方法使在容器内绘制而不超出容器 public void paintComponent(Graphics g)super.paintComponent(g);draw(Graphics2D)g);/从数组中取出一个点后画图 public void draw(Graphics2D g)int n=thedraw.size();position p;for(int i=0;i n;i+)try p=thedraw

19、.get(i);if(p.type=0)/画笔 x1=x2=p.x;y1=y2=p.y;while(p.type=0)x2=p.x;y2=p.y;Line2D t=new Line2D.Double(x1,y1,x2,y2);g.setColor(p.color);g.draw(t);/递归画图 6 i+;if(i=n)i-;break;p=thedraw.get(i);x1=x2;y1=y2;if(p.type=1)/刷子 while(p.type=1)g.setColor(p.color);g.drawString(,p.x,p.y);/采用字符使点变大 i+;if(i=n)i-;brea

20、k;p=thedraw.get(i);if(p.type=2)/橡皮 while(p.type=2)g.setColor(Color.WHITE);g.drawString(,p.x,p.y);/采用字符使点变大 i+;if(i=n)i-;break;p=thedraw.get(i);if(p.type=3)/文字 while(p.type=3)g.setColor(p.color);g.drawString(p.s,p.x,p.y);/点状绘制实时字符 i+;if(i=n)i-;break;p=thedraw.get(i);if(p.type=4)/直线 x1=p.x;y1=p.y;i+;p

21、=thedraw.get(i);x2=p.x;y2=p.y;if(p.type=4)/不存在翻转问题,故不用交换坐标 Line2D t=new Line2D.Double(x1,y1,x2,y2);g.setColor(p.color);g.draw(t);thedraw.remove(i);else if(p.type=-1)7 Line2D t=new Line2D.Double(x1,y1,x2,y2);g.setColor(p.color);g.draw(t);else i-;if(p.type=5)/矩形 x1=p.x;y1=p.y;i+;p=thedraw.get(i);x2=p.

22、x;y2=p.y;if(x2 x1)/交换坐标使图形能上下左右翻转 int temp;temp=x1;x1=x2;x2=temp;if(y2 y1)int temp;temp=y1;y1=y2;y2=temp;if(p.type=5)/鼠标按下则动态变化 Rectangle2D t=new Rectangle2D.Double(x1,y1,x2-x1,y2-y1);g.setColor(p.color);g.draw(t);thedraw.remove(i);else if(p.type=-1)/鼠标松开则固定绘图 Rectangle2D t=new Rectangle2D.Double(x1

23、,y1,x2-x1,y2-y1);g.setColor(p.color);g.draw(t);else i-;if(p.type=6)/圆角矩形 x1=p.x;y1=p.y;i+;p=thedraw.get(i);x2=p.x;y2=p.y;if(x2 x1)int temp;temp=x1;x1=x2;x2=temp;if(y2 y1)int temp;temp=y1;y1=y2;y2=temp;if(p.type=6)8 RoundRectangle2D t=new RoundRectangle2D.Double(x1,y1,x2-x1,y2-y1,20,20);g.setColor(p.

24、color);g.draw(t);thedraw.remove(i);else if(p.type=-1)RoundRectangle2D t=new RoundRectangle2D.Double(x1,y1,x2-x1,y2-y1,20,20);g.setColor(p.color);g.draw(t);else i-;if(p.type=7)/椭圆 x1=p.x;y1=p.y;i+;p=thedraw.get(i);x2=p.x;y2=p.y;if(x2 x1)int temp;temp=x1;x1=x2;x2=temp;if(y2 y1)int temp;temp=y1;y1=y2;y

25、2=temp;if(p.type=7)Ellipse2D t=new Ellipse2D.Double(x1,y1,x2-x1,y2 -y1);g.setColor(p.color);g.draw(t);thedraw.remove(i);else if(p.type=-1)Ellipse2D t=new Ellipse2D.Double(x1,y1,x2-x1,y2 -y1);g.setColor(p.color);g.draw(t);else i-;catch(Exception e)System.out.println(e);public void mouseClicked(MouseE

26、vent e)public void mouseEntered(MouseEvent e)/鼠标按下记录画图轨迹 9 public void mousePressed(MouseEvent e)position p=new position();p.x=e.getX();p.y=e.getY();p.type=style;p.s=input;p.color=linecolor;thedraw.add(p);public void mouseExited(MouseEvent e)/鼠标松开则type=-1,停止画图,但仍记录轨迹 public void mouseReleased(MouseE

27、vent e)position p=new position();p.x=e.getX();p.y=e.getY();p.type=-1;p.s=input;p.color=linecolor;thedraw.add(p);repaint();public void mouseMoved(MouseEvent e)/鼠标拖动记录画图轨迹 public void mouseDragged(MouseEvent e)position p=new position();p.x=e.getX();p.y=e.getY();if(style=3)p.type=-1;/禁止文字拖动 else p.type

28、=style;p.s=input;p.color=linecolor;thedraw.add(p);repaint();三、算法分析 1、存储结构(class position)记录轨迹的实时状态 class position implements Serializable int x;/轨迹坐标 int y;int type;/画图类型 String s;/记录当前输入文字 Color color;/记录当前颜色 2、actionEvent 事件记录选择的功能 10 3、绘图核心代码 Line2D t=new Line2D.Double(x1,y1,x2,y2);/画笔 g.drawStri

29、ng(,p.x,p.y);/刷子 11 g.drawString(,p.x,p.y);/橡皮 g.drawString(p.s,p.x,p.y);/文字 Line2D t=new Line2D.Double(x1,y1,x2,y2);/直线 Rectangle2D t=new Rectangle2D.Double(x1,y1,x2-x1,y2-y1);/矩形 RoundRectangle2D t=new RoundRectangle2D.Double(x1,y1,x2-x1,y2-y1,20,20);/圆角矩形 Ellipse2D t=new Ellipse2D.Double(x1,y1,x2

30、-x1,y2-y1);/椭圆 g.setColor(p.color);g.draw(t);/递归画图 4、鼠标事件记录并决定是否展现画图轨迹 5、细节优化(1)import javax.swing.UIManager.*;优化 UI 效果(2)int style=0;画图类型初始为画笔 12(3)在 DrawPanel()里用setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR);使鼠标在画板内显示为十字;同时对菜单栏和工具栏用setCursor(Cursor.getPredefinedCursor(Cursor.DEFAUL

31、T_CURSOR);恢复默认鼠标(4)颜色工具按钮添加 lcolor=new JLabel();并且用lcolor.setForeground(linecolor);让获取显示当前颜色(5)paintComponent 方法调用绘制方法使在画板内绘制而不超出画板(6)刷子和橡皮用 drawString 方法绘制字符使绘制的点变大(7)当文字绘制时,在鼠标拖动事件中禁止拖动(8)功能选择完后 repaint();使刷新画板内容 四、软件调试和测试 1、用户界面:2、文字工具和颜色工具的使用:13 3、其他工具的使用:14 4、菜单和打开、保存文件:15 五、参考资料及文献 1 孙卫琴.Java 面向对象编程.电子工业出版社 2006 2 朱福喜.Java 语言程序设计(第二版).科学出版社 3 陈国君等.Java 程序设计基础(第二版).清华大学出版社 4 Deitel.Java 大学基础教程(第六版).电子工业出版社 5 MaryCampione.Java 语言导学(第四版).机械工业出版社 6 Y.Daniel Liang.Java 语言程序设计基础篇(第六版).机械工业出版社 7 Kathy Sierra.Head First Java(第二版).东南大学出版社

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁