java qq截图_Java模拟QQ桌面截图功能实现方法

本文实例讲述了Java模拟QQ桌面截图功能实现方法。分享给大家供大家参考。具体如下:

QQ的桌面截图功能非常方便,去年曾用Java模拟过一个,现整理出来。

本方法首先需要抓到屏幕的整个图象,将图象显示在一个JFrame中,再将JFrame全屏显示,这样就模拟出了一个桌面,Java也就可以获得鼠标的作用区域从而实现桌面中的小范围截屏。

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.MouseMotionListener;

/**

* 用Java模拟出QQ桌面截图功能

*/

public class Test extends JFrame {

private static final long serialVersionUID = -267804510087895906L;

private JButton button = null;

private JLabel imgLabel = null;

public Test() {

button = new JButton("模拟屏幕(点右键退出)");

button.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

try {

new ScreenWindow(imgLabel);

} catch (Exception e1) {

JOptionPane.showConfirmDialog(null, "出现意外错误!", "系统提示", JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE);

}

}

});

JPanel pane = new JPanel();

pane.setBackground(Color.WHITE);

imgLabel = new JLabel();

pane.add(imgLabel);

JScrollPane spane = new JScrollPane(pane);

this.getContentPane().add(button, BorderLayout.NORTH);

this.getContentPane().add(spane);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setSize(300, 200);

this.setLocationRelativeTo(null);

this.setVisible(true);

}

public static void main(String[] args) {

new Test();

}

}

class ScreenWindow extends JFrame {

private static final long serialVersionUID = -3758062802950480258L;

private boolean isDrag = false;

private int x = 0;

private int y = 0;

private int xEnd = 0;

private int yEnd = 0;

public ScreenWindow(final JLabel imgLabel) throws AWTException, InterruptedException {

Dimension screenDims = Toolkit.getDefaultToolkit().getScreenSize();

JLabel label = new JLabel(new ImageIcon(ScreenImage.getScreenImage(0, 0, screenDims.width, screenDims.height)));

label.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));

label.addMouseListener(new MouseAdapter() {

public void mouseClicked(MouseEvent e) {

if (e.getButton() == MouseEvent.BUTTON3) {

dispose();

}

}

public void mousePressed(MouseEvent e) {

x = e.getX();

y = e.getY();

}

public void mouseReleased(MouseEvent e) {

if (isDrag) {

xEnd = e.getX();

yEnd = e.getY();

if(x > xEnd){

int temp = x;

x = xEnd;

xEnd = temp;

}

if(y > yEnd){

int temp = y;

y = yEnd;

yEnd = temp;

}

try {

imgLabel.setIcon(new ImageIcon(ScreenImage.getScreenImage(x, y, xEnd - x, yEnd - y)));

} catch (Exception ex) {

JOptionPane.showConfirmDialog(null, "出现意外错误!", "系统提示", JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE);

}

dispose();

}

}

});

label.addMouseMotionListener(new MouseMotionListener() {

public void mouseDragged(MouseEvent e) {

if(!isDrag)

isDrag = true;

}

public void mouseMoved(MouseEvent e) {

/** 拖动过程的虚线选取框需自己实现 */

}

});

this.setUndecorated(true);

this.getContentPane().add(label);

this.setSize(screenDims.width, screenDims.height);

this.setVisible(true);

this.setExtendedState(JFrame.MAXIMIZED_BOTH);

}

}

class ScreenImage {

public static Image getScreenImage(int x, int y, int w, int h) throws AWTException, InterruptedException {

Robot robot = new Robot();

Image screen = robot.createScreenCapture(new Rectangle(x, y, w, h)).getScaledInstance(w, h, Image.SCALE_SMOOTH);

MediaTracker tracker = new MediaTracker(new Label());

tracker.addImage(screen, 1);

tracker.waitForID(0);

return screen;

}

}

希望本文所述对大家的java程序设计有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值