OSX上的Java 6/7中存在一个错误,在拖放操作期间,它忽略了META(CMD)密钥。 (Ctrl键在Windows上运行正常,在OSX上也忽略Ctrl键) 我真的需要这个工作。
请参阅:Java Drag and drop on OS X reports Move instead of Copy
我尝试将KeyEventDispatcher侦听器添加到KeyboardFocusManager,但在Drag操作期间不会调用它。
也不会调用父JPanel的processKeyEvent()方法。
那么,有什么地方可以放钩来检测META按键吗?
答案 0 :(得分:1)
在DragGestureEvent上,您可以获得修饰符。 e.getTriggerEvent().getModifiersEx()
javadocs州:
扩展修饰符表示事件发生后所有模态键的状态,例如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);
}
答案 1 :(得分:0)
所以,通过一系列实验,我找到了一种解决方法。 虽然没有鼠标侦听器接收到Command或Ctrl键修饰符,但Ctrl键会影响许多DragNDrop类的DropAction。
我们注意到的一件事是,如果您在放下目标上拖动某些东西后按下控制键,它会起作用。 因此,为了向用户提供更多反馈,我能够修改我的DragSourceListener,并且DragSourceMotionListener(通常)更新拖动图标。它在mac上不可靠,因为mac经常将拖动光标重置为默认值。 但至少用户可以用一种非标准的方式进行拖拽复制操作,图标反馈不一致。