Java 使用AWTEventListener的全局事件侦听器&;如何拉动MouseEvent';这是因为
以下问题基于以下信息。向下滚动查看实际问题-它具体指的是控制台输出 我已经剥离了所有内容,并提供了一个简单的程序来重现以下输出:Java 使用AWTEventListener的全局事件侦听器&;如何拉动MouseEvent';这是因为,java,swing,events,listener,awt,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.getDefaultToo
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
我的问题是-我如何才能访问此数据库中的各个实体
[鼠标松开,(67,54),绝对(67,54),按钮=1,修改器=1,点击计数=1]
不分析数据
在我的情况下,我需要全局事件侦听器。我以前从未使用过它们,所以我肯定这是我忽略的东西。相关问题(这些都是从哪里产生的),只需检查MouseEvent的e instanceof并从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;
@StanislavL的正确建议代码
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class ClosingFrame extends JFrame {
private static final long serialVersionUID = 1L;
private AWTEventListener awt;
public ClosingFrame() {
setName("Dialog ... ClosingFrame");
JButton b = new JButton("<html>close dialog. <br>enter this button from <br>"
+ "the top to get the <br>hoverhelp close enough<br>to cause problems<html>");
b.setName("buttonToPress");
b.setToolTipText("<html>111111111111111111111"
+ "1111111111111111111111111111111111111111111<br></html>");
b.addActionListener(closeActionListener);
add(b);
JPopupMenu menu = new JPopupMenu();
menu.add("some item ...........");
menu.add("another one ..........");
b.setComponentPopupMenu(menu);
pack();
setVisible(true);
}
private AWTEventListener createAWTWindowListener() {
AWTEventListener awt1 = new AWTEventListener() {
@Override
public void eventDispatched(AWTEvent e) {
if (MouseEvent.MOUSE_EXITED == e.getID()) {
MouseEvent event = (MouseEvent) e;
String name = event.getComponent().getName();
System.out.println("got mouseExited: " + name);
awtMouseExited(event);
}
}
};
return awt1;
}
private void awtMouseExited(MouseEvent event) {
Point point = SwingUtilities.convertPoint(event.getComponent(), event.getPoint(), this);
if (!getBounds().contains(point)) {
// if (!getRootPane().getVisibleRect().contains(point)) {
dispose();
}
}
private void installHoverListeners() {
if (awt != null) {
return;
}
awt = createAWTWindowListener();
Toolkit.getDefaultToolkit().addAWTEventListener(awt, AWTEvent.MOUSE_EVENT_MASK);
}
private void uninstallHoverListeners() {
if (awt == null) {
return;
}
Toolkit.getDefaultToolkit().removeAWTEventListener(awt);
awt = null;
}
@Override
public void addNotify() {
super.addNotify();
installHoverListeners();
}
@Override
public void removeNotify() {
uninstallHoverListeners();
super.removeNotify();
}
private ActionListener closeActionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
dispose();
}
};
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
ClosingFrame closingFrame = new ClosingFrame();
}
});
}
}
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
类ClosingFrame扩展了JFrame{
私有静态最终长serialVersionUID=1L;
私人AWTEventListener awt;
公共关闭框架(){
setName(“对话框…关闭框架”);
JButton b=新JButton(“关闭对话框。
从
输入此按钮”
+“使
鼠标悬停帮助靠近足以引起问题的顶部”);
b、 设置名称(“按钮按下”);
b、 setToolTipText(“111111111111111”
+“1111111111111111111111111111111111111111
”;
b、 addActionListener(closeActionListener);
添加(b);
JPopupMenu=newjpopupmenu();
菜单。添加(“某些项目…………”;
菜单。添加(“另一个……”);
b、 setComponentPopupMenu(菜单);
包装();
setVisible(真);
}
专用AWTEventListener createAWTWindowListener(){
AWTEventListener awt1=新的AWTEventListener(){
@凌驾
已调度公共无效事件(AWTEvent e){
if(MouseEvent.MOUSE_EXITED==e.getID()){
MouseEvent事件=(MouseEvent)e;
字符串名称=event.getComponent().getName();
System.out.println(“got mouseexitted:+name”);
AWTMouseExit(事件);
}
}
};
返回awt1;
}
私有void awtMouseExited(MouseEvent事件){
Point Point=SwingUtilities.convertPoint(event.getComponent(),event.getPoint(),this);
如果(!getBounds().包含(点)){
//如果(!getRootPane().getVisibleRect()包含(点)){
处置();
}
}
私有void installHoverListeners(){
如果(awt!=null){
返回;
}
awt=createAWTWindowListener();
Toolkit.getDefaultToolkit().addAWTEventListener(awt,AWTEvent.MOUSE\u EVENT\u MASK);
}
私有void监听器(){
如果(awt==null){
返回;
}
getDefaultToolkit().removeAWTEventListener(awt);
awt=null;
}
@凌驾
public void addNotify(){
super.addNotify();
installHoverListeners();
}
@凌驾
公共无效删除通知(){
卸载hoverlisteners();
super.removeNotify();
}
私有ActionListener closeActionListener=新ActionListener(){
@凌驾
已执行的公共无效操作(ActionEvent ActionEvent){
处置();
}
};
公共静态void main(字符串参数[]){
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
ClosingFrame ClosingFrame=新ClosingFrame();
}
});
}
}
当我尝试此操作时,它抛出错误:不兼容的条件操作数类型AWTEvent和MouseEvent(在第2行)谢谢你激发了mKorbel的答案。这个答案和那个答案的结合解决了我的问题。希望我能接受两个答案!@Trevorsior应该完全按照Stan所示的那样工作-如果你需要混入任何东西,那么在你的上下文中还有一些错误需要你注意:-)目前正在我的代码中实现它。我已经学会了我不想从这里得到其他东西-谢谢!