Windows 7触摸屏+Java Swing=鼠标事件延迟

10

我正在使用Java开发一个Swing应用程序。该程序要在专用的Windows 7触摸屏设备上运行,并且据我所知,在正常操作下,这个程序应该是唯一运行的程序。

我注意到Windows 7的触摸屏界面有一个问题,它会阻止mousedown事件。由于“轻点并按住右键”手势,Windows 7在以下情况下才会发送鼠标按下事件:

  • 用户“抬起”(将手指从屏幕上提起,此时会同时发送down和up事件)
  • 移动他们的手指(此时点击变成拖动)
  • 或者右键圆形手势超时(大约5-6秒后)

显然,这意味着在发送鼠标按下事件之前按钮不会出现按下状态(而且只有轻点的情况下根本不会出现按下状态)。但是,最近,更严重的是,需要长时间按住的功能无法实现,这对普通用户来说会造成很大的混乱。

在开发的这个时候,要从头开始使用其他问题中提供的多种触摸库已经太迟了。(它们需要在它们的组件层次结构中重新编写整个应用程序,这根本不可行。此外,使用鼠标事件编码的东西将不得不使用触摸事件重新编码,而我们真的不需要多点触摸...)

是的,我尝试简单地关闭触摸并按住右键手势。不幸的是,这样做仅仅禁用了在手指周围绘制表示右键手势的圆形,并触发了随后的右键单击。它没有解决潜在的问题:最多延迟六秒的鼠标按下事件。

我的问题: 有没有一种方法:

  • 最好能够告诉Windows我的应用程序是支持触摸的应用程序,以便它立即发送事件(但我想,仍然发送鼠标事件而不是触摸事件)?我可以看到内置的软键盘正常工作,似乎没有问题。我只希望我的Java应用程序也能做到这一点。
  • 完全禁用计算机上的延迟,但仍提供基本的触摸功能?
  • 可能只是像这个问题那样简单,它似乎在询问相同的现象,但是使用的是Java语言?

我也遇到了同样的问题,你在这段时间里找到解决方案了吗? - alan.sambol
2
不好意思,我还没有找到解决方案;如果有的话,我会在这里发布的。我不得不放弃按钮的长按功能。我能提出的最好建议是将相关的UI元素改为需要拖动而不是长按,因为拖动至少可以让点击事件传递下去。 :/ - Tustin2121
谢谢。我正在开发一个OpenGL应用程序,使用JOGL2。当我使用Swing窗口时,我遇到了与您相同的问题鼠标行为。然而,如果我使用NEWT窗口,它会立即报告鼠标按下事件,所以我猜测NEWT有一种方法可以告诉操作系统立即报告事件。 - alan.sambol
有没有鼠标悬停事件可以使用?或者有什么方法可以指示光标在元素内部? - Jill
它是32位还是64位? - Vaibhav Verma
1个回答

1
通常这种行为是由设备上安装的触摸设备驱动程序控制的。我见过的所有触摸屏制造商都有控制面板应用程序,允许您自定义触摸行为。因此,例如,您可以告诉驱动程序在接收到触摸时立即发送鼠标点击,而不是稍微延迟以防止意外触摸启动输入事件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接