【问题标题】:detect key press during java dnd在java dnd期间检测按键
【发布时间】:2016-07-12 00:39:45
【问题描述】:

我正在尝试检测是否有键,例如控制键,在删除 OS 文件的 java DropTargetDropEvent 中按下。由于从OS文件浏览器到应用程序的焦点变化,我的理解是可能需要没有焦点的关键检测。有人说是hard or impossible 没有焦点,而有人说是solutions and have been accepted。我尝试了接受的解决方案,但正如一条评论所说,它永远不会为按键返回 true。有人知道吗?

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

欢迎任何想法和建议。

【问题讨论】:

    标签: java drag-and-drop keypress


    【解决方案1】:

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

    今天我刚刚想出了一个在 Linux 下检测 ControlDown 的 hack。解决方案是使用 java.awt.Robot 在 DragEnterCallback 中按 Shift 键,如果用户撤销 drop,则在 DropCallback 或 DragExitCallback 中释放该键。然后在 DropCallback 中,getDropAction 将根据 Control 是否关闭而给出 ACTION_LINK 或 ACTION_MOVE。

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

    如果你喜欢独立于操作系统的方法来检测 Shift 键,类似的方法可以用于 DragEnterCallback 中的机器人按下 Control。

    【讨论】:

    • 这个hack解决了Linux下的问题,但并不完美。例如,如果用户在放置文件之前按下并释放 Shift,它将使 Robot Shift 按下无效,因此不会期望 getDropAction。
    猜你喜欢
    • 2016-12-01
    • 2013-04-01
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 2012-10-11
    • 2016-08-01
    相关资源
    最近更新 更多