在跳出焦点(组件)之后,如何获取屏幕上的坐标,点一下鼠标左键,就输出坐标,同时点左键不会发生屏幕东西的变化,例如我要抓捕一个关闭按钮的坐标,我点了左键,没有响应关闭,而是获取了坐标

解决方案 »

  1.   


    <html>
    <head>
    <script type="text/javascript">
    function show_coords(event)
    {
    x=event.clientX
    y=event.clientY
    alert("X coords: " + x + ", Y coords: " + y)
    }
    </script>
    </head><body onmousedown="show_coords(event)">
    <p>左键,没有响应关闭,而是获取了坐标:<input type="button" value="关闭" onClick="alert("aaaaaaaaaaa")"></p></body>
    </html>
      

  2.   

    看看我这个代码,是我从我做的程序抠下来的一部分,有你说的全部功能,另外还多了一些额外的小功能,你看看吧,不过需要需要稍微修改一下即可。原理:建立一个JFrame,JFrame.add(JPanel),取消显示JFrame的边框,然后把捕捉屏幕的当前图片,再把图片绘制到JPanel上,JPanel设置成屏幕大小,填满整个JFrame,那么你的任何操作,都是在JPanel上操作的,点鼠标左键后不会影响屏幕当前程序的关闭按钮,说是离开了焦点,实际还是在焦点上。利用其他方法也行,但不能实现你说的
    “点一下鼠标左键,就输出坐标,同时点左键不会发生屏幕东西的变化,例如我要抓捕一个关闭按钮的坐标,我点了左键,没有响应关闭,而是获取了坐标”功能import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Point;
    import java.awt.Rectangle;
    import java.awt.Robot;
    import java.awt.Toolkit;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.image.BufferedImage;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;public class captureScreenPoint extends JFrame{
    private static final long serialVersionUID = -892618460149315476L;
    private Robot robot;
    private int width,height;
    private BufferedImage bi;
    private screenPanel sp;
    private Rectangle rec;
    private JFrame jframe;
    private JPanel jpPoint;
    captureScreenPoint(JFrame j,JPanel jp){
    try{
    jframe=j;
    jpPoint=jp;
    jframe.setExtendedState(ICONIFIED);
                Thread.sleep(500);//睡500毫秒是为了让主窗完全不见
                width=Toolkit.getDefaultToolkit().getScreenSize().width;
                height=Toolkit.getDefaultToolkit().getScreenSize().height;
                rec=new Rectangle(0,0,width,height);
                robot=new Robot();
                bi=robot.createScreenCapture(rec);
                sp=new screenPanel(this);
                getContentPane().add(sp,BorderLayout.CENTER);
                setUndecorated(true);
                setSize(width,height);
                setAlwaysOnTop(true);
                setVisible(true);
            } catch(Exception exe){
                exe.printStackTrace();
            }
    }
        private class screenPanel extends JPanel implements MouseListener{
    private static final long serialVersionUID = -4842859133256658306L;
    private Point point=new Point();//当前鼠标移的地点
            private JFrame jf;
            private boolean showTip=false;
            private int num=0;
         public screenPanel(JFrame j){
         jf=j;
                addMouseListener(this);
         }
         public void paintComponent(Graphics g){
                g.drawImage(bi,0,0,width,height,this);
                if(showTip){
                 g.setColor(Color.RED);
                 g.drawOval(point.x-2,point.y-2,4,4);
                }
            }
         public void mouseClicked(MouseEvent me) {
         if(me.getButton()==MouseEvent.BUTTON1){
         if(num<10){
         if(num==0)
         jpPoint.removeAll();
         showTip=true;
         num++;
         point=me.getPoint();
         repaint();
         if(num==1){
         jpPoint.add(new JLabel("序号"));
             jpPoint.add(new JLabel("横坐标"));
             jpPoint.add(new JLabel("纵坐标"));
         }
         jpPoint.add(new JLabel(""+num));
         jpPoint.add(new JLabel(""+point.x));
         jpPoint.add(new JLabel(""+point.y));
         }
         else{
         jf.dispose();
         jframe.setExtendedState(JFrame.NORMAL);
         jframe.setVisible(true);
         }
         }else{
         jf.dispose();
         jframe.setExtendedState(JFrame.NORMAL);
         jframe.setVisible(true);
         }
         }
         public void mousePressed(MouseEvent me) {}
         public void mouseReleased(MouseEvent me) {}
         public void mouseEntered(MouseEvent me) {}
         public void mouseExited(MouseEvent me) {}
        }
    }