2015-08-22 57 views
1

我试图阻止鼠标光标移动(保持光标在应用程序中心的位置),并且仍然能够处理mouseMoved事件以便在空间旋转摄像头。我试图用java.awt.Robot.mouseMove(int x, int y)做到这一点,但它调用mouseMoved事件,我正在使用旋转相机,因此相机返回到前一个位置。如何在Java Swing中抓取鼠标?

+0

你可以做两个if语句:if(mouseX> centerX)'和'else if(x

回答

2

如果你只是忽略mouseMoved-机器人调用的事件?

您可以保存位置,机器人移动鼠标。如果您使用这些鼠标坐标获得鼠标事件,请忽略此事件。对我来说,这样的工作:

import java.awt.AWTException; 
import java.awt.Robot; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseMotionListener; 

import javax.swing.JFrame; 

public class Test { 
    // position, where mouse should stay 
    private static final int fixX = 500; 
    private static final int fixY = 500; 

    private static Robot robo; 
    private static JFrame frame; 

    public static void main(String[] args) { 
     // create robot 
     try { 
      robo = new Robot(); 
     } catch (AWTException e) { 
      e.printStackTrace(); 
     } 

     // create default frame with mouse listener 
     frame = new JFrame("test frame"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.addMouseMotionListener(new MouseMotionListener() { 
      @Override 
      public void mouseDragged(MouseEvent arg0) { 
       move(arg0); 
      } 

      @Override 
      public void mouseMoved(MouseEvent arg0) { 
       move(arg0); 
      } 
     }); 
     frame.setSize(1000, 1000); 
     frame.setVisible(true); 
    } 

    private static void move(MouseEvent arg0) { 
     // check, if action was thrown by robot 
     if (arg0.getX() == fixX && arg0.getY() == fixY) { 
      // ignore mouse action 
      return; 
     } 
     // move mouse to center (important: position relative to frame!) 
     robo.mouseMove(fixX + frame.getX(), fixY + frame.getY()); 

     // compute and print move position 
     int moveX = arg0.getX() - fixX; 
     int moveY = arg0.getY() - fixY; 
     System.out.println("moved: " + moveX + " " + moveY); 
    } 
} 

鼠标停留在500/500,你让你的鼠标移动,但你有时会看到鼠标跳跃,因为机器人是不够快。

也许你可以隐藏系统光标(How to hide cursor in a Swing application?)并绘制自己的光标。

+0

谢谢,这个解决了我的问题。你的链接对我也很有用。 – Dimansel