java - 如何在 Java Swing 中抓取鼠标?

标签 java swing mouseevent mouselistener

我试图阻止鼠标光标移动(将光标的位置保持在应用程序中心),并且仍然能够处理 mouseMoved 事件,以便在空间中旋转相机。我尝试使用 java.awt.Robot.mouseMove(int x, int y) 来执行此操作,但它调用了我用来旋转相机的 mouseMoved 事件,因此相机返回到之前的位置。

最佳答案

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

您可以保存位置,机器人移动鼠标。如果您收到恰好具有这些鼠标坐标的鼠标事件,请忽略此事件。对我来说这样的事情有效:

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,您可以看到鼠标移动,但有时您会看到鼠标跳跃,因为 Robot 不够快。

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

关于java - 如何在 Java Swing 中抓取鼠标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32159065/

相关文章:

java - Eclipse 中的按钮按下事件 (Android)

java - JTextarea 不使用 miglayout 垂直增长

javascript - 鼠标事件异常

java - 如何扩展 JTabbedPane 以始终具有 "Add Tab"选项卡?

java - 将 JComponent 添加到 JPanel 并将 JPanel 添加到 JFrame 不起作用

java - JComponent contains 方法在 JTable 的 MouseEvent 操作中不起作用

Java 球对象不会像预期的那样从绘制的矩形反弹。

Java 网络模拟器入门

java - 如何在Spring Boot中配置ssl?

java - Resteasy - 从 Javadoc 和注释生成 REST 文档