Java - 冻结鼠标

时间:2014-05-18 17:42:16

标签: java

有没有办法在Java中将鼠标锁定在一个位置一段时间?

我试过这个:

while(timer == true){

    Robot bot = new Robot();
    bot.mouseMove(x, y);

}

但是当用户移动鼠标时,它会前后不快地跳跃(从用户拖动的位置到它应该被锁定的位置)。

如果有更好的方法可以做任何想法吗?或者我可以完全禁用鼠标的用户输入吗?提前谢谢!

1 个答案:

答案 0 :(得分:3)

这是你可以去的(至少使用标准库)。鼠标“跳跃”取决于系统,特别是听众的“采样率”。我不知道影响它的JVM参数,但如果有这种精神的话,也不会感到惊讶。跳跃与鼠标加速度相反(鼠标可以在样本之间移动“长”距离)。

public class Stop extends JFrame {

    static Robot robot = null;
    static Rectangle bounds = new Rectangle(300, 300, 300, 300);
    static int lastX = 450; static int lastY = 450;

    Stop() {

        try {
            robot = new Robot();
        } catch (AWTException e) {
            e.printStackTrace();
        }
        addMouseMotionListener(new MouseStop());

        getContentPane().add(new JLabel("<html>A sticky situation<br>Hold SHIFT to get out of it", JLabel.CENTER));
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setBounds(bounds);
        setVisible(true);
    }

    private static class MouseStop extends MouseAdapter {

        @Override
        public void mouseMoved(MouseEvent e) {

            if(e.isShiftDown()) {
                lastX = e.getXOnScreen();
                lastY = e.getYOnScreen();
            }
            else
                robot.mouseMove(lastX, lastY);
        }
    }

    public static void main(String args[]) {

        new Stop();
    }
}

编辑:我刚刚想到了一个涉及光标绘制的想法,就好像鼠标根本没有移动一样。如果我有所收获,我会添加代码。