实现屏幕截图的小程序java课程设计.docx
《实现屏幕截图的小程序java课程设计.docx》由会员分享,可在线阅读,更多相关《实现屏幕截图的小程序java课程设计.docx(10页珍藏版)》请在冰豆网上搜索。
实现屏幕截图的小程序java课程设计
经济和管理学院信息管理和信息系统专业
《java实验周》报告
(2015/2016学年第一学期)
学生姓名:
学生班级:
学生学号:
指导教师:
2015年12月25日
实现屏幕截图的小程序
一、实验题目
实现屏幕截图的小程序
二、实验要求
编程一个应用小程序,能够具有屏幕截图的功能,截图的具体实现有:
(1)显示出工作区域,即能够截屏的面积;
(2)鼠标可以随意滑动进行截图;
(3)将所截取的图片保存在想要保存的位置;
(4)程序结束后可以退出整个应用。
三、程序流程
图3.1业务流程图
四、技术原理
程序的主类是cutScreen,继承自无边框的框架JWindow;cutScreen()是一个定义屏幕尺寸的构造方法;使用方法mousePressed(MouseEvente)来监听当前鼠标点击的动作;用方法mouseReleased(MouseEvente)监听鼠标松开时,显示操作窗口;方法mouseDragged(MouseEvente)监听拖动鼠标;paint(Graphicsg)画出指定的工作区域;saveImage()保存图像。
工具栏ToolsWindow类,继承自有边框的框架JFrame;方法init()用来设置布局方式为BorderLayout;run()捕捉屏幕截图。
五、附实验代码
importjava.awt.*;
importjava.awt.event.*;
importjava.awt.image.BufferedImage;
importjava.awt.image.RescaleOp;
importjava.io.File;
importjava.io.IOException;
importjava.text.SimpleDateFormat;
importjava.util.Date;
importjavax.imageio.ImageIO;
importjavax.swing.*;
importjavax.swing.;
importjavax.swing.;
//Jwindow是一个无边框的框架
publicclasscutScreenextendsJWindow{
//beginX开始的横坐标;beginY开始的纵坐标
privateintbeginX,beginY,endX,endY;
privateBufferedImageimage=null;
privateBufferedImagetempImage=null;
privateBufferedImagesaveImage=null;
privateToolsWindowtools=null;
//构造方法
publiccutScreen()throwsAWTException,IOException{
//获取屏幕尺寸宽和高
intwidth=Toolkit.getDefaultToolkit().getScreenSize().width;
intheight=Toolkit.getDefaultToolkit().getScreenSize().height;
//设置窗口大小
//(0,0,width,height)第一个0代表横坐标,第二个代表纵坐标
this.setBounds(0,0,width,height);
//截取屏幕
Robotrobot=newRobot();
//参数Rectangle是代表工作区域
image=robot.createScreenCapture(newRectangle(0,0,width,height));
ImageIO.write(image,"jpg",newFile("d:
/1"));
//本窗口添加监听(适配器)
this.addMouseListener(newMouseAdapter(){
@Override
//当前鼠标点击动作
publicvoidmousePressed(MouseEvente){
beginX=e.getX();
beginY=e.getY();
if(tools!
=null){
tools.setVisible(false);
}
}
@Override
publicvoidmouseReleased(MouseEvente){
//鼠标松开时,显示操作窗口
if(tools==null){
tools=newToolsWindow(cutScreen.this,e.getX(),e.getY());
}else{
tools.setLocation(e.getX(),e.getY());
}
tools.setVisible(true);
//将此窗口置于前端,并可以将其设为焦点Window
tools.toFront();
}
});
//监听拖动鼠标
this.addMouseMotionListener(newMouseMotionAdapter(){
@Override
publicvoidmouseDragged(MouseEvente){
//鼠标拖动时,记录坐标并重绘窗口
endX=e.getX();
endY=e.getY();
//临时图像,用于缓冲屏幕区域放置屏幕闪烁
ImagetempImage2=createImage(cutScreen.this.getWidth(),
cutScreen.this.getHeight());
Graphicsg=tempImage2.getGraphics();
g.drawImage(tempImage,0,0,null);
intx=Math.min(beginX,endX);
inty=Math.min(beginY,endY);
intwidth2=Math.abs(endX-beginX)+1;
intheight2=Math.abs(endY-beginY)+1;
g.drawRect(x-1,y-1,width2+1,height2+1);
//生成子区域流图片
saveImage=image.getSubimage(x,y,width2,height2);
//画出图片
g.drawImage(saveImage,x,y,null);
//绘制当前指定的区域的图片
cutScreen.this.getGraphics().drawImage(tempImage2,0,0,
cutScreen.this);
}
});
}
//@Override
//画出指定的工作区域
publicvoidpaint(Graphicsg){
//进行逐像素重缩放
RescaleOpro=newRescaleOp(0.8f,0,null);
tempImage=ro.filter(image,null);
g.drawImage(tempImage,0,0,this);
}
//保存图像到文件
publicvoidsaveImage()throwsIOException{
Jjfc=newJ();
jfc.setDialogTitle("保存");
//文件过滤器,用户过滤可选择文件
filter=new("JPG",
"jpg");
jfc.set(filter);
//初始化一个默认文件(此文件会生成到桌面上)
//生成时间
SimpleDateFormatsdf=newSimpleDateFormat("yyyymmddHHmmss");
String=sdf.format(newDate());
=().getHomeDirectory();
=new++
+".jpg");
jfc.setSelected);
intflag=jfc.showSaveDialog(this);
if(flag==J){
=jfc.getSelectedFile();
Stringpath=();
//System.out.println(path);
//检查文件后缀,放置用户忘记输入后缀或者输入不正确的后缀
if(!
(path.endsWith(".jpg")||path.endsWith(".JPG"))){
path+=".jpg";
}
//写入文件
ImageIO.write(saveImage,"jpg",new));
System.exit(0);
}
}
/*
*操作窗口
*/
//ToolsWindow内部类
classToolsWindowextendsJFrame{
privatecutScreenparent;
//构造函数(cutScreen,intx,inty)x代表鼠标释放位置的横坐标,
publicToolsWindow(cutScreenparent,intx,inty){
this.parent=parent;
this.init();
this.setLocation(x,y);
//让窗口里面的组建确定为最佳大小
this.pack();
this.setVisible(true);
}
privatevoidinit(){
//设置布局方式为BorderLayout
this.setLayout(newBorderLayout());
//工具栏
JToolBartoolBar=newJToolBar();
//保存按钮
JButtonsaveButton=newJButton("保存");
//匿名内部类添加监听
saveButton.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
try{
parent.saveImage();
}catch(IOExceptione1){
e1.printStackTrace();
}
}
});
toolBar.add(saveButton);
//关闭按钮
JButtoncloseButton=newJButton("关闭");
closeButton.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
System.exit(0);
}
});
toolBar.add(closeButton);
this.add(toolBar,BorderLayout.CENTER);
}
}
publicstaticvoidmain(String[]args){
EventQueue.invokeLater(newRunnable(){
@Override
publicvoidrun(){
try{
cutScreencutScreen=newcutScreen();
cutScreen.setVisible(true);
}catch(Exceptione){
e.printStackTrace();
}
}
});
}
}
六、实验结果
图6.1截图
图6.2保存
七、个人总结
一周的课程设计结束了,刚开始对所要设计的课题完全没有头绪,通过网上查找一些相关资料和同学的帮助,成功设计出能够实现屏幕截图的java程序。
在这个过程中,我学会了很多,不过,还有很多知识我都不懂,比如有点糊里糊涂的感觉。
看来,课本的知识还是不够的,我应该扩展自己的课外知识,多多阅读课外的相关知识,这样才能对Java更加熟悉。
在此我要谢谢帮助我解决难题的同学们,没有他们的解答和热心帮助,我很难完成这个课设。
如今科技发展迅速,而Java作为一门计算机语言类的重要课程,要学好Java是必然的。
我坚信,只要有兴趣,就能学好。
我会培养好自己对Java的兴趣,而且继续保持下去,为以后的路做好铺垫。