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

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

    }

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java实现截图功能并复制到剪切板可以分为以下几个步骤: 1. 获取屏幕的宽度和高度 可以使用Toolkit类的getScreenSize方法获取屏幕的宽度和高度: ```java Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); int width = screenSize.width; int height = screenSize.height; ``` 2. 创建一个Robot对象 可以使用Robot类来实现屏幕截图,需要创建一个Robot对象: ```java Robot robot = new Robot(); ``` 3. 截取屏幕图像 可以使用Robot类的createScreenCapture方法和Rectangle类来截取屏幕图像: ```java Rectangle screenRect = new Rectangle(0, 0, width, height); BufferedImage image = robot.createScreenCapture(screenRect); ``` 4. 复制图像到剪贴板 可以使用Toolkit类的getDefaultToolkit方法获取系统剪切板,并创建一个ImageSelection对象: ```java ImageSelection selection = new ImageSelection(image); Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); clipboard.setContents(selection, null); ``` 完整的实现代码如下: ```java import java.awt.*; import java.awt.datatransfer.*; import java.awt.image.BufferedImage; import java.io.IOException; public class Screenshot { public static void main(String[] args) { try { // 获取屏幕的宽度和高度 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); int width = screenSize.width; int height = screenSize.height; // 创建一个Robot对象 Robot robot = new Robot(); // 截取屏幕图像 Rectangle screenRect = new Rectangle(0, 0, width, height); BufferedImage image = robot.createScreenCapture(screenRect); // 复制图像到剪贴板 ImageSelection selection = new ImageSelection(image); Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); clipboard.setContents(selection, null); System.out.println("屏幕截图已复制到剪切板。"); } catch (AWTException e) { e.printStackTrace(); } } static class ImageSelection implements Transferable { private Image image; public ImageSelection(Image image) { this.image = image; } public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { if (flavor.equals(DataFlavor.imageFlavor) && image != null) { return image; } throw new UnsupportedFlavorException(flavor); } public DataFlavor[] getTransferDataFlavors() { return new DataFlavor[]{DataFlavor.imageFlavor}; } public boolean isDataFlavorSupported(DataFlavor flavor) { return flavor.equals(DataFlavor.imageFlavor); } } } ``` 运行程序后,程序会将屏幕截图复制到剪切板中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值