课程设计报告课程名称面向对象程序设计课程设计专班级、设计题目指导教师设计起止时间:2013 年1月7日至2013年1月18日目录1、课程设计概述 (3)2、系统功能描述 (3)3、系统需求分析与设计 (3)3.1系统需求分析 (3)3.2系统设计 (3)3.2.1 系统总体设计 (3)3.2.2 程序详细设计 (4)4、系统测试和使用说明 (7)4.1系统测试 (7)4.2系统使用说明 (13)5、课程设计总结 (13)5.1遇到的问题和解决方法 (13)5.2心得体会 (13)参考文献 (14)附录 (14)1、课程设计概述鉴于目前当今各种繁杂的图片查看器,我们组根据自身的java知识水平,合力开发了一款相对简单的图片查看器软件。
在深入理解java语言的语法规则及其优势的同时,掌握类与方法的构造方法,掌握基于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:多次单击放大按钮后的效果图如图5所示:多次单击缩小按钮后效果图如图6所示:单击原始按钮的效果图如图7所示:单击上一幅的效果图如图8所示:单击上一幅的效果图如图9所示:单击左旋按钮的效果如图10所示:单击右旋按钮的效果如图11所示:其他功能显示效果图如图12所示:图12 其他功能效果显示4.2 系统使用说明由于本组的知识水平能力有限,在制作此图片查看器时有许多有待完善的地方,因此用户在使用时应注意慎重使用删除与保存按钮,另外其他的操作只要单击按钮则行。
特别值得注意原始按钮只有在对图片已经进行了放大或缩小的操作后其才是有效的。
5、课程设计总结5.1 遇到的问题和解决方法在用JAVA编写程序时,我们遇到了很多困难,对很多的接口,类,方法都不是很熟悉,只好采用查看API文档,一个一个进行对照学习,同时也上网查看了有关图片查看器的相关描述,还向同学请教了,翻阅了相关的书籍。