Swing:可靠的方式来了解鼠标悬停位置

时间:2018-03-30 20:01:46

标签: java swing

我正在寻找一种可靠的方法,以便在鼠标移动时以及鼠标下方的组件移动时获得通知。虽然使用MouseMotionListener可以很容易地实现第一部分,但我目前正在努力解决第二部分问题。

现在我有这两个想法:

1。听取所有相关的变化

这个似乎相当艰难,到目前为止我已经

  • ComponentListener:移动组件时
  • AncestorListener:移动祖先时
  • MouseMotionListener:移动鼠标时

当使用JScrollPane时:

  • ChangeListener:视图更改时

赞成

  • 仅触发基于事件。

缺点

  • 使用JScrollPane时中断并且您不知道它。
  • 此外,对于我的特定用例,我想为JEditorPane实现此悬停行为,文本布局可能会发生变化。如评论中所述,例如通过按 Ctrl + Shift + O 来更改text/rtf编辑器窗格的文本方向。< / LI>

2。定期检查位置并通知组件

定期获取鼠标位置并通知包含此位置的子组件。

赞成

  • 抓住所有情况。

缺点

  • 即使没有发生任何变化,也始终触发。
  • 不是即时的。
  • 组件查找可能相当昂贵,尤其是对于许多嵌套组件;我目前正在使用Container#findComponentAt但尚未进行任何测试。 (但可能只有查找MouseMotionListener s一样昂贵。)

您对上述想法有其他解决方案的想法,补充或更改吗?

0 个答案:

没有答案