java - 如何在Java中获取我的窗口外的鼠标点击坐标

标签 java swing mouse mouseclick-event

我需要实现一个类,使用Swing,可以在用户点击屏幕任意位置时获取鼠标坐标。如果我想在自己的窗口中获取鼠标坐标,我会使用 MouseListener,但我希望它即使在用户在我的程序外部单击时也能工作。

我希望我的类(class)表现得像 KColorChooser :用户单击下拉按钮,他可以单击屏幕上的任意位置以获取该点的颜色。但我不知道这是否可以使用纯 Java。

最佳答案

这是可能的,虽然有限:

为焦点事件添加 AWTEventListener。只要您的应用在单击按钮之前具有焦点,您就会收到焦点丢失事件。然后查询指针位置。

当然,限制是您的应用失去焦点。因此,这取决于您最终要实现的目标,这可能没有用。

如果您不想失去焦点,那么您将不得不暂时截取整个屏幕的屏幕截图,并将其显示在屏幕填充窗口中,该窗口像往常一样监听鼠标点击。

第一种方法的证明:

import java.awt.AWTEvent;
import java.awt.MouseInfo;
import java.awt.Toolkit;
import java.awt.event.AWTEventListener;

import javax.swing.JFrame;

public class Application1 {
    public static void main(String[] args) {
        Toolkit.getDefaultToolkit().addAWTEventListener(
          new Listener(), AWTEvent.MOUSE_EVENT_MASK | AWTEvent.FOCUS_EVENT_MASK);
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

    private static class Listener implements AWTEventListener {
        public void eventDispatched(AWTEvent event) {
            System.out.print(MouseInfo.getPointerInfo().getLocation() + " | ");
            System.out.println(event);
        }
    }
}

在生成的应用程序外部单击:

java.awt.Point[x=198,y=59] | java.awt.event.MouseEvent[MOUSE_EXITED, ...
java.awt.Point[x=976,y=503] | java.awt.FocusEvent[FOCUS_LOST, ...

第二点在应用之外。

关于java - 如何在Java中获取我的窗口外的鼠标点击坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2419555/

相关文章:

java - 使用gson将json解析为java对象的问题

java - @WithMockUser 在集成测试中不起作用 - Spring boot

java - 用户选择了哪一行

python - 如何使用 Python 控制 Minecraft 中的鼠标?

java - JSP 和小脚本

java - 如何创建 JTextField 数组?

java - 使用 excel 中的字符串作为目录来更改 JLabel 中的图像

c# - 如何在 C#/Vista 中将鼠标事件传递给我背后的应用程序?

usb - 重新发明鼠标健全性检查

java - 如何确保 Java 中的 hashcode() 不会解析为相同的值?