非常简单的截图小工具

非常简单的截图小工具用QQ截图太麻烦

用QQ截图太麻烦。
我只是想要截个图,然后图片保持在窗口最前端即可。

2020.5.17

  1. 解决从下往上拉动鼠标造成错误的情况
  2. 增加右击取消截图
import Num.AddNum;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
public class DrawRectTest 
{ 
   
	public static void main(String[] args) 
	{ 
   
		
		new NewFrame();
	}
}
class NewFrame extends JFrame
{ 
   
	private static final long serialVersionUID = 1L;
	/* * 创建一个小的窗口。点击按钮来截屏。 */
	JButton button;
	NewFrame()
	{ 
   
		setVisible(true);
		setLayout(new FlowLayout());
		setBounds(1000, 600, 200, 100);
		setResizable(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		button = new JButton("截图");
		add(button);
		button.addActionListener(new ActionListener()
				{ 
   //鼠标点击按钮,new 一个ScreenFrame,设置可见,
					public void actionPerformed(ActionEvent e) 
					{ 
   
						ScreenFrame sf = new ScreenFrame();
						//sf.setAlwaysOnTop(true);
						sf.setUndecorated(true);
						sf.setVisible(true);
					}
				});
		button.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
				KeyStroke.getKeyStroke(KeyEvent.VK_Z,InputEvent.SHIFT_DOWN_MASK,false), "shift_z");
		button.getActionMap().put("shift_z", new AbstractAction() { 
   
			/** * */
			private static final long serialVersionUID = 1L;

			public void actionPerformed(ActionEvent e) { 
   
				ScreenFrame sf = new ScreenFrame();
				sf.setUndecorated(true);
				sf.setVisible(true);
			}
		});
	}
}
class ScreenFrame extends JFrame
{ 
   
	private static final long serialVersionUID = 2L;
	/* * 创建一个全屏的窗口,将全屏的图像放在JFrame的窗口上,以供来截屏。 */
	Dimension di = Toolkit.getDefaultToolkit().getScreenSize();
	ScreenFrame()
	{ 
   

		//设置大小,即全屏
		setSize(di);
		setTitle("截图");
		//返回此窗体的 contentPane对象 
		getContentPane().add(new DrawRect());
	}
 
	class DrawRect extends JPanel implements MouseMotionListener, MouseListener
	{ 
   
		private static final long serialVersionUID = 3L;
		/* * 将全屏的图像放在JPanel 上, 可以通过new DrawRect来获得JPanel,并且JPanel上有全屏图像 */
		int sx, sy, ex=-1, ey=-1;
		int count = 1;
		File file = null;
		BufferedImage image, getImage;
		//截图,新的截图
		boolean flag = true;
		public DrawRect()
		{ 
   
			try
			{ 
   //获取全屏图像数据,返回给image
				Robot robot = new Robot();
				image = robot.createScreenCapture(new Rectangle(0, 0, di.width, di.height));//获得了全屏的截图
			}
			catch(Exception e)
			{ 
   
				throw new RuntimeException("截图失败");
			}
			//添加 鼠标活动事件
			addMouseListener(this);
			addMouseMotionListener(this);
		}
		//重写paintComponent,通过repaint 显示出来截屏的范围
		public void paintComponent(Graphics g)
		{ 
   
			g.drawImage(image, 0, 0, di.width, di.height, this);
			g.setColor(Color.blue);
			//System.out.println("鼠标拉动了");
			//if(sx < ex && sy < ey)//右下角
				g.drawRect(sx, sy, ex - sx, ey - sy);
		}
		public void mousePressed(MouseEvent e)
		{ 
   
			sx = e.getX();
			sy = e.getY();
		}
		public void mouseReleased(MouseEvent e)	
		{ 
   //鼠标单击一下也会执行此代码
			//flag = false;
			if(e.getButton()==MouseEvent.BUTTON3) { 
   
				dispose();
			}
			//else if(e.getButton()==MouseEvent.BUTTON1){} 加上这一句无法截图
			//原因是拉动鼠标的时候,点击的就是鼠标左键
			else { 
   
				if(ex==-1||ey==-1) { 
   return;}
				
				try { 
   
					Robot ro;
					ro = new Robot();
					if(sx < ex && sy < ey) { 
   //右下角
							getImage = ro.createScreenCapture(new Rectangle(sx, sy,	ex - sx, ey - sy));
						ImageIcon icon=new ImageIcon(getImage);
						JLabel label=new JLabel(icon);
						JFrame myframe =new JFrame();
						myframe.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
						myframe.add(label);
						myframe.setBounds(new Rectangle(sx+80, sy+80,ex - sx+80, ey - sy+80));
						myframe.setTitle("Image "+AddNum.Addnum());
						myframe.setVisible(true);
						myframe.setAlwaysOnTop(true);
						int s_width=myframe.getWidth();
						int s_height=myframe.getHeight();
						Dimension s_de=new Dimension(s_width,s_height);
						label.setSize(s_de);
						dispose();
					}
				} catch (AWTException e1) { 
   
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
			
		}
		public void mouseEntered(MouseEvent e) { 
   }
		public void mouseExited(MouseEvent e)	{ 
   }
		//鼠标移动中,通过repaint 画出要截屏的范围
		public void mouseDragged(MouseEvent e) 
		{ 
   
			ex = e.getX();
			ey = e.getY();
			repaint();
		}
		public void mouseMoved(MouseEvent e) { 
   }
		@Override
		public void mouseClicked(MouseEvent e) { 
   
			
		}
	}
}
package Num;
public class AddNum{ 
   
	 static int num=0;
	public static int Addnum() { 
   
		num++;
		return num;
	}
}

这个完全满足的自己的需要。还用了次exe4j。
缺点就是占内存有点多吧,功能也太少了。

今天的文章非常简单的截图小工具分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/65978.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注