实现屏幕截图的小程序 java课程设计
java编写截图工具
![java编写截图工具](https://img.taocdn.com/s3/m/1d5b02d280eb6294dd886c4f.png)
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编程实现屏幕截图(截屏)代码总结](https://img.taocdn.com/s3/m/de0e6006876fb84ae45c3b3567ec102de2bddfdc.png)
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实现屏幕共享的小程序](https://img.taocdn.com/s3/m/1f1bc39a6429647d27284b73f242336c1eb93071.png)
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(); //垃圾回收}});}}很晚了,从未成品中抽取了这么个⼩功能,因为答应某位童鞋给链接的,距离成品还有很多要写,后续补上吧。
微信小程序使用canvas画布实现当前页面截屏并分享
![微信小程序使用canvas画布实现当前页面截屏并分享](https://img.taocdn.com/s3/m/ca4ef90efd4ffe4733687e21af45b307e871f966.png)
微信⼩程序使⽤canvas画布实现当前页⾯截屏并分享前⾔:有些时候需要再⼩程序中分享⼀些动态⽣成的图⽚,⽐如页⾯截屏、商品卡⽚,虚拟卡券等等。
但是⼩程序都没有开放页⾯截屏接⼝的,最多也就是提供设备截屏事件监测的API。
所以,基于⽬前的情况,⼩程序对页⾯进⾏截屏,本⾝就是个伪命题,能做的只有⽤现有技术去模拟了。
要解决这个问题,⽬前除了canvas画布合成,没有其他什么⽐较好的解决⽅法。
这⾥就介绍下微信⼩程序中使⽤canvas来模拟页⾯截屏并分享的功能。
具体代码如下:index.wxml1<!--动态合成图⽚的画布-->2<canvas canvas-id="shareBox"></canvas>3<!--动态合成图⽚的画布end-->4<!--页⾯展⽰部分-->5<view id="content">6<view class="f0"><image class="goodsImg" src="/imgs/demo.jpg"></image></view>7<view class="goodsTitle">8<view class="goodsName">哈根达斯 298元冰淇淋蛋糕</view>9<view class="goodsPrice">298.00元</view>10</view>11</view>12<!--页⾯展⽰部分end-->index.js1 const app = getApp()2//尺⼨⽐例计算(页⾯宽度已750为准,即750*scale,所有尺⼨乘以scale,即可兼容各种⼤⼩屏幕)3 const scale = wx.getSystemInfoSync().windowWidth / 7504 Page({5 data: {6 shareUrl: ""7 },8 onLoad(e) {9 },10 onReady: function() {11this.drawShareImage()12 },13 drawShareImage() {14//绘制canvas图⽚15//创建⼀个canvas对象16 const ctx = wx.createCanvasContext('shareBox', this);17// this.drawNormalText(ctx, "canvas⽣成的图⽚", 0, 0, 30, '#ffffff', 'left', 'middle')18//商品主图19var bgSize1 = 750 / 50020this.drawImage(ctx, "/imgs/demo.jpg", 20, 20, 710, 710 / bgSize1);21//绘制商品标题部分22var bgSize2 = 750 / 24623this.drawImage(ctx, "/imgs/detail-name-bg.jpg", 20, 490, 710, 710 / bgSize2);24//绘制分享标题25this.drawNormalText(ctx, "canvas⽣成的图⽚", 50, 548, 30, '#ffffff', 'left', 'middle')26this.drawNormalText(ctx, "230.00元", 50, 660, 30, 'red', 'left', 'middle')27this.drawNormalText(ctx, "230.00元", 50 + 1, 660, 30, 'red', 'left', 'middle')28this.drawNormalText(ctx, "230.00元", 50, 660 + 1, 30, 'red', 'left', 'middle')29this.drawNormalText(ctx, "230.00元", 50 + 1, 660 + 1, 30, 'red', 'left', 'middle')30//绘制canvas标记(绘制圆形并加阴影)31 ctx.arc(120 * scale, 120 * scale, 80 * scale, 0, 5 * scale * Math.PI)32 ctx.setFillStyle('#22aaff')33 ctx.setShadow(0, 0, 20 * scale, "#aaaaaa")34 ctx.fill()35this.drawNormalText(ctx, "Canvas", 118, 100, 30, 'white', 'center', 'middle')36this.drawNormalText(ctx, "合成", 118, 140, 30, 'white', 'center', 'middle')3738//绘制画布,并在回调中获取画布⽂件的临时路径39var self = this40 ctx.draw(true, function() {41 wx.canvasToTempFilePath({42 canvasId: 'shareBox',43 success(res) {44 console.log(res)45if (res.tempFilePath) {46 self.setData({47 shareUrl: res.tempFilePath48 })49 wx.setStorageSync("shareUrl", res.tempFilePath)50 }51 }52 })53 });54 },55//绘制图⽚封装56 drawImage(ctx, url, x, y, w, h) {57 ctx.drawImage(url, x * scale, y * scale, w * scale, h * scale);58 },59// 绘制只有⼀⾏的⽂字60 drawNormalText(ctx, str, x, y, font, style, align, baseLine) {61 ctx.setFontSize(font * scale);62 ctx.setFillStyle(style);63 ctx.setTextAlign(align);64 ctx.setTextBaseline(baseLine);65 ctx.fillText(str, x * scale, y * scale);66 },67//onShareAppMessage(res) {}68 })注意事项:1.canvas中并没有类似rpx之类的⾃适应单位,所以需要提前定义好页⾯尺⼨⽐例,有利于实现不同屏幕兼容性。
本科毕业设计-java—课程设计报告聊天小程序
![本科毕业设计-java—课程设计报告聊天小程序](https://img.taocdn.com/s3/m/5bf113f66294dd88d0d26b3a.png)
课程设计说明书课程名称:Java程序设计专业:班级:设计人:2015年 1月 14 日课程设计任务书一、课程设计题目:聊天小程序二、设计原始资料:1、雍俊海,《Java程序设计教程》,清华大学出版社,2007;2、耿祥义,张跃平,《Java 2 实用教程》,清华大学出版社;3、张跃平,耿祥义,《Java 2 实验指导》,清华大学出版社;三、设计应解决下列各主要问题:1、用图形用户界面;(使用socket通信)2、能实现一个聊天室中的多人聊天;3、可以实现两个私聊;四、设计说明书应附有下列图纸:运行结果截图五、小组分工说明:六、命题发出日期:2014.12.29 设计完成日期: 2015.1.14指导教师评语成绩:指导教师(签章):年月日目录1需求分析说明 (1)1.1背景 (1)1.2 功能要求 (1)1.3 运行环境 (1)1.4功能实现 (1)2概要设计说明 (2)2.1 模块调用图 (2)2.2 套接字连接示意图 (2)2.3 主要函数声明 (2)3详细设计说明 (4)3.1功能描述 (4)3.2 主要功能详述 (4)3.3 主要代码分析 (5)4调试分析 (9)4.1遇到的问题 (9)4.2 测试结果分析 (10)5用户使用说明 (10)6课程设计总结 (12)7附录 (13)1 需求分析说明1.1 背景在当今的信息时代,越来越多的聊天工具被应用,Java语言是当今流行的网络编程语言,它具有面向对象、与平台无关、安全、多线程等特点。
此课程设计的题目是聊天小程序,巩固所学的Java语言基本知识,增进Java语言编辑基本功,拓宽常用类库的应用。
使我们把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法。
1.2 功能要求1、使用图形用户界面。
2、能实现一个聊天室中多人聊天。
3、可以两人私聊。
1.3 运行环境本程序基于Java和Eclipse开发环境,可以在一般的装有Windows系统的主机上运行。
java课程设计(贪吃蛇)
![java课程设计(贪吃蛇)](https://img.taocdn.com/s3/m/6f5642f0dbef5ef7ba0d4a7302768e9950e76e59.png)
java课程设计(贪吃蛇)一、教学目标本节课的教学目标是让学生掌握Java编程语言的基本语法和编程思想,学会使用Java编写简单的程序。
具体包括以下三个方面的目标:1.知识目标:使学生了解Java编程语言的基本语法和结构,包括数据类型、变量、运算符、控制语句等;理解面向对象编程的基本概念,包括类、对象、封装、继承等。
2.技能目标:培养学生使用Java编程语言解决实际问题的能力,学会编写简单的Java程序;培养学生团队合作的能力,学会分工合作完成项目。
3.情感态度价值观目标:培养学生对编程的兴趣和热情,提高学生自主学习的积极性;培养学生勇于尝试、克服困难的精神,增强学生的自信心。
二、教学内容本节课的教学内容主要包括以下几个部分:1.Java编程语言的基本语法和结构,包括数据类型、变量、运算符、控制语句等;2.面向对象编程的基本概念,包括类、对象、封装、继承等;3.Java编程语言的应用,学会编写简单的Java程序;4.团队合作完成项目,培养学生的团队合作能力。
三、教学方法为了达到本节课的教学目标,我们将采用以下几种教学方法:1.讲授法:教师讲解Java编程语言的基本语法和结构,面向对象编程的基本概念;2.案例分析法:分析实际案例,让学生学会使用Java编程语言解决实际问题;3.实验法:学生动手实践,编写简单的Java程序;4.小组讨论法:学生分组讨论,培养团队合作能力。
四、教学资源为了支持本节课的教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:Java编程基础,用于引导学生学习基本语法和结构;2.多媒体资料:PPT、教学视频等,用于辅助讲解和演示;3.实验设备:计算机、网络等,用于学生动手实践;4.编程工具:Eclipse、IntelliJ IDEA等,用于学生编写和调试程序。
五、教学评估为了全面、客观、公正地评估学生的学习成果,我们将采用以下评估方式:1.平时表现:通过观察学生在课堂上的参与程度、提问回答、小组讨论等表现,评估学生的学习态度和积极性;2.作业:布置适量的作业,评估学生对知识的掌握程度和编程能力;3.考试:进行期中和期末考试,评估学生对Java编程语言的基本语法和结构的掌握程度,以及解决实际问题的能力;4.项目完成情况:评估学生在团队合作完成项目的过程中的表现,包括分工合作、沟通协作、解决问题等能力。
java截图课程设计
![java截图课程设计](https://img.taocdn.com/s3/m/3e8ba6a1c9d376eeaeaad1f34693daef5ff7134b.png)
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课程设计(画图板软件开发和设计)](https://img.taocdn.com/s3/m/d2317569182e453610661ed9ad51f01dc2815730.png)
功能测试:确保所有功能正常工作 性能测试:评估系统性能,如响应时间、吞吐量等 兼容性测试:确保在不同操作系统和浏览器上正常运行 用户体验测试:评估用户界面设计、易用性等
硬件要求:CPU、内存、硬盘等 软件要求:JDK、Tomcat、数据库等 部署步骤:安装JDK、Tomcat、数据库等,配置环境变量,部署项目 运行步骤:启动Tomcat,访问项目地址,进行测试和调试
优化网络 传输:减 少网络延 迟,提高 数据传输 速度
优化数据 库访问: 减少数据 库查询次 数,提高 查询效率
优化系统 日志:减 少日志记 录,提高 系统运行 效率
优化系统 安全:加 强系统安 全防护, 提高系统 安全性能
项目成果:成功开发出画图板 软件,实现了基本的绘图功能
项目目标:开发一个画图板 软件,实现基本的绘图功能
数据库索引:用户ID、画图板ID等
数据库备份和恢复策略:定期备份,异地 存储,灾难恢复等
数据库安全:用户权限管理,数据加密, 访问控制等
画笔算法:实现画笔的绘制和移动
图形选择算法:实现图形的选择和绘制
橡皮擦算法:实现橡皮擦的擦除功能
颜色选择算法:实现颜色的选择和切换
撤销和重做算法:实现撤销和重做操作
项目经验:在开发过程中,学 习了JAVA编程、图形绘制、用
户界面设计等知识
项目展望:未来可以继续优化 画图板软件,增加更多功能,
提高用户体验
功能实现:部分功 能实现不够完善, 需要进一步优化
用户体验:界面 设计不够友好, 需要改进
性能优化:程序 运行速度较慢, 需要优化
团队协作:团队成 员之间沟通不够顺 畅,需要加强团队 协作能力
画图板功 能:支持 绘制各种 图形,如 直线、曲 线、矩形、 圆形等
java画图课程设计
![java画图课程设计](https://img.taocdn.com/s3/m/1f5e2483d05abe23482fb4daa58da0116d171f6b.png)
java画图课程设计一、教学目标本节课旨在让学生掌握Java基本绘图方法,能够使用Java编写简单的图形界面程序。
1.了解Java绘图的基本概念和方法。
2.掌握Java中常用的绘图类和方法。
3.理解图形界面程序的设计原理。
4.能够使用Java编写简单的图形界面程序。
5.能够灵活运用Java绘图方法,实现基本的图形绘制。
6.能够根据需求,设计并实现简单的图形界面程序。
情感态度价值观目标:1.培养学生对计算机编程的兴趣和热情。
2.培养学生解决问题的能力和创新精神。
3.培养学生团队协作和交流的能力。
二、教学内容本节课的教学内容主要包括Java绘图的基本概念和方法,以及图形界面程序的设计原理。
1.Java绘图基本概念和方法。
2.Java中常用的绘图类和方法。
3.图形界面程序的设计原理。
4.实例演示和练习。
三、教学方法本节课采用讲授法、案例分析法和实验法相结合的教学方法。
1.讲授法:用于讲解Java绘图的基本概念和方法,以及图形界面程序的设计原理。
2.案例分析法:通过分析典型案例,让学生理解和掌握Java绘图的方法和技巧。
3.实验法:让学生通过实际操作,动手编写Java程序,巩固所学知识。
四、教学资源1.教材:《Java程序设计》。
2.参考书:《Java绘图教程》。
3.多媒体资料:PPT课件。
4.实验设备:计算机。
五、教学评估本节课的评估方式包括平时表现、作业和考试。
1.平时表现:通过课堂参与、提问和回答问题等方式,评估学生在课堂上的积极性和主动性。
2.作业:布置相关的绘图程序练习,评估学生对Java绘图方法的掌握程度。
3.考试:期末考试中包含Java绘图相关的题目,评估学生对Java绘图的全面理解和应用能力。
六、教学安排本节课的教学安排如下:1.教学进度:按照教材的章节顺序,逐步讲解Java绘图的基本概念和方法。
2.教学时间:每节课45分钟,其中30分钟用于讲授和案例分析,15分钟用于实验和实践。
3.教学地点:计算机实验室,确保学生能够直接进行绘图程序的编写和运行。
java简单小程序课程设计
![java简单小程序课程设计](https://img.taocdn.com/s3/m/25bb33a6fbb069dc5022aaea998fcc22bdd14360.png)
java简单小程序课程设计一、课程目标知识目标:1. 理解Java编程语言的基本语法和结构;2. 学会使用基本的输入输出语句,实现数据的交互;3. 掌握使用条件语句和循环语句进行逻辑判断和重复操作;4. 了解数组和字符串的基本操作和应用。
技能目标:1. 能够独立编写简单的Java程序,如计算器、九九乘法表等;2. 学会使用调试工具,对程序进行调试和优化;3. 培养良好的编程习惯,编写规范、可读性强的代码;4. 提高问题分析能力,能够将实际问题转化为计算机程序。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发学习热情;2. 培养学生的团队协作精神,学会与他人共同解决问题;3. 增强学生的自信心,敢于面对挑战,克服困难;4. 培养学生的创新意识,鼓励尝试新方法,不断优化程序。
分析课程性质、学生特点和教学要求,本课程旨在让学生掌握Java编程基础,培养实际编程能力。
课程目标具体、可衡量,以便学生和教师能够清晰地了解课程的预期成果。
将目标分解为具体的学习成果,为后续的教学设计和评估提供依据。
二、教学内容1. Java基本语法与结构:包括数据类型、变量、运算符、表达式等;参考教材章节:第一章 Java语言概述,第二章 基本数据类型与运算符。
2. 输入输出语句:掌握Scanner类进行数据输入,以及System.out.print和System.out.println进行数据输出;参考教材章节:第三章 输入输出流。
3. 条件语句与循环语句:理解if、if-else、switch等条件语句,以及for、while、do-while等循环语句;参考教材章节:第四章 逻辑控制语句。
4. 数组与字符串:掌握一维数组和二维数组的定义、初始化、遍历等操作,了解字符串的基本操作;参考教材章节:第五章 数组,第六章 字符串。
5. 简单小程序案例分析:分析计算器、九九乘法表等程序,学习实际编程中的应用;参考教材章节:各章节实例。
java课程设计打字小程序
![java课程设计打字小程序](https://img.taocdn.com/s3/m/a1af3da2c9d376eeaeaad1f34693daef5ef713ab.png)
java课程设计打字小程序一、教学目标本章节的教学目标为:知识目标:使学生掌握Java编程语言的基本语法和结构;理解面向对象编程的基本概念和方法。
技能目标:培养学生具备基本的Java程序设计能力,能够独立完成简单的Java程序;培养学生运用Java语言解决实际问题的能力。
情感态度价值观目标:培养学生对计算机科学的兴趣和热情,提高学生自主学习和探究的精神;培养学生良好的团队合作意识和沟通能力。
二、教学内容本章节的教学内容为:第1节:Java语言简介学习Java语言的发展历史、特点和应用领域;了解Java语言的基本语法和结构。
第2节:Java基本数据类型和运算符学习Java语言的基本数据类型、运算符和表达式;掌握Java语言的数据类型转换和运算符优先级。
第3节:控制语句学习Java语言的条件语句、循环语句和分支语句;掌握条件语句和循环语句的使用方法和注意事项。
第4节:面向对象编程基础学习面向对象编程的基本概念和方法;了解类、对象、封装、继承和多态等概念。
第5节:Java数组和字符串学习Java语言的数组和字符串类型;掌握数组的创建、使用和遍历,字符串的连接、转换和操作。
第6节:Java异常处理学习Java语言的异常处理机制;掌握try-catch-finally语句的使用和异常类的定义。
三、教学方法本章节的教学方法为:采用讲授法,讲解Java语言的基本语法和结构;采用案例分析法,分析实际编程问题,引导学生运用Java语言解决问题;采用实验法,让学生动手编写Java程序,巩固所学知识。
四、教学资源本章节的教学资源包括:教材:《Java编程思想》或《Java核心技术》;参考书:《Java编程指南》或《Java实战手册》;多媒体资料:教学PPT、视频教程;实验设备:计算机、网络环境。
五、教学评估本章节的教学评估方式包括:1.平时表现:评估学生在课堂上的参与程度、提问和回答问题的表现,以及课堂作业的完成情况。
javaweb小程序课程设计
![javaweb小程序课程设计](https://img.taocdn.com/s3/m/5a2800380a1c59eef8c75fbfc77da26925c59630.png)
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课程设计拼图游戏](https://img.taocdn.com/s3/m/277e2e1300f69e3143323968011ca300a6c3f68d.png)
java课程设计拼图游戏一、教学目标本节课的教学目标是让学生掌握Java编程的基本语法和逻辑思维能力,通过编写Java程序实现一个简单的拼图游戏。
具体目标如下:1.知识目标:–掌握Java的基本数据类型、运算符、控制结构。
–了解面向对象编程的基本概念,如类、对象、封装、继承。
–学习Java的图形用户界面编程,如Swing组件、事件处理等。
2.技能目标:–能够运用Java编程语言编写简单的程序。
–能够运用面向对象的思想设计程序。
–能够使用Java图形用户界面库编写用户友好的界面。
3.情感态度价值观目标:–培养学生的编程兴趣,提高学生解决问题的能力。
–培养学生团队合作的精神,学会分享和交流。
–培养学生对技术的热爱,提高学生对计算机科学的认知。
二、教学内容本节课的教学内容主要包括以下几个部分:1.Java基本语法和逻辑思维能力的培养。
2.面向对象编程的基本概念和应用。
3.Java图形用户界面编程,包括Swing组件的使用和事件处理。
具体的教学大纲如下:1.第一课时:Java基本语法和逻辑思维能力的培养。
–数据类型、运算符、控制结构。
–简单的数学计算程序编写。
2.第二课时:面向对象编程的基本概念和应用。
–类和对象的概念。
–封装、继承的应用。
–简单的图形界面程序编写。
3.第三课时:Java图形用户界面编程。
–Swing组件的使用。
–事件处理机制。
–拼图游戏的实现。
三、教学方法为了激发学生的学习兴趣和主动性,本节课将采用多种教学方法,如讲授法、讨论法、案例分析法、实验法等。
1.讲授法:用于讲解Java基本语法、面向对象编程概念和图形用户界面编程的基础知识。
2.讨论法:通过小组讨论,让学生深入理解面向对象编程的优势和应用。
3.案例分析法:分析实际的拼图游戏案例,让学生了解图形用户界面编程的实现方法。
4.实验法:让学生动手编写拼图游戏程序,巩固所学知识。
四、教学资源本节课的教学资源包括教材、参考书、多媒体资料和实验设备。
java课程设计报告--聊天小程序
![java课程设计报告--聊天小程序](https://img.taocdn.com/s3/m/42b194fb650e52ea541898d3.png)
课程设计说明书课程名称:Java 程序设计专业:班级:设计人:2015年1 月14日课程设计任务书一、课程设计题目:聊天小程序二、设计原始资料:1、雍俊海,《 Java 程序设计教程》,清华大学出版社,2007;2、耿祥义,张跃平,《Java 2实用教程》,清华大学出版社;3、张跃平,耿祥义,《Java 2实验指导》,清华大学出版社;三、设计应解决下列各主要问题:1 、用图形用户界面;(使用socket通信)2、能实现一个聊天室中的多人聊天;3、可以实现两个私聊;四、设计说明书应附有下列图纸:运行结果截图五、小组分工说明:六、命题发出日期:2014.12.29设计完成日期:2015.1.14指导教师评语成绩:指导教师(签章):年月日目录1需求分析说明,,,,,,,,,,,,,,,,,,,,,,11.1 背景, ,, ,, ,,,,,,,,,,,,,,,,,11.2功能要求 ,,,,,,,,,,,,,,,,,,,,,,,11.3运行环境 ,,,,,,,,,,,,,,,,,,,,,,,11. 4 功能实现,,,,,,,,,,,,,,,, ,, ,, ,,1 2概要设计说明,,,,,,,,,,,,,,,,,,,,,,22.1模块调用图 ,,,,,,,,,,,,,,,,,,,,,,,22.2套接字连接示意图 ,,,,,,,,,,,,,,,,,,,,22.3主要函数声明 ,,,,,,,,,,,,,,,,,,,,,,2 3详细设计说明 ,,,,,,,,,,,,,,,,,,,,,,43.1 功能描述,,, ,,,,,,,,,,,,,,,,,,43.2主要功能详述 ,,,,,,,,,,,,,,,,,,,,,43.3主要代码分析 ,,,,,,,,,,,,,,,,,,,,,,5 4调试分析, ,, ,,,,,,,,,,,,,,,,,,,94.1 遇到的问题,, ,,,,,,,,,,,,,,,,,,94.2测试结果分析 ,,,,,,,,,,,,,,,,,,,,,,10 5用户使用说明,,,,,,,,,,,,,,,,,,,,,10 6课程设计总结,,,,,,,,,,,,,,,,,,,,,12 7附录,,,,,, ,,,,,,,,,,,,,,,, 1 31需求分析说明1.1背景在当今的信息时代,越来越多的聊天工具被应用,Java 语言是当今流行的网络编程语言,它具有面向对象、与平台无关、安全、多线程等特点。
实现屏幕截图的小程序 java课程设计
![实现屏幕截图的小程序 java课程设计](https://img.taocdn.com/s3/m/302403b0c5da50e2534d7f25.png)
实现安全工作方针与目标的措施经济与管理学院信息管理与信息系统专业《java实验周》报告(2015/2016学年第一学期)学生姓名:学生班级:学生学号:指导教师:2015年12月25日实现屏幕截图的小程序一、实验题目实现屏幕截图的小程序二、实验要求编程一个应用小程序,能够具有屏幕截图的功能,截图的具体实现有:(1)显示出工作区域,即能够截屏的面积;(2)鼠标可以随意滑动进行截图;(3)将所截取的图片保存在想要保存的位置;(4)程序结束后可以退出整个应用。
三、程序流程图3.1 业务流程图四、技术原理程序的主类是cutScreen,继承自无边框的框架JWindow;cutScreen()是一个定义屏幕尺寸的构造方法;使用方法mousePressed(MouseEvent e)来监听当前鼠标点击的动作;用方法mouseReleased(MouseEvent e)监听鼠标松开时,显示操作窗口;方法mouseDragged(MouseEvent e)监听拖动鼠标;paint(Graphics g)画出指定的工作区域;saveImage()保存图像。
工具栏ToolsWindow类,继承自有边框的框架JFrame;方法init()用来设置布局方式为BorderLayout;run()捕捉屏幕截图。
五、附实验代码import java.awt.*;import java.awt.event.*;import java.awt.image.BufferedImage;import java.awt.image.RescaleOp;import java.io.File;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;import javax.imageio.ImageIO;import javax.swing.*;import javax.swing.filechooser.FileNameExtensionFilter;import javax.swing.filechooser.FileSystemView;//Jwindow 是一个无边框的框架public class cutScreen extends JWindow {//beginX 开始的横坐标; beginY开始的纵坐标p rivate int beginX, beginY, endX, endY;p rivate BufferedImage image = null;p rivate BufferedImage tempImage = null;p rivate BufferedImage saveImage = null;p rivate ToolsWindow tools = null;//构造方法p ublic 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);// 将此窗口置于前端,并可以将其设为焦点 Windowtools.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//画出指定的工作区域p ublic void paint(Graphics g) {//进行逐像素重缩放RescaleOp ro = new RescaleOp(0.8f, 0, null);tempImage = ro.filter(image, null);g.drawImage(tempImage, 0, 0, this);}// 保存图像到文件p ublic 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 内部类c lass ToolsWindow extends JFrame {private cutScreen parent;//构造函数(cutScreen,int x, int y)x代表鼠标释放位置的横坐标,public ToolsWindow(cutScreen parent, int x, int y) {this.parent = parent;this.init();this.setLocation(x, y);//让窗口里面的组建确定为最佳大小this.pack();this.setVisible(true);}private void init() {//设置布局方式为BorderLayoutthis.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);}}p ublic 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();}}});}}六、实验结果图6.1 截图图6.2 保存七、个人总结一周的课程设计结束了,刚开始对所要设计的课题完全没有头绪,通过网上查找一些相关资料和同学的帮助,成功设计出能够实现屏幕截图的java程序。
java备忘录编写源代码及运行界面截图
![java备忘录编写源代码及运行界面截图](https://img.taocdn.com/s3/m/b6941138a6c30c2259019ec4.png)
//M e m o r i a l.j a v a importjava.awt.*;importimportimportjava.io.*;importjava.util.*;importimportjavax.swing.*; publicclassMemorialextendsJFrameimplementsActionListener{/***@paramargs*/privateJLabeltitle,picture,mark,jl1,jl2,jl3,jl4;privateJTextFieldjt1,jt2,jt3;privateJButtonOk,Cancle;privatestaticStringname1=null;privatestaticStringpass1=null;//构造函数publicMemorial(){title=newJLabel("我的备忘录");picture=newJLabel(newImageIcon("photos/3.jpg"));//背景标签/*mark=newJLabel(newImageIcon("3.jpg"));*/jl1=newJLabel("登录名:");jl2=newJLabel("登录密码:");jl3=newJLabel();jl4=newJLabel("看不清");jt1=newJTextField();jt2=newJTextField();jt3=newJTextField();Ok=newJButton("登录");Cancle=newJButton("取消");}//页面布局publicvoidlaunchFrame(){JPanelp=(JPanel)getContentPane();jl3.setText(getcode());jl3.setForeground(Color.cyan);//设置验证码的颜色jl3.setBorder(BorderFactory.createRaisedBevelBorder());//使验证码凸出显示jl4.setForeground(Color.magenta);//设置“看不清”标签的前景色为洋红色jl4.addMouseListener(newaddEvent());//为“看不清”标签添加鼠标监听器Ok.addActionListener(this);//为“登录”按钮添加监听器Cancle.addActionListener(this);//为“取消”按钮添加监听器Ok.setBorder(BorderFactory.createRaisedBevelBorder());//使按钮凸出显示Cancle.setBorder(BorderFactory.createRaisedBevelBorder());//****设置背景图片p.setLayout(null);//使用setBounds(),必须使布局为nullpicture.setBounds(0,0,500,330);p.add(picture);p.setOpaque(false);//使内容窗格透明//把背景图片添加到分层窗格的最底层作为背景getLayeredPane().add(picture,newInteger(Integer.MIN_VALUE));//****设置标题title.setForeground(Color.red);title.setFont(newFont("华文行楷",Font.BOLD,20));title.setBounds(190,20,120,40);p.add(title);//****设置图标BufferedImageicon=null;try{icon=ImageIO.read(newFile("photos/9.jpg"));this.setIconImage(icon);}catch(Exceptione){}jl1.setBounds(140,80,100,25);p.add(jl1);jt1.setBounds(240,80,100,25);p.add(jt1);jl2.setBounds(140,120,100,25);p.add(jl2);jt2.setBounds(240,120,100,25);p.add(jt2);jt3.setBounds(140,160,70,25);p.add(jt3);jl3.setBounds(250,160,40,25);p.add(jl3);jl4.setBounds(300,160,50,25);p.add(jl4);Ok.setBounds(150,220,60,30);p.add(Ok);Cancle.setBounds(260,220,60,30);p.add(Cancle);setTitle("登录界面");setBounds(300,200,500,330);setResizable(false);//窗口不能被拖动setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}//获取验证码publicStringgetcode(){Randomrd=newRandom();Stringstr="";inta[]=newint[4];for(inti=0;i<4;i++){a[i]=rd.nextInt(200);if((a[i]>=48&&a[i]<=57)||(a[i]>=65&&a[i]<=90)||(a[i]>=97&&a[i]<=122)){ str=str+(char)a[i];}else{//获取的字符不在范围内,获取未成功;i--;//i--,保证最终获取到四位的验证码}}returnstr;}//从文件中读取正确的用户名publicstaticStringseekname()throwsIOException{InputStreamfin1=newFileInputStream("message\\用户名.txt");bytec[]=newbyte[10];intlen=0;while((len=fin1.read(c))!=-1){name1=newString(c,0,len);}returnname1;}//从文件中读取正确的登录密码publicstaticStringseekpass()throwsIOException{InputStreamfin2=newFileInputStream("message\\登录密码.txt");bytec[]=newbyte[10];intlen=0;while((len=fin2.read(c))!=-1){pass1=newString(c,0,len);}returnpass1;}//判断文本框是否为空publicbooleanisEmpty(JTextFieldjt){if(jt.getText().equals("")){returntrue;}returnfalse;}//判断操作是否非法,主要是针对各文本框而言的;若文本框为空,提示填写信息publicbooleanisLegal(){if(isEmpty(jt1)){JOptionPane.showMessageDialog(null,"用户名不能为空!");returnfalse;}elseif(isEmpty(jt2)){JOptionPane.showMessageDialog(null,"密码不能为空!");returnfalse;}elseif(isEmpty(jt3)){JOptionPane.showMessageDialog(null,"请输入验证码!");returnfalse;}else{returntrue;}}//按钮事件处理@OverridepublicvoidactionPerformed(ActionEvente){//TODOAuto-generatedmethodstubObjectsource=e.getSource();Stringname2=jt1.getText();Stringpass2=jt2.getText();Stringcode2=jt3.getText();Stringcode1=jl3.getText();if(source==Ok){if(isLegal()){//调用isLegal()函数,保证文本框不为空try{//调用函数seekname(),seekpass(),文件可能不存在if(name2.equals(seekname())){if(pass2.equals(seekpass())){if(code2.equalsIgnoreCase(code1)){//在用户登录信息完全正确的条件下,进入备忘录(含日历)JOptionPane.showMessageDialog(null,"登录成功!");Calendarcalendar=Calendar.getInstance();inty=calendar.get(Calendar.YEAR);intm=calendar.get(Calendar.MONTH)+1;intd=calendar.get(Calendar.DAY_OF_MONTH);newCalendarPad(y,m,d);this.dispose();//关闭登录界面}else{JOptionPane.showMessageDialog(this,"验证码错误,请重新输入!","错误提示",JOptionPane.ERROR_MESSAGE);jl3.setText(getcode());}}else{JOptionPane.showMessageDialog(this,"密码错误,请重新输入!","错误提示",JOptionPane.ERROR_MESSAGE);}}else{JOptionPane.showMessageDialog(this,"您输入的用户名不存在,请重新输入!","错误提示",JOptionPane.ERROR_MESSAGE);}}catch(HeadlessException|IOExceptione1){//TODOAuto-generatedcatchblocke1.printStackTrace();}}}if(source==Cancle){//询问对话框intchoose=JOptionPane.showConfirmDialog(null,"确定取消登录?","询问",JOptionPane.YES_NO_OPTION);if(choose==JOptionPane.YES_OPTION)System.exit(0);//退出登录系统elseif(choose==JOptionPane.NO_OPTION){}}}classaddEventextendsMouseAdapter{@OverridepublicvoidmouseClicked(MouseEvente){//TODOAuto-generatedmethodstubjl3.setText(getcode());}}publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubnewMemorial().launchFrame();}}//year.javaimportjavax.swing.*;importjava.awt.*;importpublicclassYearextendsJPanel//ActionListener接口{privateintyear;privateJTextFieldshowYear=null;privateJButtonnextYear,lastYear;privateCalendarPadcal;publicYear(CalendarPadc){showYear=newJTextField(4);this.cal=c;year=cal.getYear();nextYear=newJButton("下年");lastYear=newJButton("上年");launch();}//布局函数publicvoidlaunch(){showYear.setForeground(Color.blue);showYear.setFont(newFont("宋体",Font.BOLD,16));setLayout(newGridLayout(1,3,5,5));add(lastYear);add(showYear);add(nextYear);showYear.addActionListener(newaddEvent());lastYear.addActionListener(newaddEvent());nextYear.addActionListener(newaddEvent());lastYear.setBorder(BorderFactory.createRaisedBevelBorder());//使按钮凸出nextYear.setBorder(BorderFactory.createRaisedBevelBorder());}//年publicvoidsetYear(intyear){this.year=year;showYear.setText(""+year);}publicintgetYear(){returnyear;}//事件类classaddEventimplementsActionListener{@OverridepublicvoidactionPerformed(ActionEvente){if(e.getSource()==lastYear)//对年份进行判断操作{year=year-1;showYear.setText(""+year);cal.setYear(year);cal.setCal(year,cal.getMonth());}elseif(e.getSource()==nextYear){year=year+1;showYear.setText(""+year);cal.setYear(year);cal.setCal(year,cal.getMonth());}elseif(e.getSource()==showYear){try{year=Integer.parseInt(showYear.getText());//年份控制在一定范围if(year>=-10000&&year<=10000){showYear.setText(""+year);cal.setYear(year);cal.setCal(year,cal.getMonth());}else{JOptionPane.showMessageDialog(null,"输入的年份有误,请重新输入!","错误提示",JOptionPane.ERROR_MESSAGE);showYear.setText("");}}catch(NumberFormatExceptionee){JOptionPane.showMessageDialog(null,"请输入正确的年份格式!","错误提示",JOptionPane.ERROR_MESSAGE);showYear.setText("");}}}}}//Month.java//对月份的选择importjavax.swing.*;importjava.awt.*;importpublicclassMonthextendsJPanel//ActionListener接口{privateintmonth;privateJTextFieldshowMonth=null;privateJButtonlastMonth,nextMonth;privateCalendarPadcal;publicMonth(CalendarPadc){this.cal=c;showMonth=newJTextField();month=c.getMonth();nextMonth=newJButton("下月");lastMonth=newJButton("上月");launch();}//页面布局publicvoidlaunch(){showMonth.setEditable(false);//设置月份不可被编辑showMonth.setForeground(Color.blue);showMonth.setFont(newFont("宋体",Font.BOLD,16));setLayout(newGridLayout(1,3,5,5));add(lastMonth);add(showMonth);add(nextMonth);lastMonth.addActionListener(newaddEvent());nextMonth.addActionListener(newaddEvent());lastMonth.setBorder(BorderFactory.createRaisedBevelBorder()); nextMonth.setBorder(BorderFactory.createRaisedBevelBorder()); showMonth.setText(""+month);}publicvoidsetMonth(intmonth){if(month<=12&&month>=1){this.month=month;}else{this.month=1;}showMonth.setText(""+month);}publicintgetMonth(){returnmonth;}//事件处理classaddEventimplementsActionListener{@OverridepublicvoidactionPerformed(ActionEvente){if(e.getSource()==lastMonth){if(month>=2){month=month-1;cal.setMonth(month);cal.setCal(cal.getYear(),month);}elseif(month==1){month=12;cal.setMonth(month);cal.setCal(cal.getYear(),month);}showMonth.setText(""+month);}elseif(e.getSource()==nextMonth){if(month<12){month=month+1;cal.setMonth(month);cal.setCal(cal.getYear(),month);}elseif(month==12){month=1;cal.setMonth(month);cal.setCal(cal.getYear(),month);}showMonth.setText(""+month);}}}}//Clock.java//提取当前的年月日时分秒,时钟importjava.awt.*;importimportimport/*1.创建线程一种方法是将类声明为Thread的子类。
java实现屏幕截图功能毕业设计与实现
![java实现屏幕截图功能毕业设计与实现](https://img.taocdn.com/s3/m/69d00731a5e9856a57126000.png)
java实现屏幕截图功能摘要捕捉图像方式灵活,主要可以捕捉整个屏幕、活动窗口、选定区域、固定区域、选定控件、选定菜单等,图像输出方式多样,主要包括文件、剪贴板、画图。
软件具有捕捉光标、设置捕捉前延时、显示屏幕放大镜、自定义捕捉热键、图像文件自动按时间或模板命名。
捕捉到的图像能够以保存图像文件、复制到剪贴板、等多种方式输出。
图像文件自动命名功能,能够对捕捉到的图片进行自动命名保存,可以设置根据时间或文件名模板自动保存。
捕捉图像预览功能,在捕捉完成后,显示预览窗口。
图像保存目录及格式设置功能,可以为捕捉的图像规定默认保存位置及图像格式,图像格式包括BMP、GIF、JPG、PNG、TIF等。
捕捉层叠菜单功能,在选定菜单捕捉时可以设置是否捕捉层叠(级联)菜单。
可以截取多个图片,分多层界面显示已截图片。
关键词:截图;保存;复制到剪切板Java implementation screenshot functionAbstractCapture the image flexibly, and the main can capture the whole screen, the active window, the selected region, fixed area, the selected control, select menu, image output way diverse, mainly including documents, clipboard, drawing.Software is to capture the cursor, set the delay before capture, display screen magnifier, custom capture hotkey, automatic image file on time or template name.Capture the image to save the image file, copied to the clipboard, a variety of ways, such as the output. Image file named function automatically, to be able to capture the image automatically named save, can be set according to time or template automatically saved in the file name.Capture the image preview function, after completion of the capture, display the preview window.Image save directory and format setting function, can be preserved to capture images of the provisions of the default location and image format, image format, including BMP, GIF, JPG, PNG, TIF, etc.When capture to capture the cascading menu function, the selected menu you can set whether to capture the cascading menu (cascade).Can capture multiple images, multi-layer interface has sectional image display.Key words:capture; Save; Copied to the clipboard目录摘要 (i)Abstract (ii)目录 (1)1 绪论 (1)1.1 选题背景 (1)1.2 课题研究内容 (1)2 开发平台及技术 (3)2.1 Eclipse (3)2.2 Java (3)2.2.1 历史起源 (4)2.2.2 基本组成 (4)2.2.3 主要特性 (4)2.2.4 基本术语 (5)3 可行性分析及开发环境的选择 (7)3.1 可行性分析 (7)3.1.1 技术可行性分析 (7)3.1.2 经济可行性分析 (7)3.1.3 法律可行性分析 (7)3.1.4 开发人员与进程可行性分析 (7)3.1.5 结论意见 (8)3.2 运行环境的选择 (8)3.3 开发工具的选择 (8)4 系统需求分析 (9)4.1 性能需求 (9)4.2 E-R图设计 (9)5 系统设计 (10)5.1 本系统的设计目标 (10)5.2 系统功能整体设计 (10)6 系统设计实现 (11)6.1 系统主界面实现 (11)6.2 系统截图实现 (12)6.2.1 图片的保存路径 (20)6.2.2 图片的保存格式 (22)7 系统测试与性能分析 (25)7.1 软件测试 (25)7.1.1 软件测试概述 (25)7.1.2 系统整体测试步骤 (25)7.2 截图软件系统测试 (26)7.2.1 保存选项测试 (26)7.2.2 复制到粘贴板选项测试 (26)7.3 测试结果评价 (26)总结 (27)参考文献 (28)致谢 (29)外文引用 (30)中文翻译 (37)1 绪论截图是由电脑截取的显示在屏幕或其他显示设备上的可视图像。
JavaScript+html5canvas实现本地截图教程
![JavaScript+html5canvas实现本地截图教程](https://img.taocdn.com/s3/m/0398decca48da0116c175f0e7cd184254b351b9c.png)
JavaScript+html5canvas实现本地截图教程最近有时间了解了下html5的各API,发现新浪微博的头像设置是使⽤canvas实现截图的,加之前段时间了解了下html5的File API使⽤File API 之FileReader实现⽂件上传更加觉得html5好玩了,想着也试试写写这功能权当学习canvas吧。
下⾯奉上我⾃⼰写的⼀个demo,代码写得⽐较少,很多细节不会处理。
如果有不得当的地⽅恳请指教,谢谢啦 ^_^ ^_^功能实现步奏:⼀、获取⽂件,读取⽂件并⽣成url⼆、根据容器的⼤⼩使⽤canvas绘制图⽚三、使⽤canvas绘制遮罩层四、使⽤canvas绘制裁剪后的图⽚五、拖动裁剪框,重新裁剪图⽚PS:因为是先把demo写好再写这篇⽂章的,所以分段贴的代码是直接从代码⾥⾯⼀段段拷的,要留意this对象喔第⼀步:获取⽂件,读取⽂件并⽣成url在这⾥我是使⽤html5⾥⾯的file api处理本地⽂件上传的,因为这样可以不需要把图⽚上传到服务器,再由服务器返回图⽚地址来做预览,详细请看:使⽤File API 之FileReader实现⽂件上传document.getElementById('post_file').onchange = function() {var fileList = this.files[0];var oFReader = new FileReader();oFReader.readAsDataURL(fileList);oFReader.onload = function (oFREvent) { //当读取操作成功完成时调⽤.postFile.paintImage(oFREvent.target.result);//把预览图⽚url传给函数};} 第⼆步:根据容器的⼤⼩使⽤canvas绘制图⽚在上⼀步使⽤File API的FileReader已经得到了需要上传图⽚的地址了,接下来需要使⽤canvas把这个图⽚绘制出来。
java实现缩略图和抓屏幕
![java实现缩略图和抓屏幕](https://img.taocdn.com/s3/m/ad5e162e4693daef5ff73dd4.png)
java实现缩略图和抓屏幕java实现缩略图和抓屏幕在全球范围内,SUN公司的Java技术培训和认证不仅是Java 开发技术领域最权威的认证,同时也是开发类认证中很重要的一种.以下是我整理的关于java实现缩略图和抓屏幕,希望大家认真阅读!import java.awt.Container;import java.awt.Dimension;import java.awt.Graphics2D;import java.awt.Image;import java.awt.MediaTracker;import java.awt.Rectangle;import java.awt.RenderingHints;import java.awt.Robot;import java.awt.Toolkit;import java.awt.image.BufferedImage;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import javax.imageio.ImageIO;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGEncodeParam;import com.sun.image.codec.jpeg.JPEGImageEncoder;/**** 纯java API实现图片处理*Title:ImageChangeSize*Description:*Copyright: Copyright (c) 2021*Company:* @author* @version 1.0.0*/public class ImageChangeSize{public static void main ( String [] args )throws InterruptedException{//测试生成缩略图createThumbnail(c:\555.gif, 200, 200, 100, c:\uuuu.jpg); //测试捕捉屏幕,每隔一秒捕获一次String path = c:\screen\;int i = 0;for ( ;; ){i++;String filepath = path + i + .jpg;snatchScreen(filepath);Thread.currentThread().sleep(2000);}}/*** 处理图片,改变起大小,可进行缩略和放大* @param filename 源文件名称* @param thumbWidth 处理后宽度* @param thumbHeight 处理后高度* @param quality 品质最高100,最小0* @param outFilename 输出文件名称*/public static void createThumbnail ( String filename, int thumbWidth, int thumbHeight, int quality, String outFilename ){Image image = Toolkit.getDefaultToolkit().getImage(filename);MediaTracker mediaTracker = new MediaTracker(new Container());mediaTracker.addImage(image, 0);try{mediaTracker.waitForID(0);double thumbRatio = (double) thumbWidth / (double)thumbHeight;int imageWidth = image.getWidth(null);int imageHeight = image.getHeight(null);double imageRatio = (double) imageWidth / (double) imageHeight;if ( thumbRatio imageRatio ){thumbHeight = (int) ( thumbWidth / imageRatio );}else{thumbWidth = (int) ( thumbHeight * imageRatio );}BufferedImage thumbImage = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_RGB);Graphics2D graphics2D = thumbImage.createGraphics();graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATIO N, RenderingHints.VALUE_INTERPOLATION_BILINEAR);graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null);BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(outFilename));JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(thumbImage);quality = Math.max(0, Math.min(quality, 100));param.setQuality((float) quality / 100.0f, false);encoder.setJPEGEncodeParam(param);encoder.encode(thumbImage);out.close();}catch ( Exception e ){e.printStackTrace();}}/*** 抓取电脑屏幕* @param path*/public static void snatchScreen ( String path ){Robot robot;try{robot = new Robot();Dimension d = Toolkit.getDefaultToolkit().getScreenSize();Rectangle rect = new Rectangle(0, 0, d.width, d.height);BufferedImage image = robot.createScreenCapture(rect);ImageIO.write(image, jpg, new File(path));}catch ( Exception e ){System.out.println(Failed to snatch screen ... );e.printStackTrace();}}}【java实现缩略图和抓屏幕】。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
经济与管理学院信息管理与信息系统专业《java实验周》报告(2015/2016学年第一学期)学生姓名:学生班级:学生学号:指导教师:2015年12月25日实现屏幕截图的小程序一、实验题目实现屏幕截图的小程序二、实验要求编程一个应用小程序,能够具有屏幕截图的功能,截图的具体实现有: (1)显示出工作区域,即能够截屏的面积;(2)鼠标可以随意滑动进行截图;(3)将所截取的图片保存在想要保存的位置;(4)程序结束后可以退出整个应用。
三、程序流程图3.1 业务流程图四、技术原理程序的主类是cutScreen,继承自无边框的框架JWindow;cutScreen()是一个定义屏幕尺寸的构造方法;使用方法mousePressed(MouseEvent e)来监听当前鼠标点击的动作;用方法mouseReleased(MouseEvent e)监听鼠标松开时,显示操作窗口;方法mouseDragged(MouseEvent e)监听拖动鼠标;paint(Graphics g)画出指定的工作区域;saveImage()保存图像。
工具栏ToolsWindow类,继承自有边框的框架JFrame;方法init()用来设置布局方式为BorderLayout;run()捕捉屏幕截图。
五、附实验代码import java.awt.*;import java.awt.event.*;import java.awt.image.BufferedImage;import java.awt.image.RescaleOp;import java.io.File;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;import javax.imageio.ImageIO;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 BufferedImage image = null;private BufferedImage tempImage = null;private BufferedImage saveImage = 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);// 将此窗口置于前端,并可以将其设为焦点Windowtools.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代表鼠标释放位置的横坐标,public ToolsWindow(cutScreen parent, int x, int y) {this.parent = parent;this.init();this.setLocation(x, y);//让窗口里面的组建确定为最佳大小this.pack();this.setVisible(true);}private void init() {//设置布局方式为BorderLayoutthis.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();}}});}}六、实验结果图6.1 截图图6.2 保存七、个人总结一周的课程设计结束了,刚开始对所要设计的课题完全没有头绪,通过网上查找一些相关资料和同学的帮助,成功设计出能够实现屏幕截图的java程序。