我创建了一个MouseMotionDetection类,它的作用只是检测用户是否在屏幕上移动了鼠标。
为此,我在我的类构造函数中创建了一个新的JFrame,并设置了屏幕大小,但它是不可见的,因此基本上我正在观察整个屏幕上的鼠标运动。
但是,我有一个奇怪的bug:
在当前代码的形式下,一旦激活此类,我只检测到一个鼠标运动,之后就没有其他反应了。但如果我将将设置框架背景为0f, 0f, 0f, 0f(透明)的行注释掉,然后再激活,整个屏幕就变成灰色,我可以跟踪所有的鼠标运动,就像我想要的那样(只是我什么也看不到)。
我真的不理解为什么会出现这种情况,也没有发现相关问题,甚至在与MouseMotion事件相关的javadoc中也没有提到。
以下是代码:
为此,我在我的类构造函数中创建了一个新的JFrame,并设置了屏幕大小,但它是不可见的,因此基本上我正在观察整个屏幕上的鼠标运动。
但是,我有一个奇怪的bug:
在当前代码的形式下,一旦激活此类,我只检测到一个鼠标运动,之后就没有其他反应了。但如果我将将设置框架背景为0f, 0f, 0f, 0f(透明)的行注释掉,然后再激活,整个屏幕就变成灰色,我可以跟踪所有的鼠标运动,就像我想要的那样(只是我什么也看不到)。
我真的不理解为什么会出现这种情况,也没有发现相关问题,甚至在与MouseMotion事件相关的javadoc中也没有提到。
以下是代码:
public class MouseMotionDetection extends JPanel
implements MouseMotionListener{
public MouseMotionDetection(Region tableRegion, Observer observer){
addMouseMotionListener(this);
setBackground(new Color(0f,0f,0f,0f));
JFrame frame = new JFrame();
frame.setUndecorated(true);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setSize(screenSize);
frame.setBackground(new Color(0f,0f,0f,0f));
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setAlwaysOnTop(true);
JComponent contentPane = this;
contentPane.setOpaque(true);
frame.getContentPane().add(contentPane, BorderLayout.CENTER);
frame.setVisible(true);
}
@Override
public void mouseDragged(MouseEvent arg0) {
}
@Override
public void mouseMoved(MouseEvent arg0) {
System.out.println("mouse movement detected");
}