《Java课程设计--幻灯片形式的图片浏览器.docx》由会员分享,可在线阅读,更多相关《Java课程设计--幻灯片形式的图片浏览器.docx(12页珍藏版)》请在第壹文秘上搜索。
1、第1章课题概述111目cKj11.2课题的要求11 2.1囱口界面的要求.12 .2.2程序实现的功能要求12*21. 1整个程序的模块结构及流程22. 2各个模块功能描述2第3章程序功能的实现33. 1Jhi1,1JJ33.2主要功能模块的实现33.2.1图形界面的实现33.2.2打开文件的实现43.2.3播放的实现53.2.4展现图片的实现63.2.5暂停的实现63.2.6线程的实现6第4章调试及发现问题的解决7第5章程序测试及分析86工名吉10参考文献11第1章课题概述本次数据结构课程设计的题目是设计并实现幻灯片形式的图片浏览器,可以设置播放文件夹,播放时间。1.1 课题的目的图片浏览器
2、在日常生活中必不可缺,我们生活中遇到的任何图片文件都必须通过图片浏览器来查看。随着图片浏览器的不断发展,其功能也日益完善。由原来单张播放,到现在可以做出各种效果,可见其地位不容忽视。本程序以图片浏览为中心,采用面向对象开发方法对图片浏览器内部组织结构、功能需求进行可行性分析。本程序主要对png,jpg,gif等图片格式进行浏览功能,无需手动播放,可设置播放时间自动播放图片。这次设计,能够让我较熟练的使用常用的容器组件,图形界面。对监听也有初步了解。1. 2课题的要求1.1.1 窗口界面的要求(1)程序运行后,跳出界面。(2)在界面上显示选择文件,播放,暂停等按钮。(3)在界面上添加时间标签(设
3、置播放时间间隔(以毫秒为单位)。(4)采用BOrderLayOUt布局方式,将标签放在最下端,图片标签放在中间(5)点击选择文件后,跳出文件选择窗口。1.1.2 程序实现的功能要求(1)选择任意文件夹,点击打开,可播放里面的图片文件,并且可以播放该文件夹内子文件夹里的图片。(2)自动跳过文件夹里非图片文件,并实现循环播放。(3)每次运行结束自动清空集合里的图片,以免第二次播放时重复出现。(4)监听打开文件,播放等控件的行为,及时进行应答。(5)采用线程,获得时间,设置自动播放时间,可以为1,2,3,4,5秒。第2章概要设计1.1 整个程序的模块结构及流程打开文件文件夹浏览图片2. 2各个模块功
4、能描述打开文件:点击打开文件,跳出选择文件窗口,选择需要播放图片的文件夹。播放:点击播放按钮,可自动循环播放文件夹及其子文件夹里所有图片文件。暂停:点击播放后,该按钮自动变为暂停按钮。设置播放时间:可选择1000,2000,3000,4000,5000(以毫秒为单位)来播放文件夹里的图片。第3章程序功能的实现3.1主函数的实现初始化对象,主方法是构造函数的入口,执行主方法后,则做出界面,并显示窗口可见。publicstaticvoidmain(Stringargs)PhotoAlbumalbum=newPhotoAlbumO;album.setVisible(true);)3. 2主要功能模块
5、的实现3. 2.1图形界面的实现使用javax.swing.UIManager类中SetLookAndFeel方法,设置外观。然后设置出窗口大小,位置,以及采用的布局。我采用的是BorderLayoutO,这个布局方式便于浏览图片。我现将图片绑在滚动条SCrOUl里,然后将滚动条放在标签中,放在窗口的中心。再添加一个标签,将时间提示Settime放入标签中,并调用SetFOnt()方法,设置标签字体为隶书,加粗,16磅。调用Choice方法,并加入时间选择1000,2000,3000,4000,5000(以毫秒为单位)。创建一个面板newJpanel(),调用SetBaCkgroUnd(),将
6、面板颜色设置为cyan0添加两个JBUtton,分别为选择文件按钮,播放按钮,并调用setFont()方法,设置按钮字体为隶书,加粗,16磅。并将标签添加到面板中。最后将面板add(panel,BorderLayout.SOUTH),并对各个控件进行监听。newJFileChooserO,调用SetFiIeSeIeCtiOnMode(),只显示出目录。publicPhotoAlbumOSUPer(欢迎使用图片浏览器);tryUIManager.SetLookAndFeel(UIManager.getSystemLookAndFeelClassName();指定外观catch(ClassNotF
7、oundExceptionel)el.PrintStackTrace(); catch(InstantiationExceptionel)el.PrintStackTrace(); catch(IllegalAccessExceptionel)el.PrintStackTrace(); catch(UnsupportedLookAndFeelExceptionel)el.PrintStackTrace();setSize(600,500);SetLocation(300,100);SetDefaultcioseOperation(JFrame.EXIT_0N_CL0SE);SetLayout(
8、newBorderLayout();image=newJLabel();显示图片image.setSize(this.getWidth(),this.getHeight();scroll=newJScrol!Pane(image);add(scroll,BorderLayout.CENTER);Settimc=newJLabel(设置播放时间间隔(以亳秒为单位)”);settime.setFont(newFOnt(隶书”,Font.BOLD,16);speedtime=newChoiceO;speedtime.add(1000);speedtime.add(,2000zz);speedtime
9、.add(“3000);speedtime.add(4000);speedtime,add(,5000z/);speedtime.setFont(newFont(隶书”,Font.BOLD,16);panel=newJPanel();panel.SetBackground(Color,cyan);open=newJBUttOn(打开文件);open.setFont(newFOnt(隶书,Font.BOLD,16);open.addActionListener(this);play=newJBUtton(播放);play.setFont(newFont(隶书”,Font.BOLD,16);pla
10、y.addActionListener(this);panel,add(open);panel,add(play);panel,add(settime);panel,add(speedtime);add(panel,BorderLayout.SOUTH);3.2.2打开文件的实现将所有根文件存入数组中,用循环进行遍历,筛选出文件中的图片文件。判断该文件是否为目录,若为目录,则调用自身方法,用递归,实现播放文件夹里子文件夹里的图片。判断一个文件是否为图片文件?先Stringnames=.Png二PNG,.jpg,.JPG,gif,.GIFfilei.getName().toString().en
11、dsWith(namesj),先获得文件名,再转化成字符串,最后判断末尾符号与names是否一致,若一致,则将该文件添加到集合C中,从第一张开始播放。代码如下:publicvoidOpen(Filef)Filefile=f.IistFilesO;Stringnames=.png,”.PNG,”.jpg,”.JPG”,.gif,.GIF;if(file,length0)for(inti=0;ifile,length;i+)if(filei.isDirectory()Open(filei);for(intj=0;j0)index=0;showImage(image.getWidth(),image
12、.getHeight();isopen=true;3.2.3播放的实现若条件成立,则获得线程时间。调用getSelectedItem()方法,将时间强制转化成Longo初始化对象thread后,调用start(),启动线程。添加暂停按钮。代码如下:publicvoidplay()if(isopen)if(Jisplay)speed=Long.parseLong(speedtime.getSelectedItem();/K取当前选择的字符串表示形式thread=newCreatePlayThreadO;play.SetTeXt(暂停);isplay=true;thread,start();els
13、eStopPlayO;)13.2.4展现图片的实现获得集合C中文件,转化成字符串形式,再转化成图片形式,再压缩图片,存在icon。调用SetlCon,显示该图片,再调用SetHoriZontaIAIignnIent,设置标签内容沿X轴的对齐方式。代码如下:publicvoidshowimage(intwidth,intheigh)Imageicon=newImageicon(c.get(index).toString().getlmage().getScaledlnstance(width,heigh,Image.SCALE_DEFAULT);image,seticon(newImageicon(icon);image.SetHorizontalAlignment(SwingConstants.CENTER);/设置标签内容沿X轴的对齐方式width=this.getWidth();heigth=this.getHeight();)3.2.5暂停的实现线程调用StOP()方法,添加播放,更改isplay为false.publicvoidStopPlayOthread,stop();play.SetTeXt(播放);isplay=false;3.2.6线程的实现创建线程有两种形式,实现RUnrlable接口、继承Thread类。在此,