在java dnd期间检测按键

时间:2016-07-12 00:39:46

标签: java drag-and-drop keypress

我正在尝试检测是否有密钥,例如在删除OS文件的java DropTargetDropEvent中按下控制键。由于从OS文件浏览器到应用程序的焦点变化,我的理解是可能需要无需关注的关键检测。有人说hard or impossible没有焦点,有些人发帖solutions and have been accepted。我尝试了接受的解决方案,但正如一条评论所说,对于按键,它永远不会回归。任何人都有任何想法?

我还尝试使用getDropAction of DropTargetDropEvent来检测控制键。在我测试的Windows和MAC下,如果控制关闭则返回ACTION_COPY,如果控制和移位都没有,则返回ACTION_MOVE。不幸的是,无论控制键是否关闭,它都会在Linux下返回ACTION_COPY。有没有想过覆盖拖动源支持的放置操作,这样当控制键没有关闭时,getDropAction不会在Linux下返回ACTION_COPY?

欢迎任何想法和建议。

1 个答案:

答案 0 :(得分:0)

我发布这个问题好几个月,但没有答案。问题是,在Linux下的DropTargetDropEvent期间,无论Control key是否关闭,getDropAction都会给出ACTION_COPY。

今天我发现了一个在Linux下检测ControlDown的黑客攻击。解决方案是使用java.awt.Robot在DragEnterCallback中按Shift键,如果用户撤消drop,则在DropCallback或DragExitCallback中释放键。然后在DropCallback中,getDropAction将提供ACTION_LINK或ACTION_MOVE,具体取决于Control是否已关闭。

实际上,这是一个独立于操作系统的解决方案,用于在丢弃事件期间检测Control键,尽管Windows / MAC有更简单的方法。

如果一个人喜欢与OS无关的方法来检测Shift键,可以使用类似的方法在DragEnterCallback中按机器人控制。