Как записать движение во времени, имея при воспроизведении движений мыши? - PullRequest
1 голос
/ 13 мая 2019

Я пытаюсь записать движения мыши с течением времени и увидеть их во время воспроизведения (возможно, видео, это съедобно). Мне нужно иметь возможность получить точное положение мыши в координатах, когда дано определенное время. Пример: движение мыши записывается в течение 20 секунд. Мне нужно получить местоположение мыши на 10,6 секунд.

Каков наилучший способ хранения этих координат мыши во времени? И лучший способ воспроизвести видео, чтобы иметь полное воспроизведение?

Чтобы получить координаты мыши, я использую официальный слушатель движения мыши Java https://docs.oracle.com/javase/tutorial/uiswing/events/mousemotionlistener.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);
    }
}

1 Ответ

2 голосов
/ 13 мая 2019

Класс MouseEvent имеет такие методы, как getX() соответственно getXOnScreen() и те же для оси Y.

Один из способов это сделать: создать класс, содержащий необходимую информацию, например:

class SimpleCoordinate {
  private final int x;
  ...

, а затем в вашей основной программе:

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

и в вашем слушателе сделайте:

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

Что именно вы храните в своем классе, зависит от вас.Может быть просто «координатами», но может также иметь смысл добавить какую-то временную метку.

Ключевые проблемы, которые необходимо тщательно рассмотреть / спроектировать / протестировать:

  • насколько «гранулирован» этот слушатель мыши (например, когда вы очень быстро перемещаете мышь, сколько событий вы получаете)
  • сколько времени эта программа должна записывать (если она должна записывать дни или недели активности пользователя, вам может не хватить памяти, просто добавив эту информацию в память)

Конечно, в качестве альтернативы, вы можете поместить записи в какую-то "очередь", и заставить другой поток регулярно извлекать элементы из очереди, чтобы как-то их сохранить.

...