Java模仿QQ桌面截圖功效完成辦法。本站提示廣大學習愛好者:(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法式設計有所贊助。