在Java中如何在拖放过程中获取鼠标信息?

5
我们在开发的产品中收到了一个要求,希望能够得到更多有关拖放行为的反馈。具体而言,他们想让我们在鼠标在拖动操作期间悬停在某些区域时突出显示这些区域(以显示将发生拖放的位置)。然而,我们正在使用TransferHandler来处理DnD和剪切/复制/粘贴,并且根据我们所测试的情况,似乎Swing不会让我们向组件添加另一个DropTarget(回想起来,这是一些显而易见的原因!)。我们已经尝试了几种方法,但都没有什么成果。
基本上,我们希望在仍然使用TransferHandler功能来促进简单的剪切/复制/粘贴和拖放行为的情况下,在dragEnter和dragExit事件之间介入。有人有这样做的示例吗?或者在当前的Swing DnD设置中这真的很难做到吗?
1个回答

2

大多数开箱即用的Swing组件都内置了此功能(如JTree、JList等)。对于这些组件,您可以设置拖放模式,UI将处理绘制适当的视觉效果。

myJList.setDropMode(DropMode.ON_OR_INSERT);

对于自定义组件,您需要通过覆盖paintComponent来处理绘制自定义效果,然后添加一个"dropLocation"属性的propertyChangeListener,以在必要时触发适当的重绘。在拖动过程中,这将频繁地被调用,因此您可能希望仅在放置位置的更改实际上导致行为的更改时触发重绘。 Swing教程:关于放置位置渲染

那似乎是目前最好的信息 - 不幸的是,在JComponent和JPanel中,它们都不支持所声称支持的行为。 叹气 感谢您的快速回答。 - aperkins

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