JAVA图片浏览器课程设计报告.doc_第1页
JAVA图片浏览器课程设计报告.doc_第2页
JAVA图片浏览器课程设计报告.doc_第3页
JAVA图片浏览器课程设计报告.doc_第4页
JAVA图片浏览器课程设计报告.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

学 号200810165118课 程 设 计 报 告 课程名称 Java课程设计 题 目 实现图片浏览器功能的Java程序设计 学 部 专 业 班 级 姓 名 指导教师 2011年1月7日- 21 -Java课程设计任务书题目: 实现图片浏览器功能的Java程序设计1. 课程设计教学条件要求 JDK1.6+Eclipse/ NetBeans/ JBuilder+SQLServer2000/MySQL2. 课程设计任务实现一个图片浏览器,主要功能包括:可以打开一个对话框选择1个或多个文件进行浏览,浏览器中有用于放大、缩小图片的功能。要求使用Swing或SWT组件实现。3. 课程设计报告书主要内容1 需求分析系统开发思路和相关开发技术、方法的总体介绍2 概要设计 21 设计的总体思想与算法描述 22 模块结构图 23 各功能模块的功能与处理流程描述 24 界面设计3 详细设计各功能模块程序设计(按照功能模块的功能与处理流程描述给出详细的程序代码,并给出重点语句的注释.)4 小结4. 课程设计要求(1) 学生按时到课程设计指定地点签到,遵守课程设计纪律。(2) 学生独立完成课程设计任务。指导教师分时段验收学生完成的阶段任务。(3) 学生按时提交课程设计成果和打印的课程设计报告书。5课程设计参考资料1 叶核亚. Java2程序设计实用教程M(第二版). 北京:电子工业出版社,2008.4.2 辛运帏 .Java程序设计.北京:清华大学出版社M, 20043 张思民,梁维娜 .Java程序设计实践教程M.北京:清华大学出版社, 2006.84 朱福喜,路迟 .Java与面向对象程序设计M.北京:武汉大学出版社, 2007,105 美Echel,B .Java编程思想M(第三版).北京:机械工业出版社,2005撰写者:江伟 指导教师:江伟目录1 需求分析.11.1系统开发思路.1 1.1.1图片浏览器概述.1 1.1.2图片浏览器的功能特点.11.2系统开发相关开发技术.11.3方法的总体介绍.22 概要设计.3 2.1 设计的总体思想与算法描述.3 2.2模块结构图.3 2.3各功能模块的功能与处理流程描述.4 2.4界面设计.4 2.4.1各主要界面展示.。.4 2.4.2主要界面实现概述.73 详细设计.。.83.1模块程序设计.83.2重要代码展示.84 小结.16参考文献.191. 需求分析1.1系统开发思路1.1.1图片浏览器概述图片浏览器作为计算机使用者浏览各种格式图片的载体而存在,作为人们日使用计算机工作的一大可视化工具,图片浏览器正扮演着越来越重要的角色,我们日常生活中的任何格式的图片文件都必须通过图片浏览器才能进行浏览。随着各种类型图片浏览器的不断更新换代,其功能也日益强大和完善,逐渐成为计算机使用者生活中越来越不可缺少的一部分。1.1.2图片浏览器的功能特点图片浏览器一般都具有打开jpg、gif、png、tiff等格式图片文件并对图片文件夹中的图片进行顺序浏览的功能。一般的图片浏览器还有“上一页”、“下一页”的翻页功能和图片“放大”、“缩小”的浏览功能。功能比较强大的图片浏览器还有文件选择的功能,功能更强大一些的图片浏览器可以对未打开的图片文件进行缩放预览效果的实现。这次课程设计做的图片浏览器实现了上述的大部分功能,不过稳定性和精确度的问题还有待进一步完善。1.1.3开发背景及意义系统以图片浏览为中心,采用面向对象开发方法对图片浏览器内部组织结构、功能需求进行可行性分析,自顶向下逐层分解,主要分为系统分析、系统设计、系统实施、系统测试几个阶段。其中有对现有图片浏览器的功能特点分析,对人们使用图片浏览器的意见分析,对系统实施的可行性分析,对实现过程、数据流程的分析,对系统结构与功能的设计,对系统逻辑结构的设计、用户界面的设计等等。本系统主要提供了针对jpg、gif、png、tiff格式的图片进行浏览的功能,另外还实现了各种浏览图片的功能,如图片放大、缩小,上一页、下一页,文件打开等。 1.2系统开发相关开发技术 本系统主要用到了Swing、AWT等GUI技术进行控件设置和界面布局,使用了IO技术实现了文件选择的功能。1.3方法的总体介绍 本系统的主要方法是对控件的添加及对其属性的设置,文件选择也是主要方法之一,事件响应方法是所有方法的核心。2 概要设计2.1设计的总体思想及算法描述用一个类PicBrowseFrame实现总体框架的设计,定义菜单栏tempItem放置文件菜单File、编辑菜单Edit、帮助菜单help。File下设置“打开”、“退出”两个菜单项,Edit下设置“复制”、“移动”两个菜单项,help下设置“关于作者”一个菜单项。PicBrowseFrame下面放置upPage、downPage、big、small四个JButton分别用来实现“上一页”、“下一页”、“放大”“缩小”的功能。这四个按钮定义在FlieChooser这个类中,它们的方法也在这个类中得到实现。其中“上一页”的代码用“tag - = 1; ImageIcon ig=new ImageIcon(ParentPath+filestag);”进行实现,与之相应的“下一页”的代码用“tag + = 1; ImageIcon ig=new ImageIcon(ParentPath+filestag);”进行实现。图片放大和图片缩小分别调用“picUpScanle()”和“picDownScanle()”两个方法进行实现。文件选择主要用了“fileChooser.setCurrentDirectory(new File(.);”。2.2模块结构图系统总功能概述:打开jpg、gif、png、tiff格式图片文件,连续浏览图片。实现上一页、下一页、放大、缩小图片基本功能,可以复制图片,浏览主界面提供预览缩略图。JpgGifPngTiff图片文件夹上一页复制重要图片浏览打开功能模块提供帮助信息下一页放大图片缩小图片图21 用户功能模块图2.3各功能模块的功能与处理流程描述 打开:文件菜单下的一个菜单项,用来浏览文件,打开图片文件夹中的jpg、gif、png、tiff四种格式的图片。复制:这个功能是附加的,不难实现,其下面的移动并未被实现,移动后源文件没有被删除,所以两个菜单项的功能都是“复制”,复制时要选择保存路径和新的文件名及文件格式,严格说这个功能的实现是失败的。帮助:主要提供浏览器功能的相关信息,点击后会跳出一个frame,上面写着这些信息。上一页:按图片在目标文件夹中的排列顺序选择当前浏览图片的上一张图片。下一页:按图片在目标文件夹中的排列顺序选择当前浏览图片的下一张图片。放大:按照定义好的方法将原图片的width和height的size同时增大。缩小:按照定义好的方法将原图片的width和height的size同时缩小。2.4界面设计2.4.1各主要界面展示 系统初始化界面图22系统初始化界面文件选择界面图23文件选择界面图片选择界面图24图片选择界面图片浏览界面 图25图片浏览界面图片复制界面图26图片复制界面帮助界面图27帮助界面2.4.2主要界面实现概述初始化界面:首先在frame顶部设置菜单栏,用“frame.setJMenuBar(menuBar);”实现,然后用“JMenu File=new JMenu(文件);menuBar.add(File);”添加“文件”菜单,用类似的方式再添加“编辑”等菜单。用“tempItem=new JMenuItem(打开);tempItem.addActionListener(new LoadListener();File.add(tempItem);”添加“打开”菜单项,再用同样的方法添加其他菜单项。最后用icons方法用数组定义图片“page.jpg”,最后用“lab=new JLabel(icons0);”实现frame对“page.jpg”的调用,在初始化界面显示经PS处理过的图片。图片浏览界面:整个界面用BorderLayout进行布局,在center中添加“imgPane”容器,用来盛放浏览的图片。在frame的south中添加scanlePane,然后用scanlePane盛放四个Button,分别用来实现图片浏览器的四种主要功能。3详细设计3.1模块程序设计本系统共八个类,PicBrowseFrame是启动类,里面主要设置控件布局和各控件的监听器方法。ExitListener用来实现退出的功能,AboutListener用来实现帮助的功能,CopyListener用来实现复制的功能,UpListener用来实现上一页的功能,DownListener用来实现下一页的功能。FileChooser主要用来实现文件选择的功能,这各类里面除了定义了四个button外,还定义了图片预览的方法preViewMove,使用这个方法可以在frame的右下角同时预览五个小的略缩图。还定义了方法picUpScanle(),用来实现图片的放大;picDownScanle();用来实现图片的缩小。ImageFileView类主要用来指定和现实浏览图片文件的格式,ImageFilter类用来返回相关文件信息。ImagePreview用来实现预览文件的形式。imgVisible类主要用来实现图片的放大缩小和复制图片的功能。Utils类主要用来返回打开图片文件的相关信息。3.2重要代码展示主类PicBrowseFrameimport java.awt.*;import java.awt.event.*;import javax.swing.*;public class PicBrowseFrame extends javax.swing.JScrollPaneprivate static JFrame frame=new JFrame(图片浏览器信管:杨帆200810165118);/顶层容器public static JPanel conPane; /盛放4个buttonprivate static JMenuItem tempItem; /菜单栏public static JLabel lab;private static Icon icons;FileChooser FileCh=new FileChooser();public void showGUI()icons=new Iconnew ImageIcon(info/icons/page.jpg),new ImageIcon(info/icons/about.jpg),;frame.setResizable(false);conPane=(JPanel)frame.getContentPane();conPane.setLocation(200, 300);conPane.setLayout(new BorderLayout();JMenuBar menuBar=new JMenuBar();frame.setJMenuBar(menuBar);/文件菜单JMenu File=new JMenu(文件);menuBar.add(File);tempItem=new JMenuItem(打开);tempItem.addActionListener(new LoadListener();File.add(tempItem); tempItem=new JMenuItem(退出);tempItem.addActionListener(new ExitListener();File.add(tempItem);/文件菜单END/编辑菜单JMenu Edit=new JMenu(编辑);menuBar.add(Edit);tempItem=new JMenuItem(复制);tempItem.addActionListener(new CopyListener();Edit.add(tempItem);/HELPJMenu help=new JMenu(帮助);menuBar.add(help);tempItem=new JMenuItem(关于作品);tempItem.addActionListener(new AboutListener();help.add(tempItem);/END/显示图片JPanel imgPane=new JPanel();imgPane.setLayout(new BorderLayout();lab=new JLabel(icons0);imgPane.add(lab);conPane.add(imgPane,BorderLayout.CENTER);/ENDframe.setMinimumSize(new Dimension(1024,768);this.setSize(1024,768);Dimension frameSize=this.getSize();Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();frame.setLocation(screenSize.width-frameSize.width)/2,(screenSize.height-frameSize.height)/2); frame.setVisible(true); frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);public static void main(String args)new PicBrowseFrame().showGUI();/文件菜单的监听事件/Load Listenerclass LoadListener implements java.awt.event.ActionListenerpublic void actionPerformed(ActionEvent e)FileCh.FileChoosercr();/Exit Listenerclass ExitListener implements java.awt.event.ActionListenerpublic void actionPerformed(ActionEvent e)System.exit(0);/End/编辑菜单的监听事件class AboutListener implements java.awt.event.ActionListenerpublic void actionPerformed(ActionEvent e)JFrame f = new JFrame(关于作品);JLabel l =new JLabel(icons1);f.setMinimumSize(new Dimension(600,400);f.setSize(400,300);Dimension frameSize=f.getSize();Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();f.setLocation(screenSize.width-frameSize.width)/2,(screenSize.height-frameSize.height)/2);f.add(l);f.setSize(600,400);f.setVisible(true);class CopyListener implements java.awt.event.ActionListenerpublic void actionPerformed(ActionEvent e)JFileChooser saveFile=new JFileChooser();int result=saveFile.showSaveDialog(frame);String savePath=saveFile.getSelectedFile().getAbsolutePath();if(result=JFileChooser.APPROVE_OPTION)new imgVisible().PicCopy(FileChooser.filePath, savePath);elseclass UpListener implements java.awt.event.ActionListenerpublic void actionPerformed(ActionEvent e)FileCh.picUpScanle();/下一页的监听事件class DownListener implements java.awt.event.ActionListenerpublic void actionPerformed(ActionEvent e)FileCh.picDownScanle();/END文件选择类FileChooserimport java.awt.*;import java.awt.event.ActionEvent;import java.io.File;/import java.util.*;import javax.swing.*;/import javax.swing.JMenu;/import ScreenProtect.RunThread;public class FileChooser public static JFrame frame; /文件选择public static JPanel conPane; /盛放按钮public static JFileChooser fileChooser; /文件选择private JPanel scanlePane=new JPanel();private static String files;private static String ParentPath;private static String filename;/private static JLabel label1; 修改public static String filePath;/private int skip=0; 修改private static int tag=0;private JLabel label=new JLabel5;/private static Icon icons;/保存图片的大小private static int width=0;private static int heigth=0;private static ImageIcon ig;/FileChooser FileCh=new FileChooser();public void FileChoosercr() frame = new JFrame(文件选择);conPane = (JPanel) frame.getContentPane();conPane.setLayout(new BorderLayout();fileChooser = new JFileChooser();/添加FileFilterfileChooser.setFileFilter(new ImageFilter();/Accept file from file filter.fileChooser.addChoosableFileFilter(new ImageFilter(); fileChooser.setAcceptAllFileFilterUsed(true); /Add custom icons for file types. fileChooser.setFileView(new ImageFileView();/添加文件预览fileChooser.setAccessory(new ImagePreview(fileChooser);fileChooser.setCurrentDirectory(new File(.); /修改 *从当前的路径中进行选择/ fileChooser.addActionListener(new FileChooserListener();/ 选择 确定、取消按钮int returnVal = fileChooser.showOpenDialog(frame);if (returnVal = JFileChooser.APPROVE_OPTION) filename=fileChooser.getSelectedFile().getName();System.out.println(filename);filePath = fileChooser.getSelectedFile().getAbsolutePath();ig=new ImageIcon(filePath);width=ig.getIconWidth();heigth=ig.getIconHeight();PicBrowseFrame.lab.setIcon(ig);/获取文件的父路径ParentPath=fileChooser.getSelectedFile().getParent();files = fileChooser.getSelectedFile().getParentFile().list();/这里加入图片的缩小浏览,采用滚动条scanlePane.setBackground(new Color(16712);scanlePane.setBounds(0, 0, 800, 20);scanlePane.setLayout(new GridLayout(1,8,0,20);JButton downPage=new JButton(下一页);downPage.addActionListener(new DownPageListener();JButton upPage=new JButton(上一页);upPage.addActionListener(new UpPageListener();JButton big=new JButton(放大);big.addActionListener(new bigListener();JButton small=new JButton(缩小);small.addActionListener(new smallListener();scanlePane.add(upPage); /上一页scanlePane.add(downPage); /下一页scanlePane.add(big); /放大scanlePane.add(small); /缩小/scanlePane.add(upPage);preView(); /图片的缩小浏览/ENDif (returnVal = JFileChooser.CANCEL_OPTION) frame.dispose(); /布局/ end/获取文件的文件路径conPane.add(fileChooser);frame.pack();frame.setLocation(210, 230);frame.setVisible(true);frame.dispose();/这里加入图片的缩小浏览,采用滚动条private void preView()int length=tag+5;int j=0;for(int i=tag;ilength;i+)if(new FileNameFilter().acceptfile(filesi)tryImageIcon iconScanle=new ImageIcon(ParentPath+filesi);ImageIcon scaleIcon = new ImageIcon(new imgVisible().getScaledImage(iconScanle.getImage(),50,50,1);labelj=new JLabel(scaleIcon);scanlePane.add(labelj);j+;PicBrowseFrame.conPane.add(scanlePane,BorderLayout.SOUTH);catch(java.lang.NullPointerException e)else length+=1;/图片的缩小浏览的滚动private void preViewMove(int tag)int length=tag+5;int j=0;for(int i=tag;ilength;i+)if(new FileNameFilter().acceptfile(filesi)tryImageIcon iconScanle=new ImageIcon(ParentPath+filesi);ImageIcon scaleIcon = new ImageIcon(new imgVisible().getScaledImage(iconScanle.getImage(),50,50,1);labelj.setIcon(scaleIcon);scanlePane.add(labelj);j+;catch(java.lang.NullPointerException e)else length+=1;/放大图片private ImageIcon srcImg;public void picUpScanle()srcImg=new ImageIcon(filePath);width+=20;heigth+=20;ImageIcon scaleIcon = new ImageIcon(new imgVisible().getScaledImage(srcImg.getImage(),width,heigth,1);PicBrowseFrame.lab.setIcon(scaleIcon);/缩小图片public void picDownScanle()srcImg=new ImageIcon(filePath);width-=20;heigth-=20;ImageIcon scaleIcon = new ImageIcon(new imgVisible().getScaledImage(srcImg.getImage(),width,heigth,1);PicBrowseFrame.lab.setIcon(scaleIcon);/上下页的监听事件class UpPageListener implements java.awt.event.ActionListener /响应监听器事件,上一页public void actionPerformed(ActionEvent e)tag-=1;ImageIcon ig=new ImageIcon(ParentPath+filestag);preViewMove(tag);PicBrowseFrame.lab.setIcon(ig);filePath=ParentPath+filestag;class bigListener implements java.awt.event.ActionListener /响应监听器事件,放大FileChooser FileCh=new FileChooser();public void actionPerformed(ActionEvent e)FileCh.picUpScanle();class smallListener implements java.awt.event.ActionListener /响应监听器事件,缩小FileChooser FileCh=new FileChooser();public void actionPerformed(ActionEvent e)FileCh.picDownScanle();class DownPageListener implements java.awt.event.ActionListener /响应监听器事件,下一页public void actionPerformed(ActionEvent e)tag+=1;ImageIcon ig=new ImageIcon(ParentPath+filestag);preViewMove(tag);PicBrowseFrame.lab.setIcon(ig);filePath=ParentPath+filestag;/End总结感觉时间过得很快,两周的课程设计一眨眼就结束了,这两周有苦有乐,不过终究还是苦尽甘来,完成了现在这个勉强看得过去的作品。回首这两周,点点滴滴,历历在目。其实有过上学期数据库课程设计的经验,这次课程设计至少没有那么慌张,不过每一天依旧过得很紧张。上学期三周的课程设计我是用一周完成的,当然绝对没有网上下载代码,那时候还很单纯。不过上学期很早就抽题了,所以我实际上是比其他人提前一周准备的。这学期的压力较上学期有增无减,主要是感觉时间很紧迫,抽题晚,结束早,指导老师也很少露面,一切都得靠自己。课程设计从12月27号开始到1月5号结束,扣除准备Java、操作系统考试两天时间和元旦放假三天时间,实际落实下来的时间其实只有5天。好在我元旦没回家,也不大出门,所以比别人多出三天准备时间。12月27号抽题,那天我很紧张,因为我知道所抽题的类型会在一定程度上影响最后的课程设计质量,只要是自己可以改变的东西我都会努力去改变,所以我是我们班第三个上去抽题的,抽到的也就是今天做的这个“图片浏览器”,因为上学期用VB实现过mp3、文件夹浏览器、图片浏览器,这学期又用c#实现了计算器,虽然代码不一样,不过我想编程思想应该是差不多的,所以一眼看到8号“图片浏览器”这个题就选了。但事实并没有我想象中的那么简单。上学期期用VB做图片浏览器,我是照着书用一晚上的时间完成的,不过那只是简单的浏览器,除了浏览之外没有任何附加的功能,甚至连frame的大小都得手动调控,以确保完整显示当前图片。这学期课程设计主要要求有“上一页”、“下一页”、“放大”“缩小”,难度较上学期增加了不下五倍。当然还有一个基本的问题就是在Eclipse中,所有控件的功能和布局都是通过代码实现的,这是困扰我着手编程的最主要问题。第一天的课程设计我和大多数人一样,以搜索引擎为主,第一节课我就查到三四个版本的图片浏览器代码,不过只有一个能正常运行,而且只实现了“上一页”、“下一页”的功能,那个代码很简单,只有两个类,其实只要一个类就够了,因为另一个类是启动类,只有一个“main”方法,而且这个mian方法中只有一段代码“new PictureScan();”。另一个类就是“PictureScan”。仅有的这个类也很简单,在项目文件夹中放了浏览用的图片,然后在代码中用数组为每张图片赋值,然后用if语句实现“上一页”、“下一页”的功能。这个浏览器很简单,运行起来也很稳定,但因为其功能的局限性,最后只是参考了其中的少部分代码,比如说用“icons”方法对图片进行赋值我就是参考的那段代码。后来还下了一个浏览器,上面连“Button”都没有,只有一个“文件”菜单,菜单下面只有“打开”和“退出”两个菜单项。开始觉得那段代码没什么用,不过幸亏没丢,最后我的浏览器主页面的“文件”菜单就是参考那个里面的。尤其是里面有段对我的整个浏览器功能的实现影响非常大的代码 “fileChooser.setCurrentDirectory(new File(.);”,这段代码可以直接用相对路径访问项目文件夹中我实现放好的images图片文件夹。这位浏

温馨提示

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

评论

0/150

提交评论