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);
}
}
}
}