实现屏幕截图的小程序java课程设计
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设计程序语言》形考任务三:源代码与输出截图任务要求本次形考任务要求完成以下两个任务: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编程实现屏幕截图(截屏)代码总结(转载)转载⾃:⽅法⼀: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课程设计一、课程目标知识目标: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编写截图工具
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编程的基本语法、面向对象编程思想以及图形用户界面(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编程的基本语法、面向对象编程思想,以及图形用户界面(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实现屏幕共享的⼩程序最近在做软件软件⼯程的课程设计,做⼀个⽤于实验室的屏幕监控系统,参考各种前⼈代码,最后领悟之后要转换⾃⼰的代码,初学者都是这样模仿过来的。
说到屏幕监控系统,有教师断和学⽣端,教师端就是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(); //垃圾回收}});}}很晚了,从未成品中抽取了这么个⼩功能,因为答应某位童鞋给链接的,距离成品还有很多要写,后续补上吧。
实现屏幕截图的小程序 java课程设计
实现安全工作方针与目标的措施经济与管理学院信息管理与信息系统专业《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一、教学目标本课程的目标是让学生掌握Java语言基础,学会使用Java进行简单的图形界面设计。
具体目标如下:知识目标:使学生了解Java语言的基本语法、数据类型、控制结构、面向对象编程思想,以及Java图形界面设计的相关知识。
技能目标:培养学生具备使用Java编写简单图形界面程序的能力,能独立完成基本的图形界面设计任务。
情感态度价值观目标:培养学生对编程的兴趣,提高学生解决问题的能力,培养学生的创新精神和团队合作意识。
二、教学内容本课程的教学内容主要包括Java语言基础和Java图形界面设计两部分。
Java语言基础部分包括:数据类型、控制结构、面向对象编程、异常处理、文件操作等。
Java图形界面设计部分包括:Swing组件、事件处理、布局管理、菜单栏、工具栏等。
三、教学方法本课程采用讲授法、案例分析法、实验法等多种教学方法。
讲授法用于向学生传授Java语言基础知识和图形界面设计方法。
案例分析法用于分析实际编程中的问题和解决方案,提高学生的实际编程能力。
实验法用于让学生亲自动手实践,培养学生的实际操作能力和创新精神。
四、教学资源教材:《Java编程思想》参考书:《Java核心技术》多媒体资料:教学PPT、视频教程实验设备:计算机、网络设备教学资源的选择和准备应充分考虑教学内容和教学方法的实施,以提高学生的学习效果。
五、教学评估本课程的评估方式包括平时表现、作业、考试等。
平时表现主要评估学生在课堂上的参与程度、提问回答、小组讨论等,占总评的30%。
作业主要评估学生的编程实践能力,包括课后练习和项目任务,占总评的40%。
考试主要评估学生对Java语言基础和图形界面设计的掌握程度,占总评的30%。
评估方式应客观、公正,全面反映学生的学习成果。
六、教学安排本课程的教学进度计划共安排16周,每周2课时,共计32课时。
教学时间安排在每周的一和周三下午,地点为计算机实验室。
教学进度安排合理、紧凑,确保在有限的时间内完成教学任务。
微信小程序使用canvas画布实现当前页面截屏并分享
微信⼩程序使⽤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之类的⾃适应单位,所以需要提前定义好页⾯尺⼨⽐例,有利于实现不同屏幕兼容性。
JavaScript+html5canvas实现本地截图教程
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课程设计(画图板软件开发和设计)
功能测试:确保所有功能正常工作 性能测试:评估系统性能,如响应时间、吞吐量等 兼容性测试:确保在不同操作系统和浏览器上正常运行 用户体验测试:评估用户界面设计、易用性等
硬件要求:CPU、内存、硬盘等 软件要求:JDK、Tomcat、数据库等 部署步骤:安装JDK、Tomcat、数据库等,配置环境变量,部署项目 运行步骤:启动Tomcat,访问项目地址,进行测试和调试
优化网络 传输:减 少网络延 迟,提高 数据传输 速度
优化数据 库访问: 减少数据 库查询次 数,提高 查询效率
优化系统 日志:减 少日志记 录,提高 系统运行 效率
优化系统 安全:加 强系统安 全防护, 提高系统 安全性能
项目成果:成功开发出画图板 软件,实现了基本的绘图功能
项目目标:开发一个画图板 软件,实现基本的绘图功能
数据库索引:用户ID、画图板ID等
数据库备份和恢复策略:定期备份,异地 存储,灾难恢复等
数据库安全:用户权限管理,数据加密, 访问控制等
画笔算法:实现画笔的绘制和移动
图形选择算法:实现图形的选择和绘制
橡皮擦算法:实现橡皮擦的擦除功能
颜色选择算法:实现颜色的选择和切换
撤销和重做算法:实现撤销和重做操作
项目经验:在开发过程中,学 习了JAVA编程、图形绘制、用
户界面设计等知识
项目展望:未来可以继续优化 画图板软件,增加更多功能,
提高用户体验
功能实现:部分功 能实现不够完善, 需要进一步优化
用户体验:界面 设计不够友好, 需要改进
性能优化:程序 运行速度较慢, 需要优化
团队协作:团队成 员之间沟通不够顺 畅,需要加强团队 协作能力
画图板功 能:支持 绘制各种 图形,如 直线、曲 线、矩形、 圆形等
如何以Java实现网页截图技术 -
如何以Java实现网页截图技术- 【Java究竟怎么玩?】- CSDN博客您查询的关键词是:java网页截图。
如果打开速度慢,可以尝试快速版;如果想保存快照,可以添加到搜藏;如果想更新或删除快照,可以投诉快照。
(百度和网页/cping1982/archive/2010/03/06/5353049.aspx的作者无关,不对其内容负责。
百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面。
)【Java究竟怎么玩?】思考因为存在,存在所以思考目录视图摘要视图订阅公告:CSDN博客积分系统正式上线!如何以Java实现网页截图技术分类:JAVA应用技术文章2010-03-06 23:40 5452人阅读评论(63) 收藏举报今天看到某网友关于“如何以Java实现网页截图技术”的咨询帖,由于出现该咨询的地点非常不适合较长回复,故以博文形式回答。
事实上,如果您想以Java实现网页截图,也就是“输入一段网址,几秒钟过后就能截取一张网页缩略图”的效果。
那么,您至少有3种方式可以选择。
1、最直接的方式——使用Robot方法详解:该方法利用Robat提供的强大桌面操作能力,硬性调用浏览器打开指定网页,并将网页信息保存到本地。
优势:简单易用,不需要任何第三方插件。
缺点:不能同时处理大量数据,技术含量过低,属于应急型技巧。
实现方法:使用如下代码即可。
public static void main(String[] args) throws MalformedURLException,IOException, URISyntaxException, AWTException {//此方法仅适用于JdK1.6及以上版本Desktop.getDesktop().browse(new URL("/intl/en/").toURI());Robot robot = new Robot();robot.delay(10000);Dimension d = new Dimension(Toolkit.getDefaultToolkit().getScreenSize());int width = (int) d.getWidth();int height = (int) d.getHeight();//最大化浏览器robot.keyRelease(KeyEvent.VK_F11);robot.delay(2000);Image image = robot.createScreenCapture(new Rectangle(0, 0, width,height));BufferedImage bi = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);Graphics g = bi.createGraphics();g.drawImage(image, 0, 0, width, height, null);//保存图片ImageIO.write(bi, "jpg", new File("google.jpg"));}2、最常规的方式——利用JNI,调用第三方C/C++组件方法详解:目前来讲,Java领域对于网页截图组件的开发明显不足(商机?),当您需要完成此种操作时,算得上碰到了Java的软肋。
java实现截图
* 《p》Company: 《/p》
* @author
* @version 1.0.0
*/
public class ImageChangeSize
{
public static void main ( String [] args )
throws InterruptedException
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(thumbImage);
quality = Math.max(0, Math.min(quality, 100));
ImageIO.write(image, “jpg”, new File(path));
}
catch ( Exception e )
{
System.out.println(“Failed to snatch screen 。.. ”);
e.printStackTrace();
}
else
{
thumbWidth = (int) ( thumbHeight * imageRatio );
}
BufferedImage thumbImage = new BufferedImage(thumbWidth,
thumbHeight, BufferedImage.TYPE_INT_RGB);
double imageRatio = (double) imageWidth / (double) imageHeight;
java备忘录编写源代码及运行界面截图
//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简单小程序课程设计一、课程目标知识目标: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. 简单小程序案例分析:分析计算器、九九乘法表等程序,学习实际编程中的应用;参考教材章节:各章节实例。
利用VC++开发屏幕抓图程序实列
利用VC++开发屏幕抓图程序实列作者:未知文章来源:网络在Windows操作系统中,当用户按下"PrintScreen"按钮后,Windows自动将当前屏幕的图像拷贝到系统剪贴板中,这时可以通过"画笔"这个小程序将剪贴板中的内容保存成图像文件,可以看出,如果需要将当前屏幕保存下来还是比较麻烦的,能否可以自己编写一个应用程序,自动将当前屏幕的内容保存到一个图像文件中去呢?这个答案是肯定的,本实例应用程序就是利用通用的热键管理DLL库实现的热键功能,在收到热键通知后截取屏幕的内容并保存到bmp文件中。
例如我们设置图片保存路径为c:\,热键为F9 + Control,然后按Change 按钮设置好热键,那么当我们按下CTRL+F9后,当前界面将以BMP图像文件的格式被保存在C:\目录下。
一、实现方法热键管理DLL实际上是一个键盘钩子,由它来监视系统的键盘事件。
如果有和程序登记符合的按键组合就通知该程序的窗口。
为了应用方便,本实例把它做成了一个标准的管理库来为其它的程序通过热键服务,它有两个输出函数:AddHotkey()和DeleteHotkey(),程序只需要调用这两个函数就可以了,如果编译之后不用改变热键,则只需要AddHotkey就可以了。
DLL中的所有的全局变量都放在一个共享段中,定义如下:#pragma data_seg("shareddata")HHOOK hHook =NULL; //钩子句柄UINT nHookCount =0; //挂接的程序数目static UCHAR HotKey[MAX_KEY] = {0}; //热键虚拟键码static UCHAR HotKeyMask[MAX_KEY] = {0}; //组合掩码, control=4,alt=2,shift=1static HWND hCallWnd[MAX_KEY] = {0}; //window handle associated with hotkeystatic int KeyCount =0;static UCHAR MaskBits =0; //00000 Ctrl=4 & Alt=2 & Shift=1#pragma data_seg()关于共享段,有几点重要的说明:一是必须在链接选项里指定该段为共享:一种方法是在project->settings->link->object/library中加上/section:shareddata,rws;第二种方法是在def文件的sections里加上一句shareddata read write shared;第三种指定共享段的方法在程序里加上一句#pragma comment(linker,"section:shareddata,rws")。
java实现屏幕截图功能毕业设计与实现
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 绪论截图是由电脑截取的显示在屏幕或其他显示设备上的可视图像。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 程序。