我创建了一个 MouseMotionDetection 类,它的作用只是检测用户是否将鼠标移动到屏幕上的任何位置。
为此,我在我的类构造函数中创建了一个新的 JFrame,其屏幕大小是不可见的,所以基本上我在整个屏幕上观察鼠标运动。
但是,我有一个奇怪的错误:
在代码的当前形式中,一旦激活了这个类,我只检测到一个鼠标移动而没有其他任何东西,它在那之后就停止工作。但是,如果我将框架背景设置为 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");
}
