本文實(shí)例講述了Java模擬QQ桌面截圖功能實(shí)現(xiàn)方法。分享給大家供大家參考。具體如下:
QQ的桌面截圖功能非常方便,去年曾用Java模擬過(guò)一個(gè),現(xiàn)整理出來(lái)。
本方法首先需要抓到屏幕的整個(gè)圖象,將圖象顯示在一個(gè)JFrame中,再將JFrame全屏顯示,這樣就模擬出了一個(gè)桌面,Java也就可以獲得鼠標(biāo)的作用區(qū)域從而實(shí)現(xiàn)桌面中的小范圍截屏。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
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( "模擬屏幕(點(diǎn)右鍵退出)" ); button.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { try { new ScreenWindow(imgLabel); } catch (Exception e1) { JOptionPane.showConfirmDialog( null , "出現(xiàn)意外錯(cuò)誤!" , "系統(tǒng)提示" , 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 , "出現(xiàn)意外錯(cuò)誤!" , "系統(tǒng)提示" , 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) { /** 拖動(dòng)過(guò)程的虛線選取框需自己實(shí)現(xiàn) */ } }); 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; } } |
希望本文所述對(duì)大家的java程序設(shè)計(jì)有所幫助。