实现屏幕截图的小程序java课程设计

合集下载

javaweb小程序课程设计

javaweb小程序课程设计

javaweb小程序课程设计一、课程目标知识目标:1. 让学生掌握Java Web开发的基础知识,包括Servlet、JSP和JavaBean的使用;2. 使学生了解Web应用程序的运行原理和HTTP协议的基本概念;3. 帮助学生掌握HTML、CSS和JavaScript等前端技术,实现与后端的交互。

技能目标:1. 培养学生具备独立设计并实现简单Java Web小程序的能力;2. 让学生学会使用常用的Java Web开发工具和调试技巧;3. 提高学生分析问题、解决问题的能力,培养良好的编程习惯。

情感态度价值观目标:1. 培养学生对Java Web开发的兴趣和热情,激发学习积极性;2. 引导学生树立团队协作意识,学会与他人共同解决问题;3. 培养学生严谨、踏实的科学态度,养成良好的学习习惯。

课程性质:本课程为实践性较强的课程,侧重于培养学生的动手能力和实际开发经验。

学生特点:学生具备一定的Java基础,对Web开发感兴趣,但可能缺乏实际项目经验。

教学要求:结合课本内容,采用案例教学、任务驱动等方法,引导学生动手实践,注重理论与实践相结合。

通过本课程的学习,使学生能够达到上述课程目标,为后续深入学习Java Web开发打下坚实基础。

二、教学内容1. Java Web基础- Servlet的生命周期、请求和响应处理- JSP的页面指令、脚本语言、标准标签库- JavaBean的使用及其在Web应用中的作用2. 前端技术- HTML的基本结构、常用标签和属性- CSS的语法、选择器、盒模型和布局- JavaScript的基本语法、事件处理和DOM操作3. 数据库访问- JDBC的使用,连接数据库,执行SQL语句- 数据库连接池技术,提高数据库访问效率- 在Web应用中实现用户登录、数据查询等操作4. 小程序实战- 设计并实现一个简单的博客系统,包括文章发布、评论等功能- 使用前端技术实现页面布局和交互效果- 使用Java Web技术实现后端逻辑,处理用户请求教学内容安排和进度:第1周:Java Web基础,Servlet和JSP的学习第2周:前端技术,HTML、CSS和JavaScript的学习第3周:数据库访问技术,JDBC和连接池的使用第4周:综合实战,设计和开发一个小程序本教学内容根据课程目标制定,注重科学性和系统性。

国开《JAVA设计程序语言》形考任务三:源代码与输出截图

国开《JAVA设计程序语言》形考任务三:源代码与输出截图

国开《JAVA设计程序语言》形考任务三:源代码与输出截图任务要求本次形考任务要求完成以下两个任务:1. 编写一个Java程序,实现一个简单的计算器功能,能够实现基本的加减乘除运算。

2. 使用截图工具截取程序运行结果的输出,并保存为图片文件。

