如何在OSX上拖放期间检测META键按下

Cas*_*ato 8 java macos swing drag-and-drop keyevent

OSX上的Java 6/7中存在一个错误,在拖放操作期间,它会忽略META(CMD)密钥.(Ctrl键在Windows上运行正常,在OSX上也忽略Ctrl键)我真的需要这个工作.

请参阅:Java拖放OS X报告移动而不是复制

我尝试将KeyEventDispatcher侦听器添加到KeyboardFocusManager,但在Drag操作期间不会调用它.

也不会调用父JPanel的processKeyEvent()方法.

那么,有什么地方可以放钩来检测META按键吗?

Jay*_*ray 1

在 DragGestureEvent 上您可以获得修饰符。e.getTriggerEvent().getModifiersEx()javadoc 状态:

扩展修饰符表示事件发生后所有模式键的状态,例如 ALT、CTRL、META 和鼠标按钮。

这段代码在 OSX 上对我有用:

public void dragGestureRecognized(DragGestureEvent e)
{
    boolean isMetaDown = InputEvent.META_DOWN_MASK == (e.getTriggerEvent().getModifiersEx() & InputEvent.META_DOWN_MASK));
    System.out.println("metaDown:"+isMetaDown);
}
Run Code Online (Sandbox Code Playgroud)