是否可以检查拖放操作的源/目标是否相同(在 java 中)?



上下文

我想为Matlab创建一个列表框组件,在该组件中,我可以仅使用鼠标手势对项目进行重新排序,并从一些资源管理器窗口中删除文件。

这样的组件似乎不存在,所以我需要创建自己的。我在FileExchange上发现了两个有趣的起点:

  • 可重新排序列表框:支持通过拖动项目进行重新排序
  • dndcontrol:支持从资源管理器窗口拖动文件

因此,我试图合并两者,以创建我需要的自定义列表框,并创建一个更通用的dndcontrol,这样我就可以将其用于其他目的(支持图像、更好地控制触发事件等)

问题

在某个时刻,我需要知道启动拖动操作的源组件是否与将接收拖放操作的目标组件相同。例如,,但不只是专注于这个特定的情况,我可以让我的列表框接收来自它自己的文本传输(用于项目重新排序等),而不是来自其他组件的文本传输。

从DropTargetDragEvent和DropTargetDropEvent事件中读取方法和属性,我可以从DropTarget侦听器接收到,但似乎不可能知道这一点。我唯一能找到的是LocalTransfer,但这只指示源和目标是否在同一JVM中(并且仅在放置时可用,例如在拖动期间不可用)。

问题

我想我可以针对我的自定义Listbox的特定情况进行破解,无论如何,是否有更标准/通用的方法使用Java来了解拖放操作中的源和目标是否相同?

NB1:也许我想附加某种拖动侦听器,因为我可以附加一个拖放侦听器(即DropTarget),但我不知道这是否存在。

NB2:对不起,我对Java编程和dnd处理真的很陌生。我希望我的解释能帮助我理解我想要实现的目标。

只需在DropTarget侦听器之外添加对MousePressedMouseReleased事件的回调即可。如果在两者之间接收到拖动事件,则控件无疑既是源控件,也是目标控件。我应该早点考虑这个问题。

相关内容

最新更新