欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    Java课程设计报告原代码图片查看器图片进行放大缩小左旋右旋另存彻底删除.doc

    • 资源ID:5038236       资源大小:409.01KB        全文页数:21页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Java课程设计报告原代码图片查看器图片进行放大缩小左旋右旋另存彻底删除.doc

    湖南商学院面向对象程序设计课程设计报告题目 图片查看器 姓 名:蒋颖颖学 号:070920101专 业:计算机科学与技术班 级:计科0703指导教师:杭 志职 称:讲 师计算机与电子工程学院2009年6月课程设计评审表姓 名蒋颖颖学 院计算机与电子工程学院学 号070920101专业班级计科0703题 目图片查看器评审意见评审成绩指导教师签名职称评审时间 年 月 日目 录1、课程设计概述42、系统功能描述43、系统需求分析与设计43.1 系统需求分析43.2 系统设计43.2.1 系统总体设计43.2.2 程序详细设计54、系统测试和使用说明84.1 系统测试84.2 系统使用说明105、课程设计总结105.1 遇到的问题和解决方法105.2 心得体会10参考文献10附录11图片查看器1、课程设计概述为提高学生理论与实践相结合的能力,计电学院于2009年6月开展了为期两周的面向对象课程设计,针对对象为07级全体计科专业学生。本次实践教学采用学生集中在学校网络机房上机,指导老师指导的形式。要求学生用所学的面向对象程序设计语言JAVA来编写程序,实现特定功能,以加深对面向对象程序设计这个概念的理解。2、系统功能描述本次设计的图片查看器实现了在用户选定的文件目录下循环浏览指定后缀的图片文件,并且可以对选择的图片进行放大,缩小,左旋,右旋,另存,彻底删除等操作。3、系统需求分析与设计3.1 系统需求分析随着数字产品渐进人们的生活,网络通信技术、图像处理技术以及多媒体技术的发展,越来越多的用户希望能够对已有的数字图片进行查看并能够实现简单的操作。本图片查看器以其简洁明了易操作的特点实现图片查看的基本功能,从而也就满足了用户的基本要求。3.2 系统设计3.2.1 系统总体设计(1)系统功能分析本系统要用到以下的Java编程技术实现的功能:图像显示功能:客户需要显示图片,这将由图像显示功能来完成。显示图片的时候,用到了双缓冲技术来消除闪烁问题。(2)类图系统中用到了一些基本类、实现了一些接口。系统所用到的类如图1所示:PicViewerActionListenerJpanelJLabelJButtonImageBufferedImageGraphics2DStringJfilechooseAppletJava.awt.*Javax.swing.*Java.io.*Java.applet.*extendsimplementimport图1 系统类图3.2.2 程序详细设计(1)程序中引用的类JPanel类程序中定义了三个Jpanel类分别是:pathBar, picContainer, ctrBar。用于图片查看器的整体布局。其中pathBar为顶部路径栏,picContainer为图片显示区域,ctrBar为底部控制栏。JLabel类程序中定义了类名为pathInfo的JLabel类,用于实现顶部路径栏,底部控制栏按钮的文字显示。JButton类程序中定义了多个JButton类:openbtn, prebtn, nextbtn, zoominbtn, zoomoutbtn, oripicbtn, angleleftbtn, anglerightbtn,exitbtn,deletebtn,sav;为查看器的按钮。Image 类程序中定义了名为pic的Image类用于对被查看的图片的操作。BufferedImage 类此类为用于显示的缓冲区图像。在对图像进行操作前,都先将图片读进预设的缓冲区,然后再显示在用户前端,这样虽然速度慢了点,但很好的消除了图片闪烁效果。Graphics2D 类此类与上面的BufferedImage类共同作用,通过运用双缓冲技术很好的消除屏闪问题。String类程序中运用了三个不同的String类,从而实现了需要查看的图片的路径的操作,并且在启动图片查看器时,图片的路径能够在路径栏显示出来。同时还设置了String 数组用于存储用户选定的目录下所有指定格式的图片,这样可以实现循环浏览图片等操作。(2)程序的构造方法及其实现因为图片查看器可以实现对图片不同的操作,程序中构造了十多个方法以达到其目的。各构造方法相互联系共同完成图片查看器的各项功能。各个方法描述如下:public void init()本方法实现了对图片查看器的界面的整体布局及按钮的初始化。对页面的总体布局采用了以下主要代码进行实现:setLayout(new BorderLayout();add(pathBar, BorderLayout.NORTH); add(picContainer, BorderLayout.CENTER); add(ctrBar, BorderLayout.SOUTH); resize(640, 400);设置顶部路径栏,及其文字显示;代码如pathBar = new JPanel();pathBar.setLayout(new BorderLayout();pathInfo.setText("图片查看器"); pathBar.add(pathInfo);同时对图片显示区域,底部的控制栏的设置也运用了相似的代码进行实现,在此就不再重复。各按钮除了“打开”一按钮外,其他的各按钮均设置为false。这是因为只有“打开”图片后才能进行以下的像循环浏览,旋转,删除等操作。具体方法的实现见附件。public void actionPerformed(ActionEvent)在本方法中主要实现了用户对底部控制栏各按钮的点击后,图片查看器进行的相对应的操作反应。方法中一开始用JButton click = (JButton) e.getSource();获取按键源,然后根据click与程序设定的已知的类进行比较决定进行相应的反应。if(click = openbtn);if(click = prebtn && pic != null);等一系列进行判断后,进行或是打开文件open()方法的调用;或是pre()方法的调用;其他各操作也大同小异,在此就不再赘述。方法的详细代码见附件。public void open()该方法实现了对用户选定的文件路径下的后缀为.jpg的图片文件的打开操作。同时能够对该路径下的一切符合条件的文件进行跟踪处理。方法中的核心在于一个过滤操作:FileNameExtensionFilter filter = new FileNameExtensionFilter("*.JPG", "jpg");这样就能实现.jpg文件的浏览了。在选定了图片后,相应的按钮值应该被赋值为ture,以便进行其他的操作。若没有选定图片则显示“没有选择图片”。public void save() throws IOException该方法是为了满足用户希望对图片进行另外存储的操作,通过用户自己的选择重新选定图片的存储路径。详细实现见附件中代码。 public void pre()及public void next()Pre与next方法实现了对当前图片的上一张下一张的浏览。因为在第一次打开文件时就将该路径下所有符合要求的图片存储在String pics中。通过if(i = 0) i = pics.length-1; else i -;其中i为当前的图片位置数。通过dir = path + "" + picsi;获得文件的路径,然后调用loadImage(dir);此方法将在后面介绍;与上面的方法相对应的是此方法实现了对当前图片下一张的浏览,实现原理与上相同,if(i = pics.length-1) i = 0; else i+;通过调用loadImage(dir);一方法实现。public void picTrans()如果bufImage为空则直接返回,之后进行过滤图像操作,2D仿射变换,设置仿射变换的比例因子transform.setToScale(scaleX, scaleY); 创建仿射变换操作对象,过滤图像,将目标图像存在filteredBufImage中,然后显示。public void zoomin()此方法实现了对当前的图片进行按设置比例缩小操作。在进行缩小操作前,先对图片的大小进行判断,看是否已经缩小到最小,若最小则显示提示信息“已经缩至最小!”;否则进行缩小操作。在此过程中调用了picTrans()方法,以及repaint(); 重绘组件的方法。public void oripic()及public void delete()方法实现了将放大或缩小后的图片大小还原的操作。同时也调用了picTrans()方法,以及repaint(); 重绘组件的方法。具体的picTrans()方法将在下面详细描述。此方法具体实现见附件;public void delete()方法将图片彻底删除,删除后图片彻底被粉碎,回收站里面都不能找到。因此要慎用此按钮。public void angleleft() 及public void angleright()方法每次对图片进行45°的向左向右的旋转操作。radius += -Math.PI / 2;用以控制,而这些操作后,每次都应oripicbtn.setEnabled(true),也就是要将还原按钮赋值为真。public void loadImage(String fileName) 及public void exit()前一个方法通过增加图像到加载器中,创建原始缓冲区图像,创建bufImage的图形环境:bufImageG = bufImage.createGraphics();传输源图像数据到缓冲区图像中一些列的操作,对图片进行了加载操作;public void exit()方法是退出查看器的方法。 4、系统测试和使用说明4.1 系统测试使用eclipse运行程序时,会出现applet小程序的界面。并显示程序已启动。显示如图2: 图2 程序开始时的界面单击“打开”按钮后的效果图如图3:图3 选择图片文件多次单击“缩小”按钮后的效果图如图4:图4 图片缩小显示多次单击放大按钮后的效果图如图5所示:图5 图片放大显示4.2 系统使用说明由于本人的能力有限在制作此图片查看器时有许多没能完善的地方,因此客户在使用时应注意慎用删除与保存按钮,另外其他的操作只要单击按钮则行。特别值得注意原始按钮只有在对图片已经进行了放大或缩小的操作后其才是有效的。5、课程设计总结5.1 遇到的问题和解决方法在用JAVA编写程序时,我遇到了很多困难,对很多的接口,类,方法都不是很熟悉,只好采用查看API文档,一个一个进行对照学习,同时也上网查看了有关图片查看器的相关描述,还向同学请教了,翻阅了相关的书籍。尤其是因为有些方法需要使用JDK1.6才行,所以在学校网络机房一开始不能运行,在安装了1.6版本后运行正常了。另外文件在打开时会有严重的频闪问题,在重写了public void update(Graphics g) this.paint(g);后解决了。5.2 心得体会在这次的面向对象程序设计课程设计中,我进一步熟悉了上一学期学习的JAVA语言中的包,类,方法:导入哪些包,继承哪些类可以实现什么方法等。深刻感受到了面向对象语言中类库的强大功能。但是由于自己掌握的知识有限,图片查看器的功能没有做到尽善尽美,尤其是删除操作,删除掉以后就没了,在回收站也找不到。还有就是单击“保存”按钮后似乎就不能进行其他操作,但这样的情况或有或无。通过这次的课程设计,我懂得了要充分利用网络资源查找资料同时要多向同学请教,大家互相讨论进步得会很快。通过近两周多的努力,这次课程设计圆满的结束了,在这个过程中,我收获了很多的知识,同时也非常感谢杭志老师帮助与指导。在以后的学习中,我会更加努力的学好专业知识,并将所学知识用于实践当中去,以便牢固掌握知识。参考文献1 孙一林 彭波,Java网络编程实例:清华大学出版社,20032 袁然 郑自国,java 案例开发集锦:电子工业出版社,20053 耿祥义,黑魔方Java基础教程:清华大学出版社,20044 Robert C.Martin 著,黄晓春译.UML FOR JAVA PROGRAMMERS.清华大学出版社,2004附录import java.awt.*;import java.awt.event.*;import java.awt.geom.*;import java.awt.image.*;import javax.swing.*;import javax.swing.filechooser.*;import java.io.*;import java.applet.*;public class PicViewer extends Applet implements ActionListener JPanel pathBar, picContainer, ctrBar;JLabel pathInfo;JButton openbtn, prebtn, nextbtn, zoominbtn, zoomoutbtn, oripicbtn, angleleftbtn,anglerightbtn, exitbtn,deletebtn,savebtn;Image pic; / 查看的图片BufferedImage bufImage; /用于显示的缓冲区图像BufferedImage oriBufImage; /原始缓冲区图像Graphics2D bufImageG; /缓冲区图像的图形环境String path, filename, dir; / 需要查看图片的路径String pics; / 目录下所有指定格式的图片int picWidth, picHeight; / 图片大小 int i = 0;final double ZOOM_PERCENT = 0.15; / 每次放大和缩小的倍率final String FILE_TYPE = ".jpg"boolean hasPic, isangled;double scaleX; /图像水平方向的缩放因子double scaleY; /图像竖直方向的缩放因子double radius; / 旋转角度Filter filterJpg;public void init() / 顶部路径栏pathBar = new JPanel();pathBar.setLayout(new BorderLayout();pathInfo = new JLabel();pathInfo.setText("图片查看器");pathBar.add(pathInfo);/ 图片显示区域picContainer = new JPanel();picContainer.setBackground(Color.LIGHT_GRAY);/ 底部控制栏ctrBar = new JPanel();openbtn = new JButton("打开");openbtn.addActionListener(this);savebtn = new JButton("保存");savebtn.addActionListener(this);prebtn = new JButton("上一幅");prebtn.addActionListener(this);nextbtn = new JButton("下一幅");nextbtn.addActionListener(this);zoominbtn = new JButton("放大");zoominbtn.addActionListener(this);zoomoutbtn = new JButton("缩小");zoomoutbtn.addActionListener(this);oripicbtn = new JButton("原始");oripicbtn.addActionListener(this);angleleftbtn = new JButton("左旋");angleleftbtn.addActionListener(this);anglerightbtn = new JButton("右旋");anglerightbtn.addActionListener(this);deletebtn = new JButton("删除");deletebtn.addActionListener(this);exitbtn = new JButton("退出");exitbtn.addActionListener(this);ctrBar.add(openbtn);ctrBar.add(zoominbtn);ctrBar.add(zoomoutbtn);ctrBar.add(oripicbtn);ctrBar.add(prebtn);ctrBar.add(nextbtn);ctrBar.add(angleleftbtn);ctrBar.add(anglerightbtn);ctrBar.add(deletebtn);ctrBar.add(savebtn);ctrBar.add(exitbtn);/ 界面总布局setLayout(new BorderLayout();add(pathBar, BorderLayout.NORTH);add(picContainer, BorderLayout.CENTER);add(ctrBar, BorderLayout.SOUTH);resize(640, 480);scaleX = 1.0;scaleY = 1.0;radius = 0.0;hasPic = false;isangled = false;dir = ""prebtn.setEnabled(false);nextbtn.setEnabled(false);zoominbtn.setEnabled(false);zoomoutbtn.setEnabled(false);angleleftbtn.setEnabled(false);anglerightbtn.setEnabled(false);oripicbtn.setEnabled(false);deletebtn.setEnabled(false);savebtn.setEnabled(false);public void actionPerformed(ActionEvent e) JButton click = (JButton) e.getSource(); / 获取按键源if(click = openbtn) open();if(click = prebtn && pic != null) pre();if(click = nextbtn && pic != null) next();if(click = zoominbtn && pic != null) pathInfo.setForeground(Color.BLACK);pathInfo.setText("放大图片.");zoomin();if(click = zoomoutbtn && pic != null) pathInfo.setForeground(Color.BLACK);pathInfo.setText("缩小图片.");zoomout();if(click = oripicbtn && pic != null) oripic();if(click = angleleftbtn && pic != null) angleleft();if(click = anglerightbtn && pic != null) angleright();if(click = exitbtn) exit();if(click = deletebtn && pic != null)pathInfo.setForeground(Color.BLACK);pathInfo.setText("删除图片");delete();if(click = savebtn && pic != null)pathInfo.setForeground(Color.BLACK);pathInfo.setText("复制图片");trysave();catch(Exception ee)/ line1,打开需要查看的图片文件public void open() JButton msg = new JButton();JFileChooser chooser = new JFileChooser();/ 只显示文件夹和jpg格式的文件FileNameExtensionFilter filter = new FileNameExtensionFilter("*.JPG", "jpg");/建立过滤器,只显示jpg chooser.setFileFilter(filter); chooser.setCurrentDirectory(new File(""); int returnVal = chooser.showOpenDialog(msg); / 根据返回值判断是否选择了文件 if(returnVal = JFileChooser.APPROVE_OPTION) / 获取文件名 filename = chooser.getSelectedFile().getName();/ 获取文件路径 path = chooser.getCurrentDirectory().getPath(); / 获取文件路径下所有jpg文件filterJpg = new Filter(FILE_TYPE);File file = new File(path);pics = file.list();pics = file.list(filterJpg);/跟踪选中的图片for(int j=0;j<pics.length;j+) if(picsj.equalsIgnoreCase(filename)i=j;break; dir = path + "" + filename;hasPic = true;loadImage(dir);pathInfo.setForeground(Color.BLACK);pathInfo.setText(path + "" + filename);prebtn.setEnabled(true);nextbtn.setEnabled(true);zoominbtn.setEnabled(true);zoomoutbtn.setEnabled(true);angleleftbtn.setEnabled(true);anglerightbtn.setEnabled(true);deletebtn.setEnabled(true);savebtn.setEnabled(true); else hasPic = false; pathInfo.setForeground(Color.RED); pathInfo.setText("没有选择文件!"); /保存文件public void save() throws IOException JButton msgsave = new JButton();JFileChooser chooser = new JFileChooser();/ 只显示文件夹和jpg格式的文件FileNameExtensionFilter filter = new FileNameExtensionFilter( "*.JPG", "jpg");/建立过滤器,只显示jpg chooser.setFileFilter(filter); File fin = new File(path + "" + picsi); File f = new File("" + "" + picsi); chooser.setSelectedFile(f); int returnVal = chooser.showSaveDialog(msgsave); / 根据返回值判断是否选择了文件路径 if(returnVal = JFileChooser.APPROVE_OPTION) / 获取文件路径 path = chooser.getCurrentDirectory().getPath();File fileout = new File(path + "" + chooser.getSelectedFile().getName();FileInputStream isr = new FileInputStream(fin);FileOutputStream fout = new FileOutputStream(fileout);byte b = new byte200;int count = 0;while(count = isr.read(b, 0, 200)!=-1)fout.write(b,0,count);isr.close();fout.flush();fout.close(); / line2,查看上一幅图片public void pre() / 循环浏览图片if(i = 0) i = pics.length-1; else i -;dir = path + "" + picsi;pathInfo.setText(dir);hasPic = true;isangled = false;scaleX = 1.0;scaleY = 1.0;loadImage(dir);oripicbtn.setEnabled(false);/ line3,查看下一幅图片public void next() if(i = pics.length-1) i = 0; else i +;dir = path + "" + picsi;pathInfo.setText(dir);hasPic = true;isangled = false;scaleX = 1.0;scaleY = 1.0;loadImage(dir);oripicbtn.setEnabled(false);/ line4,放大图片public void zoomin() if(scaleX <1.7) scaleX += ZOOM_PERCENT;scaleY += ZOOM_PERCENT; else scaleX = 1.8;scaleY = 1.8;pathInfo.setForeground(Color.RED); pathInfo.setText("已经放到最大!");hasPic = true;picTrans();repaint(); /重绘组件pathInfo.setForeground(Color.BLACK); pathInfo.setText(dir); if(scaleX = 1) oripicbtn.setEnabled(false); elseoripicbtn.setEnabled(true);/ line5,缩小图片public void zoomout() if(scaleX >0.8 ) scaleX -= ZOOM_PERCENT;scaleY -= ZOOM_PERCENT; else scaleX = 0.2;scaleY = 0.2;pathInfo.setForeground(Color.RED); pathInfo.setText("已经缩至最小!");hasPic = true;picTrans();repaint(); /重绘组件pathInfo.setForeground(Color.BLACK); pathInfo.setText(dir);if(scaleX = 1) oripicbtn.setEnabled(false); elseoripicbtn.setEnabled(true);/ line6,回复图片原始状态public void oripic() scaleX = 1;scaleY = 1;radius = 0;hasPic = true;picTrans();repaint(); /重绘组件pathInfo.setForeground(Color.BLACK);pathInfo.setText(path + "" + filename);oripicbtn.setEnabled(false);/ line7,将图片逆时针旋转public void angleleft() isangled = true;radius += -Math.PI / 2; / 设置每次左旋45度角repaint();oripicbtn.setEnabled(true);/ line8,将图片顺时针旋转public void angleright() isangled = true;radius += Math.PI / 2; / 设置每次右旋45度角repaint();oripicbtn.setEnabled(true);/图片删除public void delete()File f = new File(path + "" + picsi);if(f.exists()f.delete();else pathInfo.setForeground(Color.BLACK);pathInfo.setText("文件不存在");for(int j=i;j<pics.length-1;j+)picsj=picsj+1;if(i=pics.length-1)i=0;dir = path + "" + picsi;loadImage(dir);/ line9,退出图片查看器public void exit() hasPic = false;System.exit(1);/ line10,加载图像public void loadImage(String fileName) pic = this.getToolkit().getImage(fileName); /取得图像MediaTracker mt = new MediaTracker(this); /实例化媒体加载器,跟踪多种媒体对象状态mt.addImage(pic, 0); /增加图像到加载器中p

    注意事项

    本文(Java课程设计报告原代码图片查看器图片进行放大缩小左旋右旋另存彻底删除.doc)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开