凯哥学堂

搜索

凯哥学堂

Java制作屏幕截图软件(还可以保存到剪切板内) [复制链接]

查看: 11157|回复: 0
打印 上一主题 下一主题

72

主题

72

帖子

594

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
594
跳转到指定楼层
楼主
发表于 2017-8-24 22:21:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
package com.kaige123;

import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
/**
* 屏幕截图页面
*
* @author 凯哥
*
*/
//屏幕截图的开始窗口 此窗口中会有一个按钮 点击按钮就可以截图        ActionListener 是按钮按下的一个事件
public class ActionJFrame extends JFrame implements ActionListener {

        // 构造器 我们需要在构造器内初始化按钮
        public ActionJFrame() {
                // 这个就是按钮
                JButton jb = new JButton("截图");
                jb.addActionListener(this);// 把时间注册到按钮上 如果不注册的话就不可以触发 把事件和按钮关联起来
                this.add(jb);// 把按钮添加到窗口之中
                this.setSize(100, 60);
                this.setAlwaysOnTop(true);// 窗口在所有窗口之上
                this.setVisible(true);// 显示窗口
        }

        public static void main(String[] args) {
                new ActionJFrame();
        }

        public void actionPerformed(ActionEvent e) {
                this.setVisible(false);// 窗口隐藏起来
                // 开始截图
                // java.awt
                try {
                        Thread.sleep(100);//停顿一下
                        // 机器人 控制鼠标 控制键盘 屏幕截图
                        Robot r = new Robot();

                        Toolkit t = Toolkit.getDefaultToolkit();
                        // 获得屏幕的高 屏幕宽
                        int width = t.getScreenSize().width;
                        int height = t.getScreenSize().height;

                        // 开始截图 参数必须告诉人家 截图多大
                        BufferedImage image = r.createScreenCapture(new Rectangle(width,
                                        height));
                        // BufferedImage 缓存在内存之中的 照片

                        //把缓存中的照片保存到磁盘的 a.jpg中
                        //ImageIO.write(image, "jpeg", new File("c:/a.jpg"));
                       
                        new ImageJFrame(image);
                } catch (Exception e2) {
                }

        }
}


package com.kaige123;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.io.IOException;
import javax.swing.JFrame;

/**
* 显示截图照片
* 然后进行保存
* @author 凯哥
*
*/
//显示照片
public class ImageJFrame extends JFrame implements java.awt.event.MouseListener {

        BufferedImage image = null;

        public ImageJFrame(BufferedImage image) {
                this.image = image;// 把传递进来的对象保存到属性上

                Toolkit t = Toolkit.getDefaultToolkit();
                // 获得屏幕的高 屏幕宽
                int width = t.getScreenSize().width;
                int height = t.getScreenSize().height;

                this.setSize(width, height);// 设置窗口的大小

                this.addMouseListener(this);
                this.setUndecorated(true);// 去掉窗口的边框
                this.setVisible(true);// 窗口一旦显示 就开始调用 paint 进行绘画
        }

        // 窗口绘画方法
        public void paint(Graphics g) {
                super.paint(g);
                g.drawImage(image, 0, 0, new ImageObserver() {

                        public boolean imageUpdate(Image img, int infoflags, int x, int y,
                                        int width, int height) {
                                // TODO Auto-generated method stub
                                return false;
                        }
                });
                g.drawRect(x, y, w, h);
        }

        int x, y;
        int w, h;
        boolean b = false;

        public void mousePressed(MouseEvent e) { // 按下

                if (b == false) {
                        x = e.getX();
                        y = e.getY();
                }

        }

        public void mouseReleased(MouseEvent e) { // 弹起

                if (b == false) {
                        w = e.getX() - x;
                        h = e.getY() - y;
                        this.repaint();
                        b = true;
                }

        }

        @Override
        public void mouseClicked(MouseEvent e) {

                if (b && e.getClickCount() == 2) {// 你的鼠标有没有双击

                        try {
                                // 把截图好的照片保存起来
                                Robot r = new Robot();
                                final BufferedImage image = r
                                                .createScreenCapture(new Rectangle(x + 1, y + 1, w - 1,
                                                                h - 1));
                                // ImageIO.write(image, "jpeg", new File("c:/a.jpg"));

                                Transferable trans = new Transferable() {
                                        public DataFlavor[] getTransferDataFlavors() {
                                                return new DataFlavor[] { DataFlavor.imageFlavor };
                                        }

                                        public boolean isDataFlavorSupported(DataFlavor flavor) {
                                                return DataFlavor.imageFlavor.equals(flavor);
                                        }

                                        public Object getTransferData(DataFlavor flavor)
                                                        throws UnsupportedFlavorException, IOException {
                                                if (isDataFlavorSupported(flavor))
                                                        return image;
                                                throw new UnsupportedFlavorException(flavor);
                                        }

                                };
                                Toolkit.getDefaultToolkit().getSystemClipboard()
                                                .setContents(trans, null);

                                System.exit(0);// 关闭你的软件
                        } catch (Exception e2) {
                                // TODO: handle exception
                        }
                }

        }

        @Override
        public void mouseEntered(MouseEvent e) {
                // TODO Auto-generated method stub

        }

        @Override
        public void mouseExited(MouseEvent e) {
                // TODO Auto-generated method stub

        }

}
回复

使用道具 举报