基于java的图片查看器设计面向对象程序设计课程设计报告册.docx
- 文档编号:11399994
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:49
- 大小:800.47KB
基于java的图片查看器设计面向对象程序设计课程设计报告册.docx
《基于java的图片查看器设计面向对象程序设计课程设计报告册.docx》由会员分享,可在线阅读,更多相关《基于java的图片查看器设计面向对象程序设计课程设计报告册.docx(49页珍藏版)》请在冰豆网上搜索。
基于java的图片查看器设计面向对象程序设计课程设计报告册
成绩
课程设计报告
题目面向对象程序设计课程设计
课程名称基于java的图片查看器设计
院部名称
专业
班级
学生姓名
学号
课程设计地点
课程设计学时
指导教师
金陵科技学院教务处
课程设计题目:
基于java的科学计算器设计
一、摘要(所进行设计工作的主旨、缘起、目的,设计工作的主要内容、过程,采用的方法及取得的成果。
关键字(KeyWords):
一般3~5个,最能代表报告内容特征,或在报告起关键作用,最能说明问题的词组)
主旨:
进一步掌握java的面向对象的程序设计
缘起:
在学习了java的面向对象的程序设计后,学校开了java的课程设计课,正好进一步掌握java的图形用户界面设计。
目的:
设计一个基于java的科学计算器
关键字:
java面向对象科学计算器图形用户界面
二、目录
三、前言(说明本次课程设计课题意义,本课题相关技术特点、拟采用的方案或路线)
该程序是一个图形界面的简单的java计算器,使用人员能快捷简单地进行操作.即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助.可以进行简单的四则运算(加,减,乘,除,以及求倒数,求相反数),有退格功能,归零表示初始化,界面颜色为灰白,该程序支持键盘操作。
随着科学技术的不断发展,计算机已经成为我们工作学习和生活中不可缺少的工具.文本编辑器是个人计算机最司空见惯的应用程序了,在学习了Java语言之后,我决定使用Java语言编写一个简单的计算器,可以实现简单的运算功能,满足日常基本的工作学习和娱乐需要.
Java是由Sun公司开发的新一代纯面向对象的网络编程语言.其目标是建立一种在任意种机器,任一种操作系统的网络环境中运行的软件,实行所谓的"程序写一次,到处运行"的目标.正因为如此,Java已成为当今Internet上最流行,最受欢迎的一种程序开发语言.
Java开发小组把Java按特性分为基本版,移动版,企业版,每个版本有一个软件开发包.Java基本版本叫Java2标准版(Java2StandardEdition,J2SE),它包含建立Java应用程序或者是Applet所需的应用程序编程接口(API).Java2移动版(TheJava2MobileEdition,J2ME)包含创建无线Java应用程序的API.还有Java2企业版(TheJava2Enterprise,J2EE)是J2SE的增强版本,包含建立多层架构应用程序API。
四、正文(包含所进行设计的整体内容)
图片查看器
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)程序的构造方法及其实现
因为图片查看器可以实现对图片不同的操作,程序中构造了十多个方法以达到其目的。
各构造方法相互联系共同完成图片查看器的各项功能。
各个方法描述如下:
①publicvoidinit()
本方法实现了对图片查看器的界面的整体布局及按钮的初始化。
对页面的总体布局采用了以下主要代码进行实现:
setLayout(newBorderLayout());add(pathBar,BorderLayout.NORTH);add(picContainer,BorderLayout.CENTER);add(ctrBar,BorderLayout.SOUTH);resize(640,400);设置顶部路径栏,及其文字显示;代码如pathBar=newJPanel();pathBar.setLayout(newBorderLayout());pathInfo.setText("图片查看器");pathBar.add(pathInfo);同时对图片显示区域,底部的控制栏的设置也运用了相似的代码进行实现,在此就不再重复。
各按钮除了“打开”一按钮外,其他的各按钮均设置为false。
这是因为只有“打开”图片后才能进行以下的像循环浏览,旋转,删除等操作。
具体方法的实现见附件。
②publicvoidactionPerformed(ActionEvent)
在本方法中主要实现了用户对底部控制栏各按钮的点击后,图片查看器进行的相对应的操作反应。
方法中一开始用JButtonclick=(JButton)e.getSource();获取按键源,然后根据click与程序设定的已知的类进行比较决定进行相应的反应。
if(click==openbtn);if(click==prebtn&&pic!
=null);等一系列进行判断后,进行或是打开文件open()方法的调用;或是pre()方法的调用;其他各操作也大同小异,在此就不再赘述。
方法的详细代码见附件。
③publicvoidopen()
该方法实现了对用户选定的文件路径下的后缀为.jpg的图片文件的打开操作。
同时能够对该路径下的一切符合条件的文件进行跟踪处理。
方法中的核心在于一个过滤操作:
FileNameExtensionFilterfilter=newFileNameExtensionFilter("*.JPG","jpg");这样就能实现.jpg文件的浏览了。
在选定了图片后,相应的按钮值应该被赋值为ture,以便进行其他的操作。
若没有选定图片则显示“没有选择图片”。
④publicvoidsave()throwsIOException
该方法是为了满足用户希望对图片进行另外存储的操作,通过用户自己的选择重新选定图片的存储路径。
详细实现见附件中代码。
⑤publicvoidpre()及publicvoidnext()
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);一方法实现。
⑥publicvoidpicTrans()
如果bufImage为空则直接返回,之后进行过滤图像操作,2D仿射变换,设置仿射变换的比例因子transform.setToScale(scaleX,scaleY);创建仿射变换操作对象,过滤图像,将目标图像存在filteredBufImage中,然后显示。
⑦publicvoidzoomin()
此方法实现了对当前的图片进行按设置比例缩小操作。
在进行缩小操作前,先对图片的大小进行判断,看是否已经缩小到最小,若最小则显示提示信息“已经缩至最小!
”;否则进行缩小操作。
在此过程中调用了picTrans()方法,以及repaint();重绘组件的方法。
⑧publicvoidoripic()及publicvoiddelete()
方法实现了将放大或缩小后的图片大小还原的操作。
同时也调用了picTrans()方法,以及repaint();重绘组件的方法。
具体的picTrans()方法将在下面详细描述。
此方法具体实现见附件;publicvoiddelete()方法将图片彻底删除,删除后图片彻底被粉碎,回收站里面都不能找到。
因此要慎用此按钮。
⑨publicvoidangleleft()及publicvoidangleright()
方法每次对图片进行45°的向左向右的旋转操作。
radius+=-Math.PI/2;用以控制,而这些操作后,每次都应oripicbtn.setEnabled(true),也就是要将还原按钮赋值为真。
⑩publicvoidloadImage(StringfileName)及publicvoidexit()
前一个方法通过增加图像到加载器中,创建原始缓冲区图像,创建bufImage的图形环境:
bufImageG=bufImage.createGraphics();传输源图像数据到缓冲区图像中一些列的操作,对图片进行了加载操作;publicvoidexit()方法是退出查看器的方法。
4、系统测试和使用说明
4.1系统测试
使用eclipse运行程序时,会出现applet小程序的界面。
并显示程序已启动。
显示如图2:
图2程序开始时的界面
单击“打开”按钮后的效果图如图3:
图3选择图片文件
多次单击“缩小”按钮后的效果图如图4:
图4图片缩小显示
多次单击放大按钮后的效果图如图5所示:
图5图片放大显示
4.2系统使用说明
由于本人的能力有限在制作此图片查看器时有许多没能完善的地方,因此客户在使用时应注意慎用删除与保存按钮,另外其他的操作只要单击按钮则行。
特别值得注意原始按钮只有在对图片已经进行了放大或缩小的操作后其才是有效的。
5、课程设计总结
5.1遇到的问题和解决方法
在用JAVA编写程序时,我遇到了很多困难,对很多的接口,类,方法都不是很熟悉,只好采用查看API文档,一个一个进行对照学习,同时也上网查看了有关图片查看器的相关描述,还向同学请教了,翻阅了相关的书籍。
尤其是因为有些方法需要使用JDK1.6才行,所以在学校网络机房一开始不能运行,在安装了1.6版本后运行正常了。
另外文件在打开时会有严重的频闪问题,在重写了publicvoidupdate(Graphicsg){this.paint(g);}后解决了。
5.2心得体会
在这次的面向对象程序设计课程设计中,我进一步熟悉了上一学期学习的JAVA语言中的包,类,方法:
导入哪些包,继承哪些类可以实现什么方法等。
深刻感受到了面向对象语言中类库的强大功能。
但是由于自己掌握的知识有限,图片查看器的功能没有做到尽善尽美,尤其是删除操作,删除掉以后就没了,在回收站也找不到。
还有就是单击“保存”按钮后似乎就不能进行其他操作,但这样的情况或有或无。
通过这次的课程设计,我懂得了要充分利用网络资源查找资料同时要多向同学请教,大家互相讨论进步得会很快。
通过近两周多的努力,这次课程设计圆满的结束了,在这个过程中,我收获了很多的知识,同时也非常感谢杭志老师帮助与指导。
在以后的学习中,我会更加努力的学好专业知识,并将所学知识用于实践当中去,以便牢固掌握知识。
参考文献
[1]叶核亚《java程序设计实用教程》(第四版)电子工业出版社
[2]XX文库
5.2算法实现
packagemypackage;
importjava.awt.BorderLayout;
importjava.awt.Color;
importjava.awt.Dimension;
importjava.awt.Font;
importjava.awt.GridLayout;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.text.DecimalFormat;
importjavax.swing.BorderFactory;
importjavax.swing.ButtonGroup;
importjavax.swing.JButton;
importjavax.swing.JCheckBoxMenuItem;
importjavax.swing.JFrame;
importjavax.swing.JMenu;
importjavax.swing.JMenuBar;
importjavax.swing.JMenuItem;
importjavax.swing.JPanel;
importjavax.swing.JRadioButtonMenuItem;
importjavax.swing.JTextField;
publicclassCounterextendsJFrame
{
privateJTextFieldtf;
privateJPanelpanel1,panel2,panel3,panel4;
privateJMenuBarmyBar;
privateJMenumenu1,menu2,menu3;
privateJMenuItemeditItem1,editItem2,help1,help2,help3;
privateJRadioButtonMenuItemseeItem1,seeItem2;//单选框
privateJCheckBoxMenuItemseeItem3;//复选框
privateButtonGroupbgb;
privateStringback;
privatebooleanIfResult=true,flag=false;
privateStringoper="=";
privatedoubleresult=0;
privateNumnumActionListener;
privateDecimalFormatdf;
publicCounter(){
super("科学计算器");//设置标题栏
df=newDecimalFormat("#.##########");//保留十位小数
this.setLayout(newBorderLayout(10,5));
panel1=newJPanel(newGridLayout(1,3,10,10));
panel2=newJPanel(newGridLayout(5,6,5,5));//5行6列
panel3=newJPanel(newGridLayout(5,1,5,5));
panel4=newJPanel(newBorderLayout(5,5));
/**
*菜单栏
*/
myBar=newJMenuBar();
menu1=newJMenu("编辑(E)");
menu2=newJMenu("查看(V)");
menu3=newJMenu("帮助(H)");
menu1.setFont(newFont("宋体",Font.PLAIN,12));
menu2.setFont(newFont("宋体",Font.PLAIN,12));
menu3.setFont(newFont("宋体",Font.PLAIN,12));
/**
*编辑栏
*/
editItem1=newJMenuItem("复制(C)Ctrl+C");
editItem2=newJMenuItem("粘贴(P)Ctrl+V");
editItem1.setFont(newFont("宋体",Font.PLAIN,12));
editItem2.setFont(newFont("宋体",Font.PLAIN,12));
/**
*查看栏
*/
seeItem1=newJRadioButtonMenuItem("科学型(T)");
seeItem2=newJRadioButtonMenuItem("标准型(S)");
seeItem3=newJCheckBoxMenuItem("数字分组(I)");
seeItem1.setFont(newFont("宋体",Font.PLAIN,12));
seeItem2.setFont(newFont("宋体",Font.PLAIN,12));
seeItem3.setFont(newFont("宋体",Font.PLAIN,12));
/**
*帮助栏
*/
help1=newJMenuItem("帮助主题(H)");
help2=newJMenuItem("关于计算器(A)");
help1.setFont(newFont("宋体",Font.PLAIN,12));
help2.setFont(newFont("宋体",Font.PLAIN,12));
bgb=newButtonGroup();//选项组
menu1.add(editItem1);
menu1.add(editItem2);
menu2.add(seeItem1);
menu2.add(seeItem2);
menu2.addSeparator();//添加一条分割线
menu2.add(seeItem3);
menu3.add(help1);
menu3.addSeparator();//添加一条分割线
menu3.add(help2);
myBar.add(menu1);
myBar.add(menu2);
myBar.add(menu3);
this.setJMenuBar(myBar);
numActionListener=newNum();//实现数字监听
/**
*文本域,即为计算器的屏幕显示区域
*/
tf=newJTextField();
tf.setEditable(false);//文本区域不可编辑
tf.setBackground(Color.white);//文本区域的背景色
tf.setHorizontalAlignment(JTextField.RIGHT);//文字右对齐
tf.setText("0");
tf.setBorder(BorderFactory.createLoweredBevelBorder());
init();//对计算器进行初始化
}
/**
*初始化操作
*添加按钮
*/
privatevoidinit(){
addButton(panel1,"退格",newClear(),Color.red);
addButton(panel1,"CE",newClear(),Color.red);
addButton(panel1,"C",newClear(),Color.red);
addButton(panel2,"1/x",newSigns(),Color.magenta);
addButton(panel2,"log",newSigns(),Color.magenta);
addButton(panel2,"7",numActionListener,Color.blue);
addButton(panel2,"8",numActionListener,Color.blue);
addButton(panel2,"9",numActionListener,Color.blue);
addButton(panel2,"÷",newSigns(),Color.red);
addButton(panel3,"10^n",newSigns(),Color.red);
addButton(panel3,"ln",newSigns(),Color.red);
addButton(panel2,"n!
",newSigns(),Color.magenta);
addButton(panel2,"sqrt",newSigns(),Color.magenta);
addButton(panel2,"4",numActionListene
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 java 图片 查看 设计 面向 对象 程序设计 课程设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)