学习随笔——Java制作简单截图工具

效果图:

截图主界面

保存文件界面

代码:

MainFrame类:
package frame;

import java.awt.AWTException;
import java.awt.Container;
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 java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;


public class MainFrame extends JFrame{

    /**
     * 截图按钮
     */
    JButton capture;

    public MainFrame(){
        capture = new JButton("截图");
        Container con = getContentPane();
        con.add(capture);
        setSize(100,60);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //保持在最前端
        setAlwaysOnTop(true);

        /**
         * 按钮注册到监听器上
         */
        capture.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                //使自己消失
                setVisible(false);

                //截图
                try {
                    //机器人,控制鼠标、控制键盘、屏幕截图
                    Robot robot = new Robot();
                    //工具包
                    Toolkit tool = Toolkit.getDefaultToolkit();
                    //获得屏幕的宽和高
                    int w = tool.getScreenSize().width;
                    int h = tool.getScreenSize().height;
                    //截图 并缓存在程序的内存中
                    BufferedImage image = robot.createScreenCapture(new Rectangle(w, h));
                    //在新的面板上打开全屏截图
                    ImageFrame imageFrame = new ImageFrame(image);
                } catch (AWTException e1) {
                    e1.printStackTrace();
                }

                //自己消失
                dispose();
            }
        });

        setVisible(true);
    }

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

ImageFrame类:

package frame;

import java.awt.AWTException;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
import javax.swing.JFrame;

/**
 * 放置全屏截图的面板
 * @author Administrator
 *
 */
public class ImageFrame extends JFrame {

    /**
     * 鼠标的横坐标
     */
    int x;
    /**
     * 鼠标的纵坐标
     */
    int y;
    /**
     * 记录鼠标绘制出矩形的宽度
     */
    int width;
    /**
     * 记录鼠标绘制出的矩形的高度
     */
    int height;

    /**
     * 控制“按下”,“释放”,“点击”三个动作分别执行与否的标志位
     */
    boolean flag;

    /**
     * 用来加载整个屏幕截图的缓存
     */
    BufferedImage image;
    public ImageFrame(BufferedImage buf){
        image = buf;
        //界面工具包
        Toolkit tool = Toolkit.getDefaultToolkit();
        int w = tool.getScreenSize().width;
        int h = tool.getScreenSize().height;
        setSize(w,h);
        //去掉边框
        setUndecorated(true);

        setVisible(true);
        //一旦显示整个面板,就绘制图片
        repaint();

        //给整个面板注册鼠标监听器
        addMouseListener(new MouseListener() {

            @Override
            public void mouseReleased(MouseEvent e) {
                if(flag == false){
                    //鼠标释放时获得矩形框的宽和高
                    width = e.getX() - x;
                    height = e.getY() - y;
                    //绘制矩形框
                    repaint();
                    //拖出矩形框之后,设置标志为为true
                    flag = true;
                }
            }

            @Override
            public void mousePressed(MouseEvent e) {
                if(flag == false){
                    //鼠标按下时获得原点坐标
                    x = e.getX();
                    y = e.getY();
                }
            }

            @Override
            public void mouseEntered(MouseEvent e) {
            }

            @Override
            public void mouseExited(MouseEvent e) {
            }

            /**
             * 双击保存截图
             */
            @Override
            public void mouseClicked(MouseEvent e) {
                //判断是否双击
                if(flag == true && e.getClickCount() == 2){
                    //保存矩形框内的截图  (x,y,width,height)
                    try {
                        Robot robot = new Robot();
                        Toolkit tool = Toolkit.getDefaultToolkit();
                        //截图
                        BufferedImage image = robot.createScreenCapture(
                                                new Rectangle(
                                                x,y,width,height));
                        //文件选择器选择自定义路径保存图片
                        JFileChooser chooser = new JFileChooser();
                        int cnt = chooser.showDialog(null,"保存");
                        if(cnt == 0){
                            File file = chooser.getSelectedFile();
                            ImageIO.write(image, "jpg", file);
                        }
                        System.exit(0);
                    } catch (AWTException | IOException e1) {
                        e1.printStackTrace();
                    }
                }
            }
        });
    }

    /**
     * 重写父类的重绘方法
     */
    public void paint(Graphics g){
        super.paint(g);
        g.drawImage(image, 0, 0, null);
        //画出矩形
        g.drawRect(x, y, width, height);
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值