最近在做个模拟QQ截图的小工具玩,截取屏幕图片这部分通过查资料已经搞定,现在问题就在于,怎么样像QQ截图那样可以在显示器上画出个区域,供我截取所选区域的图片。希望各位不啬赐教,小北不想要现成的项目代码,给我些许点拔就好了。谢谢!

解决方案 »

  1.   

    才给10分,太小器了,我是在panel上画的,如果你想要QQ那样,需要做个屏幕的快照映射,其他一样的
    package test;import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Point;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseMotionListener;
    import java.util.HashMap;
    import java.util.Map;import javax.swing.JFrame;
    import javax.swing.JPanel;public class TestMouse extends JFrame { private static final long serialVersionUID = -362233428598274611L; private Map<String, Point> pointMap = new HashMap<String, Point>();; public TestMouse() {
    init();
    } private void init() {
    this.getContentPane().setLayout(new BorderLayout());
    this.getContentPane().add(getCenter(), BorderLayout.CENTER);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setSize(new Dimension(300, 300));
    this.setVisible(true);
    } private JPanel getCenter() {
    JPanel panel = new JPanel() { private static final long serialVersionUID = 0L; public void paintComponent(Graphics g) {
    super.paintComponent(g);
    if (pointMap != null && pointMap.size() > 0) {
    Graphics2D g2 = (Graphics2D) g;
    g2.drawLine((int) (((Point) (pointMap.get("start"))).getX()), (int) (((Point) (pointMap.get("start"))).getY()), (int) (((Point) (pointMap.get("start"))).getX()),
    (int) (((Point) (pointMap.get("end"))).getY())); g2.drawLine((int) (((Point) (pointMap.get("start"))).getX()), (int) (((Point) (pointMap.get("start"))).getY()), (int) (((Point) (pointMap.get("end"))).getX()),
    (int) (((Point) (pointMap.get("start"))).getY())); g2.drawLine((int) (((Point) (pointMap.get("end"))).getX()), (int) (((Point) (pointMap.get("start"))).getY()), (int) (((Point) (pointMap.get("end"))).getX()),
    (int) (((Point) (pointMap.get("end"))).getY())); g2.drawLine((int) (((Point) (pointMap.get("start"))).getX()), (int) (((Point) (pointMap.get("end"))).getY()), (int) (((Point) (pointMap.get("end"))).getX()),
    (int) (((Point) (pointMap.get("end"))).getY()));
    }
    }
    };
    panel.setLayout(new FlowLayout(FlowLayout.CENTER));
    panel.addMouseMotionListener(new MouseMotionListener() { public void mouseDragged(MouseEvent e) {
    pointMap.put("end", e.getPoint());
    repaint();
    } public void mouseMoved(MouseEvent e) {
    // TODO Auto-generated method stub } });
    panel.addMouseListener(new MouseListener() { public void mouseClicked(MouseEvent e) {
    // TODO Auto-generated method stub } public void mouseEntered(MouseEvent e) {
    // TODO Auto-generated method stub } public void mouseExited(MouseEvent e) {
    // TODO Auto-generated method stub } public void mousePressed(MouseEvent e) {
    pointMap.clear();
    pointMap.put("start", e.getPoint());
    } public void mouseReleased(MouseEvent e) {
    // TODO Auto-generated method stub } });
    return panel;
    } public static void main(String[] args) {
    new TestMouse(); }}
      

  2.   

    不好意思啊 楼上的 我先前乱花钱的 问个小问题也用100分  现在知道很难的了 呵呵  
    我先前想的是 用个透明的windows 容器,然后在windows上画来着。还没完成。
      

  3.   

    顶一下顺带一句:我喜欢Freedom
      

  4.   

    苍蝇腿也是肉。
    先用Robot截屏,然后重载JFrame绘制方法,用截屏的图片填充。再将JFrame全屏
      

  5.   

    哎 我的计划失败了, 透明度为0的WINDOW不能用鼠标了,根本无法获取鼠标的坐标。
    上面的各位啊,还是得有要个透明度为0的组件再来截屏吧,要不然组件也会被拍进去的吧。