JAVA图片浏览器课程设计报告
- 格式:doc
- 大小:729.00 KB
- 文档页数:24
课程设计报告课程名称Java课程设计题目实现图片浏览器功能的Java程序设计学部专业班级姓名指导教师2011 年 1 月7 日Java课程设计任务书题目:实现图片浏览器功能的Java程序设计1. 课程设计教学条件要求JDK1.6+Eclipse/ NetBeans/ JBuilder+SQLServer2000/MySQL2. 课程设计任务实现一个图片浏览器,主要功能包括:可以打开一个对话框选择1个或多个文件进行浏览,浏览器中有用于放大、缩小图片的功能。
要求使用Swing或SWT 组件实现。
3. 课程设计报告书主要内容1 需求分析系统开发思路和相关开发技术、方法的总体介绍2 概要设计2.1 设计的总体思想与算法描述2.2 模块结构图2.3 各功能模块的功能与处理流程描述2.4 界面设计3 详细设计各功能模块程序设计(按照功能模块的功能与处理流程描述给出详细的程序代码,并给出重点语句的注释.)4 小结4. 课程设计要求(1)学生按时到课程设计指定地点签到,遵守课程设计纪律。
(2)学生独立完成课程设计任务。
指导教师分时段验收学生完成的阶段任务。
(3)学生按时提交课程设计成果和打印的课程设计报告书。
5.课程设计参考资料[1] 叶核亚. Java2程序设计实用教程[M](第二版). 北京:电子工业出版社,2008.4.[2] 辛运帏.Java程序设计.北京:清华大学出版社[M], 2004[3] 张思民,梁维娜.Java程序设计实践教程[M].北京:清华大学出版社, 2006.8[4] 朱福喜,路迟.Java与面向对象程序设计[M].北京:武汉大学出版社, 2007,10撰写者:江伟指导教师:江伟目录1.需求分析 (1)1.1系统开发思路 (1)1.1.1图片浏览器概述 (1)1.1.2图片浏览器的功能特点 (1)1.2系统开发相关开发技术 (1)1.3方法的总体介绍 (2)2.概要设计 (3)2.1 设计的总体思想与算法描述 (3)2.2模块结构图 (3)2.3各功能模块的功能与处理流程描述 (4)2.4界面设计 (4)2.4.1各主要界面展示.........。
.. (4)2.4.2主要界面实现概述 (7)3.详细设计.......................。
.. (8)3.1模块程序设计 (8)3.2重要代码展示 (8)4.小结 (16)参考文献 (19)1.需求分析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技术实现了文件选择的功能。
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+"\\"+files[tag]);”进行实现,与之相应的“下一页”的代码用“tag + = 1; ImageIcon ig=new ImageIcon(ParentPath+"\\"+files[tag]);”进行实现。
图片放大和图片缩小分别调用“picUpScanle()”和“picDownScanle()”两个方法进行实现。
文件选择主要用了“fileChooser.setCurrentDirectory(new File("."));”。
2.2模块结构图系统总功能概述:打开jpg、gif、png、tiff格式图片文件,连续浏览图片。
实现上一页、下一页、放大、缩小图片基本功能,可以复制图片,浏览主界面提供预览缩略图。
2.3各功能模块的功能与处理流程描述打开:文件菜单下的一个菜单项,用来浏览文件,打开图片文件夹中的jpg、gif、png、tiff四种格式的图片。
复制:这个功能是附加的,不难实现,其下面的移动并未被实现,移动后源文件没有被删除,所以两个菜单项的功能都是“复制”,复制时要选择保存路径和新的文件名及文件格式,严格说这个功能的实现是失败的。
帮助:主要提供浏览器功能的相关信息,点击后会跳出一个frame,上面写着这些信息。
上一页:按图片在目标文件夹中的排列顺序选择当前浏览图片的上一张图片。
下一页:按图片在目标文件夹中的排列顺序选择当前浏览图片的下一张图片。
放大:按照定义好的方法将原图片的width和height的size同时增大。
缩小:按照定义好的方法将原图片的width和height的size同时缩小。
2.4界面设计2.4.1各主要界面展示系统初始化界面图2—2系统初始化界面文件选择界面图2—3文件选择界面图片选择界面图2—4图片选择界面图片浏览界面图片复制界面帮助界面图2—7帮助界面2.4.2主要界面实现概述初始化界面:首先在frame顶部设置菜单栏,用“frame.setJMenuBar(menuBar);”实现,然后用“JMenu File=new JMenu("文件");menuBar.add(File);”添加“文件”菜单,用类似的方式再添加“编辑”等菜单。
用“tempItem=new JMenuItem("打开");tempItem.addActionListener(newLoadListener());File.add(tempItem);”添加“打开”菜单项,再用同样的方法添加其他菜单项。
最后用icons方法用数组定义图片“page.jpg”,最后用“lab=new JLabel(icons[0]);”实现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.JScrollPane{ private 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 Icon[]{new 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(icons[0]);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,(screenSiz e.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.ActionListener{ public void actionPerformed(ActionEvent e){FileCh.FileChoosercr();}}//Exit Listenerclass ExitListener implements java.awt.event.ActionListener{ public void actionPerformed(ActionEvent e){System.exit(0);}}//End//编辑菜单的监听事件class AboutListener implements java.awt.event.ActionListener{ public void actionPerformed(ActionEvent e){JFrame f = new JFrame("关于作品");JLabel l =new JLabel(icons[1]);f.setMinimumSize(new Dimension(600,400));f.setSize(400,300);Dimension frameSize=f.getSize();DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();f.setLocation((screenSize.width-frameSize.width)/2,(screenSize.he ight-frameSize.height)/2);f.add(l);f.setSize(600,400);f.setVisible(true);}}class CopyListener implements java.awt.event.ActionListener{ public void actionPerformed(ActionEvent e){JFileChooser saveFile=new JFileChooser();int result=saveFile.showSaveDialog(frame);StringsavePath=saveFile.getSelectedFile().getAbsolutePath();if(result==JFileChooser.APPROVE_OPTION){new imgVisible().PicCopy(FileChooser.filePath,savePath);}else{}}}class UpListener implements java.awt.event.ActionListener{ public void actionPerformed(ActionEvent e){FileCh.picUpScanle();}}//下一页的监听事件class DownListener implements java.awt.event.ActionListener{ public 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 JLabel[5];//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();b.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(); //图片的缩小浏览//END}if (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;i<length;i++){if(new FileNameFilter().acceptfile(files[i])){try{ImageIcon iconScanle=newImageIcon(ParentPath+"\\"+files[i]);ImageIcon scaleIcon = new ImageIcon(new imgVisible().getScaledImage(iconScanle.getImage(),50,50,1));label[j]=new JLabel(scaleIcon);scanlePane.add(label[j]);j++;PicBrowseFrame.conPane.add(scanlePane,BorderLayout.SOUTH);}catch(ng.NullPointerException e){}}else length+=1;}}//图片的缩小浏览的滚动private void preViewMove(int tag){int length=tag+5;int j=0;for(int i=tag;i<length;i++){if(new FileNameFilter().acceptfile(files[i])){try{ImageIcon iconScanle=newImageIcon(ParentPath+"\\"+files[i]);ImageIcon scaleIcon = new ImageIcon(new imgVisible().getScaledImage(iconScanle.getImage(),50,50,1));label[j].setIcon(scaleIcon);scanlePane.add(label[j]);j++;}catch(ng.NullPointerException e){}}else length+=1;}}//放大图片private ImageIcon srcImg;public void picUpScanle(){srcImg=new ImageIcon(filePath);width+=20;heigth+=20;ImageIcon scaleIcon = new ImageIcon(newimgVisible().getScaledImage(srcImg.getImage(),width,heigth,1));b.setIcon(scaleIcon);}//缩小图片public void picDownScanle(){srcImg=new ImageIcon(filePath);width-=20;heigth-=20;ImageIcon scaleIcon = new ImageIcon(newimgVisible().getScaledImage(srcImg.getImage(),width,heigth,1));b.setIcon(scaleIcon);}//上下页的监听事件class UpPageListener implements java.awt.event.ActionListener{ //响应监听器事件,上一页public void actionPerformed(ActionEvent e){tag-=1;ImageIcon ig=new ImageIcon(ParentPath+"\\"+files[tag]);preViewMove(tag);b.setIcon(ig);filePath=ParentPath+"\\"+files[tag];}}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 implementsjava.awt.event.ActionListener{ //响应监听器事件,下一页public void actionPerformed(ActionEvent e){tag+=1;ImageIcon ig=new ImageIcon(ParentPath+"\\"+files[tag]);preViewMove(tag);b.setIcon(ig);filePath=ParentPath+"\\"+files[tag];}}//End}总结感觉时间过得很快,两周的课程设计一眨眼就结束了,这两周有苦有乐,不过终究还是苦尽甘来,完成了现在这个勉强看得过去的作品。