全球事件听众与AWTEventListener&如何从其中拖拉MouseEvent [英] Global Event Listeners with AWTEventListener & how to pull MouseEvent's from it

查看:184
本文介绍了全球事件听众与AWTEventListener&如何从其中拖拉MouseEvent的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



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

  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,修饰符= Button1,clickCount = 1] on frame0 
501,java.awt.event.MouseEvent [MOUSE_PRESSED,(71,54),absolute(71,54),button = 1,modifiers = frame0
506,java.awt.event.MouseEvent [MOUSE_DRAGGED,(70,54),绝对(70,54),修饰符= 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 $ b frame0
503,java.awt.event.MouseEvent [MOUSE_MOVED,(67,55),absolute(67,55),clickCount = 0] $ b 503,java.awt.event.MouseEvent [MOUSE_MOVED,( frame0
505,java.awt.event.MouseEvent [MOUSE_EXITED,(65,92),绝对(65,92),按钮= 0)中的绝对值(65,91),clickCount = 0] ,clickCount = 0] on frame0

我的问题是 - 如何在 中的个人实体中访问

[MOUSE_RELEASED,(67, 54),绝对(67,54),按钮= 1,修饰符= Button1,clickCount = 1]



而不解析数据? >

在我的情况下,我需要全局事件监听器。我从来没有使用过它,所以我确定这是我忽略的东西。相关问题(全部来源于此), Java检查鼠标按钮状态

解决方案

只需检查一下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;


The following question is based on the following information. Scroll down to see the actual question - it refers to the console output specifically.

I have stripped out everything, and provided a simple program to reproduce the output below:

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);
    }
}

You will see that it gives the following output in the console:

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

My question is - how can I get access to in individual entities in this

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

without parsing out the data?

I need global event listeners in my situation. I've never used them before so I'm sure it's something I'm overlooking. Related question (where this all spawned from), Java check mouse button state

解决方案

Just check e instanceof MouseEvent and get all the parameters from the 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;

这篇关于全球事件听众与AWTEventListener&如何从其中拖拉MouseEvent的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