如何随着时间的推移记录运动,并播放鼠标运动



我试图随着时间的推移记录鼠标的动作,并通过播放(可能是视频,是可食用的(。当给定特定时间时,我需要能够检索鼠标在坐标中的确切位置。例如:记录鼠标运动20秒。我需要在10.6秒的位置获取鼠标的位置。

随着时间的推移,存储这些鼠标坐标的最佳方法是什么?最好的播放方法制作视频以进行整个播放?

要获得鼠标的坐标,我正在使用Java的官方鼠标运动听众https://docs.oracle.com/javase/tutorial/uiswing/uiswing/events/mousememotionlistener.html

public class MouseMotionEventDemo extends JPanel 
                                  implements MouseMotionListener {
    //...in initialization code:
        //Register for mouse events on blankArea and panel.
        blankArea.addMouseMotionListener(this);
        addMouseMotionListener(this);
        ...
    }
    public void mouseMoved(MouseEvent e) {
       saySomething("Mouse moved", e);
    }
    public void mouseDragged(MouseEvent e) {
       saySomething("Mouse dragged", e);
    }
    void saySomething(String eventDescription, MouseEvent e) {
        textArea.append(eventDescription 
                        + " (" + e.getX() + "," + e.getY() + ")"
                        + " detected on "
                        + e.getComponent().getClass().getName()
                        + newline);
    }
}

MouseEvent类分别具有getX()诸如CC_1之类的方法,而Y轴则相同。

解决这个问题的一种方法:创建一个包含您需要的信息的类,例如:

class SimpleCoordinate {
  private final int x;
  ...

,然后在您的主要程序中:

List<SimpleCoordinate> coordinatesHistory = new ArrayList<>();

在您的听众中做:

coordinatesHistory.add(new SimpleCoordinate(...))

您在班上确切存储的决定取决于您。可能只是"坐标",但也可能会感觉到添加某种时间戳。

仔细考虑/设计/测试的关键问题:

  • 那个鼠标的侦听器是多么"粒状"(就像当您真正快速移动鼠标时,您得到了多少事件(
  • 该程序应该记录多长时间(如果应该记录用户活动的天数或几周,您可能会用尽内存,只需将这些信息添加到内存(
  • (

当然,您可以将记录推入一些"队列",并有另一个线程定期从队列中获取元素,以某种方式将其持续下去。

最新更新