import java.awt.AWTException; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.Rectangle; import java.awt.RenderingHints; import java.awt.Robot; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.geom.RoundRectangle2D; import java.awt.image.BufferedImage; import javax.swing.*; public class Screenshot extends JFrame implements MouseMotionListener,MouseListener,KeyListener{ private BufferedImage buff_img; private BufferedImage showImg; private BufferedImage sub_buff_img; private Rectangle rec; private Robot robot; private JLabel label; private Point start; private Point end; private int x,y,width,height; private boolean over = false; //private JPanel back_panel; private Color backGroundCol; private JLabel show_sub; ImageIcon icon; private SubImgAction subAction; public Screenshot() { this.setLayout(null); backGroundCol = new Color(200,150,150); icon = new ImageIcon(); setDefaultCloseOperation(EXIT_ON_CLOSE); this.setSize(ScreanSizeUtil.getDimension()); setUndecorated(true); setExtendedState(MAXIMIZED_BOTH); setResizable(false);//设置不可改变大小 setAlwaysOnTop(true);//设置总是在顶层(最上层) start = new Point(); end = new Point(); label = new JLabel(); show_sub = new JLabel(); show_sub.setIcon(icon); add(show_sub); try { robot = new Robot(); buff_img = robot.createScreenCapture(new Rectangle(0, 0, ScreanSizeUtil.getDimension().width, ScreanSizeUtil.getDimension().height));//获得整个屏幕 subAction = new SubImgAction(show_sub,buff_img,icon); show_sub.addMouseListener(subAction); show_sub.addMouseMotionListener(subAction); show_sub.setBorder(BorderFactory.createLineBorder(Color.GREEN,2)); label = new JLabel(){ protected void paintComponent(Graphics g) { super .paintComponent(g); g.drawImage(buff_img, 0, 0, this); Graphics2D g2d = (Graphics2D) g; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setColor(backGroundCol); AlphaComposite composite = AlphaComposite.getInstance( AlphaComposite.SRC_OVER, 60 / 100.0F ); g2d.setComposite(composite); g2d.fill( new RoundRectangle2D.Float( 0 , 0 , this .getWidth(), this .getHeight(), 0 , 0 )); } }; label.setBounds(0, 0, getWidth(), this.getHeight()); add(label); } catch (AWTException e) { e.printStackTrace(); } setVisible(true); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } showImg = robot.createScreenCapture(new Rectangle(0, 0, ScreanSizeUtil.getDimension().width, ScreanSizeUtil.getDimension().height));//获得整个屏幕 addMouseListener(this); addKeyListener(this); addMouseMotionListener(this); } @Override public void mouseClicked(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent e) { start.x = e.getX(); start.y = e.getY(); } @Override public void mouseReleased(MouseEvent e) { over = true; } @Override public void mouseDragged(MouseEvent e) { if(!over){ end.x = e.getX(); end.y = e.getY(); x = Math.min(start.x, end.x); y = Math.min(start.y,end.y); width = Math.abs(end.x - start.x); height = Math.abs(end.y - start.y); if(width == 0 || height == 0) return; icon.setImage(buff_img.getSubimage(x, y, width, height)); show_sub.setBounds(x, y, width, height); //repaint(); } } @Override public void mouseMoved(MouseEvent e) { end.x = e.getX(); end.y = e.getY(); //repaint(); } public static void main(String[] args) { new Screenshot(); } @Override public void keyPressed(KeyEvent arg0) { // TODO Auto-generated method stub } @Override public void keyReleased(KeyEvent e) { if(e.getKeyCode() == 27){ System.exit(0); } } @Override public void keyTyped(KeyEvent arg0) { // TODO Auto-generated method stub } }
import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.image.BufferedImage; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.SwingUtilities; public class SubImgAction implements MouseListener,MouseMotionListener{ private JLabel label; private int x; private int y; private BufferedImage image; private ImageIcon icon; public SubImgAction(JLabel label,BufferedImage image,ImageIcon icon) { this.label = label; this.image = image; this.icon = icon; } @Override public void mouseDragged(MouseEvent e) { Point dragPoint = new Point(e.getPoint()); SwingUtilities.convertPointToScreen(dragPoint, label); icon.setImage(image.getSubimage(dragPoint.x - x <= 0 ? 0:dragPoint.x - x, dragPoint.y - y <= 0?0:dragPoint.y - y, label.getWidth(),label.getHeight())); label.setLocation(dragPoint.x - x, dragPoint.y - y); } @Override public void mouseMoved(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseClicked(MouseEvent e) { if(e.getClickCount() == 2){ new ClipboardUtil().writeToClipboard(image.getSubimage(label.getX(), label.getY(),label.getWidth(),label.getHeight())); System.exit(0); } } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent e) { Point clickPoint = new Point(e.getPoint()); SwingUtilities.convertPointToScreen(clickPoint, label); x = clickPoint.x - label.getX(); y = clickPoint.y - label.getY(); } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } }
import java.awt.Dimension; import java.awt.Toolkit; public class ScreanSizeUtil { private static Dimension scrSize; static{ if(scrSize == null){ scrSize = getDimension(); } } public static Dimension getDimension(){ scrSize =Toolkit.getDefaultToolkit().getScreenSize(); return scrSize; } public static int getWidth(){ return (int) scrSize.getWidth(); } public static int getHetgth(){ return (int) scrSize.getHeight(); } }
import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.image.BufferedImage; public class ClipboardUtil { private Clipboard cli; /* * 写入系统剪切板 */ public void writeToClipboard(String str){ if(str != null){ cli = Toolkit.getDefaultToolkit().getSystemClipboard(); Transferable text = new StringSelection(str); cli.setContents(text, null); } } public void writeToClipboard(BufferedImage image){ cli = Toolkit.getDefaultToolkit().getSystemClipboard(); cli.setContents(new ImageChange(image),null); } /** * 获取系统剪切板中的文本(相当于粘贴) * * @return 系统剪切板中的文本 */ public String getSysClipboardText() { String ret = ""; cli = Toolkit.getDefaultToolkit().getSystemClipboard(); // 获取剪切板中的内容 Transferable clipTf = cli.getContents(null); if (clipTf != null) { // 检查内容是否是文本类型 if (clipTf.isDataFlavorSupported(DataFlavor.stringFlavor)) { try { ret = (String) clipTf .getTransferData(DataFlavor.stringFlavor); } catch (Exception e) { e.printStackTrace(); } } } return ret; } class ImageChange implements Transferable { private BufferedImage theImage; public ImageChange(BufferedImage image) { theImage = image; } public DataFlavor[] getTransferDataFlavors() { return new DataFlavor[] { DataFlavor.imageFlavor }; } public boolean isDataFlavorSupported(DataFlavor flavor) { return flavor.equals(DataFlavor.imageFlavor); } public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException { if (flavor.equals(DataFlavor.imageFlavor)) { return theImage; } else { throw new UnsupportedFlavorException(flavor); } } } }