在 java dnd 期间检测按键

detect key press during java dnd

我正在尝试检测是否有一个键,例如控制键,在javaDropTargetDropEvent of dropping an OS file. Due to the focus change from OS file browser to application, my understanding is key detection without focus may be needed. Some said it is hard or impossible without focus, while some posted solutions and have been accepted中被按下。我尝试了公认的解决方案,但正如一条评论所说,按键从来没有 returns 正确。有人知道吗?

我也试过用getDropAction of DropTargetDropEvent检测控制键。在我测试的 Windows 和 MAC 下,如果控件按下,则 return 为 ACTION_COPY,如果控件和 shift 均未按下,则为 ACTION_MOVE。不幸的是,无论控制键是否按下,它 returns ACTION_COPY 在 Linux 下。是否有任何想法可以覆盖拖动源支持的放置操作,以便当控制键未按下时 getDropAction 不会 return ACTION_COPY 在 Linux 下?

欢迎任何想法和建议。

这个问题我发了好几个月了,还是没有答案。问题是,在 Linux 下的 DropTargetDropEvent 期间,无论是否按下 Control 键,getDropAction 都会给出 ACTION_COPY。

今天我刚刚想出一个 hack 来检测 Linux 下的 ControlDown。解决方法是在DragEnterCallback 中使用java.awt.Robot 按住Shift 键,在DropCallback 或DragExitCallback 中如果用户撤销drop 则松开该键。然后在 DropCallback 中,getDropAction 将给出 ACTION_LINK 或 ACTION_MOVE,具体取决于 Control 是否关闭。

实际上这是一个 OS 独立的解决方案,用于在放置事件期间检测 Control 键,尽管 Windows/MAC.

有更简单的方法

如果喜欢OS-独立检测Shift键的方法,可以用类似的方法在DragEnterCallback中自动按下Control。