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

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

举报
开通vip

Java课程设计报告++原代码++图片查看器+++图片进行放大,缩小,左旋,右旋,另存,彻底删除湖南商学院 湖南商学院 《面向对象程序设计》课程设计报告 题 目 图片查看器 姓 名: 蒋颖颖 学 号: 070920101 专 业​​​​​​​​​​​​​​​​​​​: 计算机科学与技术 班 级: 计科0703 指导教师: 杭 志 职 称​​​​​​​​​​​​​​​​​​​: 讲 师 计算机与电子工程学院 2009年6月 课程设计评审表 姓 名 蒋颖颖 学 院 计算机与电子工程学院 学 号 070920101 专业班级 计科0703 题 目 图片查看器 评 审 意 见 评审成绩 指导教师签名 职称 评审时间 ...

Java课程设计报告++原代码++图片查看器+++图片进行放大,缩小,左旋,右旋,另存,彻底删除
湖南商学院 湖南商学院 《面向对象程序设计》课程设计报告 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题  目 图片查看器 姓 名: 蒋颖颖 学 号: 070920101 专 业​​​​​​​​​​​​​​​​​​​: 计算机科学与技术 班 级: 计科0703 指导教师: 杭 志 职 称​​​​​​​​​​​​​​​​​​​: 讲 师 计算机与电子工程学院 2009年6月 课程设计 评审表 产品要求评审表下载开题评审表下载新食品供应商评审表免费下载高级工程师评审表网盘下载专业技术资格评审表 姓 名 蒋颖颖 学 院 计算机与电子工程学院 学 号 070920101 专业班级 计科0703 题 目 图片查看器 评 审 意 见 评审成绩 指导教师签名 职称 评审时间 年 月 日 目 录 TOC \o "1-3" \h \z \u 1、课程设计概述 4 2、系统功能描述 4 3、系统需求分析与设计 4 3.1 系统需求分析 4 3.2 系统设计 4 3.2.1 系统总体设计 4 3.2.2 程序详细设计 5 4、系统测试和使用 说明 关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书 8 4.1 系统测试 8 4.2 系统使用说明 10 5、课程设计总结 10 5.1 遇到的问题和解决 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 10 5.2 心得体会 决胜全面小康心得体会学党史心得下载党史学习心得下载军训心得免费下载党史学习心得下载 10 参考文献 10 附录 11 图片查看器 1、课程设计概述 为提高学生理论与实践相结合的能力,计电学院于2009年6月开展了为期两周的面向对象课程设计,针对对象为07级全体计科专业学生。本次实践教学采用学生集中在学校网络机房上机,指导老师指导的形式。要求学生用所学的面向对象程序设计语言——JAVA来编写程序,实现特定功能,以加深对面向对象程序设计这个概念的理解。 2、系统功能描述 本次设计的图片查看器实现了在用户选定的文件目录下循环浏览指定后缀的图片文件,并且可以对选择的图片进行放大,缩小,左旋,右旋,另存,彻底删除等操作。 3、系统需求分析与设计 3.1 系统需求分析 随着数字产品渐进人们的生活,网络通信技术、图像处理技术以及多媒体技术的发展,越来越多的用户希望能够对已有的数字图片进行查看并能够实现简单的操作。本图片查看器以其简洁明了易操作的特点实现图片查看的基本功能,从而也就满足了用户的基本要求。 3.2 系统设计 3.2.1 系统总体设计 (1)系统功能分析 本系统要用到以下的Java编程技术实现的功能: 图像显示功能:客户需要显示图片,这将由图像显示功能来完成。显示图片的时候,用到了双缓冲技术来消除闪烁问题。 (2)类图 系统中用到了一些基本类、实现了一些接口。系统所用到的类如图1所示: 图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 + "\\" + pics[i];获得文件的路径,然后调用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网络编程实例:清华大学出版社,2003 [2] 袁然 郑自国,java 案例开发集锦:电子工业出版社,2005 [3] 耿祥义,黑魔方Java基础教程:清华大学出版社,2004 [4] 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("复制图片"); try { save(); }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;j0.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); } else{ oripicbtn.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 + "\\" + pics[i]); if(f.exists()) f.delete(); else { pathInfo.setForeground(Color.BLACK); pathInfo.setText("文件不存在"); } for(int j=i;j
本文档为【Java课程设计报告++原代码++图片查看器+++图片进行放大,缩小,左旋,右旋,另存,彻底删除】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_788906
暂无简介~
格式:doc
大小:409KB
软件:Word
页数:21
分类:互联网
上传时间:2011-09-09
浏览量:112