代码示例import java.util.Scanner;public class Calculator {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入第一个数字: ");double num1 = scanner.nextDouble();System.out.print("请输入运算符(+, -, *, /): ");char operator = scanner.next().charAt(0);System.out.print("请输入第二个数字: "); double num2 = scanner.nextDouble();double result = 0;switch (operator) {case '+':result = num1 + num2;break;case '-':result = num1 - num2;break;case '*':result = num1 * num2;break;case '/':result = num1 / num2;break;default:System.out.println("无效的运算符");return;}System.out.println("计算结果: " + result);}}输出截图![计算器输出截图](calculator_output.png)以上是完成任务三的源代码和输出截图。

Java编程实现屏幕截图(截屏)代码总结(转载)

Java编程实现屏幕截图(截屏)代码总结(转载)

Java编程实现屏幕截图(截屏)代码总结(转载)转载⾃:⽅法⼀:import java.awt.Desktop;import java.awt.Dimension;import java.awt.Rectangle;import java.awt.Robot;import java.awt.Toolkit;import java.awt.image.BufferedImage;import java.io.File;import javax.imageio.ImageIO;public class CaptureScreen {public static void captureScreen(String fileName, String folder) throws Exception {Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();Rectangle screenRectangle = new Rectangle(screenSize);Robot robot = new Robot();BufferedImage image = robot.createScreenCapture(screenRectangle);//保存路径File screenFile = new File(fileName);if (!screenFile.exists()) {screenFile.mkdir();}File f = new File(screenFile, folder);ImageIO.write(image, "png", f);//⾃动打开if (Desktop.isDesktopSupported()&& Desktop.getDesktop().isSupported(Desktop.Action.OPEN))Desktop.getDesktop().open(f);}public static void main(String[] args) {try {captureScreen("e:\\你好","11.png");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}⽅法⼆:package com.qiu.util;import java.io.*;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.awt.image.*;import javax.imageio.*;/*** ⼀个简单的屏幕抓图***/public class ScreenCapture {// test mainpublic static void main(String[] args) throws Exception {String userdir = System.getProperty("user.dir");File tempFile = new File("d:", "temp.png");ScreenCapture capture = ScreenCapture.getInstance();capture.captureImage();JFrame frame = new JFrame();JPanel panel = new JPanel();panel.setLayout(new BorderLayout());JLabel imagebox = new JLabel();panel.add(BorderLayout.CENTER, imagebox);imagebox.setIcon(capture.getPickedIcon());capture.saveToFile(tempFile);capture.captureImage();imagebox.setIcon(capture.getPickedIcon());frame.setContentPane(panel);frame.setSize(400, 300);frame.show();System.out.println("Over");}private ScreenCapture() {try {robot = new Robot();} catch (AWTException e) {System.err.println("Internal Error: " + e);e.printStackTrace();}JPanel cp = (JPanel) dialog.getContentPane();cp.setLayout(new BorderLayout());labFullScreenImage.addMouseListener(new MouseAdapter() {public void mouseReleased(MouseEvent evn) {isFirstPoint = true;pickedImage = fullScreenImage.getSubimage(recX, recY, recW,recH);dialog.setVisible(false);}});labFullScreenImage.addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent evn) {if (isFirstPoint) {x1 = evn.getX();y1 = evn.getY();isFirstPoint = false;} else {x2 = evn.getX();y2 = evn.getY();int maxX = Math.max(x1, x2);int maxY = Math.max(y1, y2);int minX = Math.min(x1, x2);int minY = Math.min(y1, y2);recX = minX;recY = minY;recW = maxX - minX;recH = maxY - minY;labFullScreenImage.drawRectangle(recX, recY, recW, recH);}}public void mouseMoved(MouseEvent e) {labFullScreenImage.drawCross(e.getX(), e.getY());}});cp.add(BorderLayout.CENTER, labFullScreenImage);dialog.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR)); dialog.setAlwaysOnTop(true);dialog.setMaximumSize(Toolkit.getDefaultToolkit().getScreenSize());dialog.setUndecorated(true);dialog.setSize(dialog.getMaximumSize());dialog.setModal(true);}// Singleton Patternpublic static ScreenCapture getInstance() {return defaultCapturer;}/** 捕捉全屏慕 */public Icon captureFullScreen() {fullScreenImage = robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));ImageIcon icon = new ImageIcon(fullScreenImage);return icon;}/** 捕捉屏幕的⼀个矫形区域 */public void captureImage() {fullScreenImage = robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));ImageIcon icon = new ImageIcon(fullScreenImage);labFullScreenImage.setIcon(icon);dialog.setVisible(true);}/** 得到捕捉后的BufferedImage */public BufferedImage getPickedImage() {return pickedImage;}/** 得到捕捉后的Icon */public ImageIcon getPickedIcon() {return new ImageIcon(getPickedImage());}/*** 储存为⼀个⽂件,为PNG格式** @deprecated replaced by saveAsPNG(File file)**/@Deprecatedpublic void saveToFile(File file) throws IOException {ImageIO.write(getPickedImage(), defaultImageFormater, file);}/** 储存为⼀个⽂件,为PNG格式 */public void saveAsPNG(File file) throws IOException {ImageIO.write(getPickedImage(), "png", file);}/** 储存为⼀个JPEG格式图像⽂件 */public void saveAsJPEG(File file) throws IOException {ImageIO.write(getPickedImage(), "JPEG", file);}/** 写⼊⼀个OutputStream */public void write(OutputStream out) throws IOException {ImageIO.write(getPickedImage(), defaultImageFormater, out);}// singleton design patternprivate static ScreenCapture defaultCapturer = new ScreenCapture();private int x1, y1, x2, y2;private int recX, recY, recH, recW; // 截取的图像private boolean isFirstPoint = true;private BackgroundImage labFullScreenImage = new BackgroundImage();private Robot robot;private BufferedImage fullScreenImage;private BufferedImage pickedImage;private String defaultImageFormater = "png";private JDialog dialog = new JDialog();}/** 显⽰图⽚的Label */class BackgroundImage extends JLabel {public void paintComponent(Graphics g) {super.paintComponent(g);g.drawRect(x, y, w, h);String area = Integer.toString(w) + " * " + Integer.toString(h);g.drawString(area, x + (int) w / 2 - 15, y + (int) h / 2);g.drawLine(lineX, 0, lineX, getHeight());g.drawLine(0, lineY, getWidth(), lineY);}public void drawRectangle(int x, int y, int width, int height) {this.x = x;this.y = y;h = height;w = width;repaint();}public void drawCross(int x, int y) {lineX = x;lineY = y;repaint();}int lineX, lineY;int x, y, h, w;⽅法三:因为有最⼩化到系统托盘,还是需要⼀张名为bg.gif作为托盘图标,图⽚应放在同级⽬录下,否则会空指针异常。

画图板java课程设计

画图板java课程设计

画图板java课程设计一、课程目标知识目标:1. 学生能掌握Java语言的基本语法和编程结构。

2. 学生能理解画图板的基本原理,掌握使用Java进行图形界面的设计与实现。

3. 学生能运用Java中的事件处理机制,实现与画图板的交互功能。

技能目标:1. 学生能运用Java编程技能,独立设计并实现一个简单的画图板程序。

2. 学生能通过本课程的学习,提升问题分析能力,运用Java语言解决实际问题。

3. 学生能运用所学的知识,对画图板程序进行调试和优化,提高程序的稳定性。

情感态度价值观目标:1. 学生通过动手实践,培养对编程的兴趣,增强学习Java语言的自信心。

2. 学生在小组合作中,培养团队协作能力,学会共同解决问题。

3. 学生能够认识到编程在现实生活中的应用,理解编程对解决实际问题的重要性。

分析课程性质、学生特点和教学要求:本课程为Java语言编程课程,旨在让学生掌握Java编程的基本技能,培养实际编程能力。

学生处于高年级阶段,具有一定的编程基础,对Java语言有初步了解。

根据教学要求,课程目标具体、可衡量,以便学生和教师能够清晰地了解课程的预期成果。

将目标分解为具体的学习成果:1. 学生能独立完成一个画图板程序的编写,实现基本绘图功能。

2. 学生能对画图板程序进行调试和优化,提高程序性能。

3. 学生在课程学习过程中,积极参与小组讨论,提升团队协作能力。

4. 学生通过课程学习,对编程产生浓厚兴趣,为后续深入学习奠定基础。

二、教学内容本课程教学内容围绕以下三个方面展开:1. Java基本语法和编程结构:包括数据类型、变量、运算符、控制结构、数组等基本概念,确保学生掌握Java编程的基础知识。

2. Java图形用户界面(GUI)设计:涉及Swing库的使用,重点讲解JFrame、JPanel等容器组件以及绘图相关的Graphics类,使学生能够实现画图板界面设计。

3. Java事件处理机制:介绍事件监听器、事件对象等概念,让学生了解并掌握画图板中鼠标、键盘等事件的处理方法。

java编写截图工具

java编写截图工具
this.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
this.setVisible(true);
this.repaint();
}
public static void main(String[] args) {
new AWTpicture();
}
public void paint(
}
// 缓存图片
public void update(Graphics g) {
if (bis == null) {
bis = this.createImage(frameWidth, frameHeight);
button2.setBackground(Color.darkGray);
button2.addActionListener(new MyTakePicture(this));
button2.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
button.addActionListener(this);
panel = new Panel();
button = new Button("退出");
button.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
button.setBackground(Color.green);
button2 = new Button("截取");
try {
robot = new Robot();
} catch (AWTException e) {

画图板java课程设计

画图板java课程设计

画图板java课程设计一、教学目标本课程旨在通过Java编程语言实现一个简易的画图板应用程序,让学生在学习的过程中掌握Java编程的基本语法、面向对象编程思想以及图形用户界面(GUI)的设计与实现。

1.理解Java编程语言的基本语法。

2.掌握Java中的面向对象编程概念,如类、对象、封装、继承和多态。

3.熟悉Java中的图形用户界面(GUI)设计原则和常用组件。

4.能够使用Java编写简单的控制台应用程序。

5.能够运用面向对象编程思想设计和实现程序。

6.能够使用Java Swing库设计并实现一个图形用户界面。

情感态度价值观目标:1.培养学生的逻辑思维能力和问题解决能力。

2.激发学生对计算机科学和编程的兴趣。

3.培养学生的团队合作意识和自我学习能力。

二、教学内容本课程的教学内容主要包括Java编程语言的基本语法、面向对象编程思想和图形用户界面(GUI)的设计与实现。

1.Java编程语言的基本语法:–数据类型、变量和常量–运算符和表达式–控制语句(条件语句、循环语句)–方法(定义、调用、参数传递)2.面向对象编程思想:–类和对象的概念–封装、继承和多态的原理和应用–构造函数和析构函数–静态成员和方法3.图形用户界面(GUI)的设计与实现:–Java Swing库的基本组件(如JFrame、JPanel、JButton等)–事件处理机制(事件监听器、事件处理程序)–绘图功能(Graphics类、绘图方法)三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法。

1.讲授法:教师讲解Java编程语言的基本语法、面向对象编程概念和图形用户界面设计原理。

2.讨论法:学生分组讨论实际案例,分析和解决问题。

3.案例分析法:分析经典案例,让学生理解面向对象编程思想和GUI设计原则。

4.实验法:学生动手编写代码,实现画图板应用程序。

四、教学资源为了支持教学内容和教学方法的实施,我们将选择和准备以下教学资源:1.教材:《Java编程思想》或《Java核心技术》2.参考书:《Java Swing教程》3.多媒体资料:教学PPT、视频教程4.实验设备:计算机、网络环境五、教学评估为了全面、客观、公正地评估学生的学习成果,本课程将采用以下评估方式:1.平时表现:学生课堂参与度、提问回答、小组讨论等,占总成绩的20%。

java截图课程设计

java截图课程设计

java截图课程设计一、教学目标本课程旨在通过Java编程语言实现截图功能,让学生掌握Java编程的基本语法、面向对象编程思想,以及图形用户界面(GUI)的设计和开发。

具体目标如下:1.知识目标:–掌握Java基本语法和数据结构;–理解面向对象编程的基本概念,如类、对象、封装、继承和多态;–学习Java GUI编程,了解Swing和JavaFX框架;–了解操作系统中截图的基本原理。

2.技能目标:–能够运用Java语言编写简单的程序;–能够使用Java面向对象编程方法解决实际问题;–能够设计和开发图形用户界面,实现截图功能;–能够调试和优化程序,提高代码质量。

3.情感态度价值观目标:–培养学生对编程的兴趣和热情,提高学生解决问题的能力;–培养学生团队合作精神,提高沟通与协作能力;–培养学生勇于探索、不断创新的精神,提高自主学习能力。

二、教学内容本课程的教学内容主要包括以下几个部分:1.Java基本语法和数据结构:字符串、数组、列表、集合、映射、基本数据类型、控制结构、循环、函数等;2.面向对象编程:类、对象、封装、继承、多态、抽象类、接口等;3.Java GUI编程:Swing和JavaFX框架,组件、容器、布局管理器、事件处理等;4.截图功能实现:屏幕分辨率、图像处理、文件存储等;5.编程实践:编写一个简单的截图工具,进行功能测试和优化。

三、教学方法为了提高教学效果,本课程将采用以下教学方法:1.讲授法:讲解Java基本语法、面向对象编程思想和GUI编程基础;2.案例分析法:分析实际截图工具的代码,引导学生掌握编程技巧;3.实验法:让学生动手编写代码,实现截图功能,培养实际操作能力;4.讨论法:分组讨论编程问题,培养学生团队合作和沟通能力。

四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:《Java编程思想》、《Java GUI编程实战》;2.参考书:《Java核心技术》、《Swing编程指南》;3.多媒体资料:教学PPT、视频教程、在线编程练习平台;4.实验设备:计算机、网络环境、编程软件(如Eclipse、IntelliJIDEA)。

java实现屏幕共享的小程序

java实现屏幕共享的小程序

java实现屏幕共享的⼩程序最近在做软件软件⼯程的课程设计,做⼀个⽤于实验室的屏幕监控系统,参考各种前⼈代码,最后领悟之后要转换⾃⼰的代码,初学者都是这样模仿过来的。

说到屏幕监控系统,有教师断和学⽣端,教师端就是Server端,学⽣端就做Client端。

系统⾥⽐较有趣的⼀个地⽅应该算是屏幕⼴播与屏幕监控吧,其余什么点名签到,锁屏,定时关机的,就相对来说简单点。

屏幕⼴播,在功能实现上⾯,说⽩了,就是教师端的机器不断截取屏幕信息,以图⽚的形式发送到每⼀个学⽣端的电脑上⾯,由此学⽣能够看见⽼师在电脑上的操作,这就是所谓的屏幕⼴播。

这⾥⾯有个⿇烦的地⽅,就是截取屏幕图⽚的时候,是没有⿏标信息。

不过有两种解决办法:①在发送截图信息时,在图⽚上绘制⼀个⿏标,这样在学⽣端就会有两个⿏标,学⽣端可以移动⾃⼰电脑上的⿏标。

②发送教师端的⿏标坐标到学⽣端上,学⽣端的电脑⿏标根据坐标信息实时移动,这⾥其实是涉及到控制的功能了,学⽣端就不能移动⿏标了。

屏幕监控相对棘⼿点,其实这是这包含俩功能:①教师监控所有学⽣电脑屏幕的功能;②教师控制某⼀个学⽣的电脑;因为涉及到并发,每个client都要实时的把屏幕信息发到教师端上,会有点⿇烦,不过还是可以实现。

下⾯是不带⿏标的屏幕共享功能,⽐较简单,有待完善,不过可以作为⼀个⼯具类在后⾯集成使⽤。

后⾯补充了把⿏标画上去的代码,只需要3⾏。

⾸先是教师端Server:package Test;import java.awt.Dimension;import java.awt.Rectangle;import java.awt.Robot;import java.awt.Toolkit;import java.awt.image.BufferedImage;import java.io.DataOutputStream;import java.io.IOException;import .ServerSocket;import .Socket;import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStream;import javax.imageio.ImageIO;/** ly 2014-11-20* 该类实时发送截屏消失,多线程实现,不包含⿏标信息,且没有做对每个Client做优化处理*/public class SendScreenImg extends Thread{public static int SERVERPORT=8000;private ServerSocket serverSocket;private Robot robot;public Dimension screen;public Rectangle rect ;private Socket socket;public static void main(String args[]){new SendScreenImg(SERVERPORT).start();}//构造⽅法开启套接字连接机器⼈robot 获取屏幕⼤⼩public SendScreenImg(int SERVERPORT){try {serverSocket = new ServerSocket(SERVERPORT);serverSocket.setSoTimeout(864000000);robot = new Robot();} catch (Exception e) {e.printStackTrace();}screen = Toolkit.getDefaultToolkit().getScreenSize(); //获取主屏幕的⼤⼩rect = new Rectangle(screen); //构造屏幕⼤⼩的矩形}@Overridepublic void run(){//实时等待接收截屏消息while(true){try{socket = serverSocket.accept();System.out.println("学⽣端⼝已经连接");ZipOutputStream zip = new ZipOutputStream(new DataOutputStream(socket.getOutputStream())); zip.setLevel(9); //设置压缩级别BufferedImage img = robot.createScreenCapture(rect);zip.putNextEntry(new ZipEntry("test.jpg"));ImageIO.write(img, "jpg", zip);if(zip!=null)zip.close();System.out.println("Client正在实时连接");} catch (IOException ioe) {System.out.println("连接断开");} finally {if (socket != null) {try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}}}然后是学⽣端Client:package Test;import java.awt.Frame;import java.awt.Image;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.DataInputStream;import java.io.IOException;import .Socket;import java.util.concurrent.TimeUnit;import java.util.zip.ZipInputStream;import javax.imageio.ImageIO;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JLabel;/** ly 2014-11-20* 该类⽤于接收教师端的屏幕信息,不包括⿏标,待优化*/public class ReceiveImages extends Thread{public BorderInit frame ;public Socket socket;public String IP;public static void main(String[] args){new ReceiveImages(new BorderInit(), "127.0.0.1").start();}public ReceiveImages(BorderInit frame,String IP){this.frame = frame;this.IP=IP;}public void run() {while(frame.getFlag()){try {socket = new Socket(IP,8000);DataInputStream ImgInput = new DataInputStream(socket.getInputStream());ZipInputStream imgZip = new ZipInputStream(ImgInput);imgZip.getNextEntry(); //到Zip⽂件流的开始处Image img = ImageIO.read(imgZip); //按照字节读取Zip图⽚流⾥⾯的图⽚frame.jlbImg.setIcon(new ImageIcon(img));System.out.println("连接第"+(System.currentTimeMillis()/1000)%24%60+"秒");frame.validate();LISECONDS.sleep(50);// 接收图⽚间隔时间imgZip.close();} catch (IOException | InterruptedException e) {System.out.println("连接断开");}finally{try {socket.close();} catch (IOException e) {}}}}}//Client端窗⼝辅助类,专门⽤来显⽰从教师端收到的屏幕信息class BorderInit extends JFrame{private static final long serialVersionUID = 1L;public JLabel jlbImg;private boolean flag;public boolean getFlag(){return this.flag;}public BorderInit(){this.flag=true;this.jlbImg = new JLabel();this.setTitle("远程监控--IP:" + "--主题:" );this.setSize(400, 400);//this.setUndecorated(true); //全屏显⽰,测试时最好注释掉//this.setAlwaysOnTop(true); //显⽰窗⼝始终在最前⾯this.add(jlbImg);this.setLocationRelativeTo(null);this.setExtendedState(Frame.MAXIMIZED_BOTH);this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);this.setVisible(true);this.validate();//窗⼝关闭事件this.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {flag=false;BorderInit.this.dispose();System.out.println("窗体关闭");System.gc(); //垃圾回收}});}}很晚了,从未成品中抽取了这么个⼩功能,因为答应某位童鞋给链接的,距离成品还有很多要写,后续补上吧。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

经济与管理学院信息管理与信息系统专业《java实验周》报告(20132016学年第一学期)学生姓名:学生班级:学生学号:指导教师:2015年12月25日实现屏幕截图的小程序、实验题目实现屏幕截图的小程序、实验要求编程一个应用小程序,能够具有屏幕截图的功能,截图的具体实现有(1)显示出工作区域,即能够截屏的面积;(2)鼠标可以随意滑动进行截图;(3)将所截取的图片保存在想要保存的位置;(4)程序结束后可以退出整个应用。

三、程序流程图3.1业务流程图四、技术原理程序的主类是cutScreen,继承自无边框的框架JWindow;cutScreen()是一个定义屏幕尺寸的构造方法;使用方法mousePressed(MouseEvent咪监听当前鼠标点击的动作;用方法mouseReleased(MouseEve nt e)监听鼠标松开时,显示操作窗口;方法mouseDragged(MouseEve nt e)监听拖动鼠标;pai nt(Graphics g)画出指定的工作区域;savelmage(保存图像。

工具栏ToolsWindow类,继承自有边框的框架JFrame方法init ()用来设置布局方式为BorderLayout; run()捕捉屏幕截图。

五、附实验代码import java.awt.*;import java.awt.event.*;import java.awt.image.Bufferedlmage;import java.awt.image.RescaleOp;import java.io.File;import java.io.lOException;import java.text.SimpleDateFormat;import java.util.Date;import javax.imageio.lmagelO;import javax.swing.*;import javax.swing.filechooser.FileNameExtensionFilter;import javax.swing.filechooser.FileSystemView;//Jwindow 是一个无边框的框架public class cutScreen extends JWindow {//beginX 开始的横坐标;beginY 开始的纵坐标private int beginX, beginY , endX, endY;private Bufferedlmage image = null;private Bufferedlmage templmage = null;private Bufferedlmage savelmage = null;private ToolsWindow tools = null;//构造方法public cutScreen() throws AWTException, IOException {// 获取屏幕尺寸宽和高int width = Toolkit.getDefaultToolkit().getScreenSize().width;int height = Toolkit.getDefaultToolkit().getScreenSize().height;// 设置窗口大小//(0, 0, width, height) 第一个0 代表横坐标,第二个代表纵坐标this.setBounds(0, 0, width, height); // 截取屏幕Robot robot = new Robot();// 参数Rectangle 是代表工作区域image = robot.createScreenCapture(new Rectangle(0, 0, width, height)); ImageIO.write(image, "jpg", new File("d:/1"));// 本窗口添加监听(适配器) this.addMouseListener(new MouseAdapter() {@Override//当前鼠标点击动作public void mousePressed(MouseEvent e) {beginX = e.getX();beginY = e.getY();if (tools != null) {tools.setVisible(false);}}@Overridepublic void mouseReleased(MouseEvent e) {// 鼠标松开时,显示操作窗口if (tools == null) {tools = new ToolsWindow(cutScreen.this, e.getX(), e.getY()); } else {tools.setLocation(e.getX(), e.getY());}tools.setVisible(true);// 将此窗口置于前端,并可以将其设为焦点Window tools.toFront();}});// 监听拖动鼠标this.addMouseMotionListener(new MouseMotionAdapter() {@Overridepublic void mouseDragged(MouseEvent e) {// 鼠标拖动时,记录坐标并重绘窗口endX = e.getX();endY = e.getY();// 临时图像,用于缓冲屏幕区域放置屏幕闪烁Image tempImage2 = createImage(cutScreen.this.getWidth(), cutScreen.this.getHeight());Graphics g = tempImage2.getGraphics();g.drawImage(tempImage, 0, 0, null);int x = Math.min(beginX, endX);int y = Math.min(beginY , endY);int width2 = Math.abs(endX - beginX) + 1;int height2 = 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//画出指定的工作区域public void paint(Graphics g) {//进行逐像素重缩放RescaleOp ro = new RescaleOp(0.8f, 0, null); tempImage = ro.filter(image, null);g.drawImage(tempImage, 0, 0, this);}// 保存图像到文件public void saveImage() throws IOException {JFileChooser jfc = new JFileChooser();jfc.setDialogTitle(" 保存");// 文件过滤器,用户过滤可选择文件FileNameExtensionFilter filter = new FileNameExtensionFilter("JPG","jpg");jfc.setFileFilter(filter);// 初始化一个默认文件(此文件会生成到桌面上)// 生成时间SimpleDateFormat sdf = new SimpleDateFormat("yyyymmddHHmmss");String fileName = sdf.format(new Date());File filePath = FileSystemView.getFileSystemView().getHomeDirectory();File defaultFile = new File(filePath + File.separator + fileName+ ".jpg");jfc.setSelectedFile(defaultFile);int flag = jfc.showSaveDialog(this);if (flag == JFileChooser.APPROVE_OPTION) {File file = jfc.getSelectedFile();String path = file.getPath();//System.out.println(path);// 检查文件后缀,放置用户忘记输入后缀或者输入不正确的后缀if (!(path.endsWith(".jpg") ||path.endsWith(".JPG"))) {path += ".jpg";}// 写入文件ImageIO.write(saveImage, "jpg", new File(path));System.exit(0);}}/** 操作窗口*///ToolsWindow 内部类class ToolsWindow extends JFrame { private cutScreen parent;//构造函数( cutScreen,int x, int y ) x 代表鼠标释放位置的横坐标,publicToolsWindow(cutScreen parent, int x, int y) {this.parent = parent;this.init(); this.setLocation(x, y);//让窗口里面的组建确定为最佳大小this.pack();this.setVisible(true);}private void init() {//设置布局方式为BorderLayout this.setLayout(new BorderLayout());//工具栏JToolBar toolBar = new JToolBar();// 保存按钮JButton saveButton = new JButton(" 保存");//匿名内部类添加监听saveButton.addActionListener(new ActionListener() { @Overridepublic void actionPerformed(ActionEvent e) {try {parent.saveImage();} catch (IOException e1) {e1.printStackTrace();}}});toolBar.add(saveButton);// 关闭按钮JButton closeButton = new JButton(" 关闭");closeButton.addActionListener(new ActionListener() { @Overridepublic void actionPerformed(ActionEvent e) {System.exit(0);}});toolBar.add(closeButton);this.add(toolBar, BorderLayout.CENTER);}}public static void main(String[] args) {EventQueue.invokeLater(new Runnable() {@Overridepublic void run() {try {cutScreen cutScreen = new cutScreen(); cutScreen.setVisible(true);} catch (Exception e) {e.printStackTrace();}}});}}六、实验结果文件毎 20155924145937.jpg文件类型:JPGW图6.2保存七、个人总结一周的课程设计结束了,刚开始对所要设计的课题完全没有头绪,通过网上查找一 些相关资料和同学的帮助,成功设计出能够实现屏幕截图的 java 程序。

相关文档
最新文档