【问题标题】:Reduce sensitivity of mouse click detection降低鼠标点击检测的灵敏度
【发布时间】:2014-04-14 16:44:23
【问题描述】:

多年来,我在使用基于 AWT 和 Swing 的界面时反复遇到此问题:某些鼠标单击事件不会触发 MouseListener 中的 mouseClicked,因为在单击期间鼠标移动了至少一个像素(这是一些鼠标的大多数单击)。这被解释为拖动操作。 有没有办法告诉 AWT/Swing 对点击的定义更加宽容?

如果您想要一个完整的解决方案(例如,如果您的组件还必须处理拖动操作),手动实施解决方法会非常麻烦:

  1. 为每个组件添加唯一的 MouseListener 和 MouseMotionListener
  2. 在 mouseMoved、mouseDragged 和 mouseReleased 中进行某种点击计算(这需要测量经过的时间、经过的距离...)
  3. 将“固定”鼠标事件转发到组件实现的新鼠标输入接口

一定有更好的方法!我希望有一个全局设置,但我找不到...

相关帖子

【问题讨论】:

  • 有AWTEventListener、MouseInfo、SwingUtilities转换Point三种方式
  • @mKorbel 我无法将这些与我的问题联系起来。同样,我不想实现自定义点击检测器。
  • Again, I DON'T want to == 有趣,阅读 MouseWhatever API,使用修饰符进行测试,将 mouse_events(Java 版本 >1.6_030/1.7_30)与 API 进行比较,其余部分在一些 Java 的 Bug Parade 中论坛,然后回电:-)
  • hmm ..您的问题是不是接收点击或开始拖动?不是他们我有任何解决方案,只是为了澄清:-) 我的猜测是第一个是你不能在 java/swing/awt 中更改的操作系统属性。

标签: java swing awt mouseevent mouse-listeners


【解决方案1】:

尝试使用以下方法设置 D&D 的灵敏度:

System.setProperty("awt.dnd.drag.threshold", "5");

注意:这仅适用于 List、Table、Text 和 Tree 组件!

查看javax.swing.plaf.basic.DragRecognitionSupport#mouseDragged() 方法的用法。

【讨论】:

  • 正是我正在寻找的那种东西,除了它似乎不会影响鼠标听众
  • 我可以确认这一点,因为我使用“System.setProperty("awt.dnd.drag.threshold", "100")' 在 32x32 JPanel 中不断丢失鼠标侦听器的点击次数。考虑到 mouseClicked MouseEvent 是 MouseDragGestureRecognizer 类的方法细节,我猜这很奇怪?
  • 这完美解决了我的问题,谢谢。当它最初“似乎不起作用”时,我最终发现有人的代码正在覆盖 mousePressed MouseEvent 中的 x & y 以转换坐标(而不是先复制事件),没有意识到这最终覆盖了 MouseDragGestureRecognizer 的事件用途。纠正一切正常。可以通过在 WMouseDragGestureRecognizer mousePressed 和 mouseDragged 中设置断点来验证此属性是否正常运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 2013-05-13
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多