Windows 7 Touch Screen + Java Swing = события с задержкой мыши

Я разрабатываю приложение Swing на Java. Программа должна запускаться на специализированных машинах с сенсорным экраном Windows 7, и, насколько я знаю, эта программа должна работать только на них при нормальной работе.

Я заметил, что интерфейс сенсорного экрана Windows 7 имеет эту вещь, где он будет удерживать события mousedown. Из-за жестов "нажмите и удерживайте нажатие правой кнопки мыши" Windows 7 фактически не отправит приложению событие мыши вниз:

  • пользователь "прикасается" (поднимите палец с касания, после чего отправляется как вниз, так и вверх).
  • перемещает палец (в этот момент клик становится перетаскиванием)
  • или время ожидания жестов в правом клике (примерно через 5-6 секунд)

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

На этом этапе разработки далеко слишком поздно развернуться и начать с нуля с помощью одной из многочисленных сенсорных библиотек, предлагаемых по другим вопросам. (Они требуют повторного ввода всего приложения в свою иерархию компонентов, и это просто невозможно. Плюс все, что закодировано для использования событий мыши, затем должно быть перекодировано с помощью событий касания, и нам действительно не нужно использовать multi-touch... )

Да, я попытался просто отключить жестов нажатия и удерживания. К сожалению, это просто отключает рисование круга, указывающего жест правой кнопкой мыши вокруг вашего пальца и огонь последующего щелчка правой кнопкой мыши. Он НЕ удаляет основную проблему: событие задержки с нажатием мыши на срок до шести секунд.

Мой вопрос. Есть ли способ:

  • В идеале укажите в Windows, что мое приложение - приложение, готовое к касанию, поэтому оно немедленно отправляет события (но, я полагаю, все еще посылает события мыши вместо событий касания)? Я вижу, что встроенная мягкая клавиатура работает правильно, похоже. Я просто хочу, чтобы мое приложение Java делало то же самое.
  • Отключить задержку полностью на компьютере, но при этом обеспечить базовые функции касания?
  • Потенциально что-то просто, как этот вопрос, который, кажется, спрашивает об одном и том же явлении, но на Java?

Ответ 1

Обычно этот тип поведения контролируется драйвером сенсорного устройства, установленным на устройстве. Все производители сенсорных устройств, которые я видел, имеют приложения панели управления, которые позволяют настраивать поведение прикосновений. Так, например, вы можете сказать водителю, чтобы он сразу же щелкнул мышью по получении прикосновения, а не задерживался ненадолго, чтобы предотвратить случайное прикосновение от инициирования входного события.