java - 带有 AWTEventListener 的全局事件监听器以及如何从中提取 MouseEvent

标签 java swing events listener awt

以下问题基于以下信息。向下滚动以查看实际问题 - 它专门指控制台输出。

我已经删除了所有内容,并提供了一个简单的程序来重现下面的输出:

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

import javax.swing.JFrame;

public class Main {
    static Toolkit tk = Toolkit.getDefaultToolkit();
    static long eventMask = AWTEvent.MOUSE_MOTION_EVENT_MASK + AWTEvent.MOUSE_EVENT_MASK
           + AWTEvent.KEY_EVENT_MASK;

    public static void main(String[] args) {
        tk.addAWTEventListener(new AWTEventListener() {
            @Override
            public void eventDispatched(AWTEvent e) {
                System.out.println(e.getID() + ", " + e);
            }
        }, eventMask);

        JFrame test = new JFrame();
        test.setBounds(0, 0, 100, 100);
        test.setVisible(true);
    }
}

您将看到它在控制台中提供以下输出:

500, java.awt.event.MouseEvent[MOUSE_CLICKED,(71,54),absolute(71,54),button=1,modifiers=Button1,clickCount=1] on frame0
501, java.awt.event.MouseEvent[MOUSE_PRESSED,(71,54),absolute(71,54),button=1,modifiers=Button1,extModifiers=Button1,clickCount=1] on frame0
506, java.awt.event.MouseEvent[MOUSE_DRAGGED,(70,54),absolute(70,54),modifiers=Button1,extModifiers=Button1,clickCount=0] on frame0
502, java.awt.event.MouseEvent[MOUSE_RELEASED,(67,54),absolute(67,54),button=1,modifiers=Button1,clickCount=1] on frame0
503, java.awt.event.MouseEvent[MOUSE_MOVED,(67,55),absolute(67,55),clickCount=0] on frame0
503, java.awt.event.MouseEvent[MOUSE_MOVED,(65,91),absolute(65,91),clickCount=0] on frame0
505, java.awt.event.MouseEvent[MOUSE_EXITED,(65,92),absolute(65,92),button=0,clickCount=0] on frame0

我的问题是 - 我怎样才能访问this中的单个实体

[MOUSE_RELEASED,(67,54),absolute(67,54),button=1,modifiers=Button1,clickCount=1]

没有解析出数据?

在我的情况下,我需要全局事件监听器。我以前从未使用过它们,所以我确定这是我忽略的东西。相关问题(这一切都是从哪里产生的),Java check mouse button state

最佳答案

只需检查 e instanceof MouseEvent 并从 MouseEvent 获取所有参数

public void eventDispatched(AWTEvent e) { 
  if (e instanceof MouseEvent) {
    MouseEvent  me=(MouseEvent)e;
  } 
}

long KEY_EVENTS = AWTEvent.KEY_EVENT_MASK;
long MOUSE_EVENTS = AWTEvent.MOUSE_EVENT_MASK;
long MOUSE_MOTION_EVENTS = AWTEvent.MOUSE_MOTION_EVENT_MASK;

关于java - 带有 AWTEventListener 的全局事件监听器以及如何从中提取 MouseEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8586098/

相关文章:

java - Apache 和 JBOSS 使用 AJP (mod_jk) 导致线程数激增

java - 在 Java 中通过 GUI 对象实例化

java - java swing 中的全局加速器

java - 使用 Swing JDialog 确定/取消按钮图标以及自定义图标

jquery - drop 事件不会在主干 View 上触发

cocoa - 事件处理程序循环与流运行循环相交

java - 如何处理数组 :Exception in thread "main" java. lang.ArrayIndexOutOfBoundsException: 3

java - 如何将此 while 循环转换为 java 中的 for 循环?

java - WebServer 编译中的 Scala Lift Servlet

c# - 许多文本框的 onTextChanged 事件 c#