2016-07-27 7 views
8

ドラッグアンドドロップ操作中にMETA(CMD)キーを無視するバグがOSX上のJava 6/7にあります。 (CtrlキーはWindows上で正常に動作し、CtrlキーもOSXでは無視されます) 私は本当にこれを動作させる必要があります。OSXのドラッグ&ドロップ中にMETAキーが押されたことを検出する方法

参照してください:Java Drag and drop on OS X reports Move instead of Copy

私はのKeyboardFocusManagerへのKeyEventDispatcherリスナーを追加しようとしたが、それは、ドラッグ操作中に呼び出されていません。

親JPanelのprocessKeyEvent()メソッドも呼び出されません。

私はMETAキーの押下を検出するためのフックを置くことができる場所はありますか?

答えて

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); 
} 
+0

これを試しました。 (覚えておいて、私はJava 1.6では1.8ではない) getModifiersEx()は常に1040を返します。 BUTTON1_MASK | BUTTON1_DOWN_MASK 私はControl、Option、Commandを試しました。すべてのキーが同じ値を返しました。 – CasaDelGato

+0

あなたの投稿には1.6が表示されませんでした。私は今あなたが他の問題に提供したリンクでやります。 – Jayfray

+0

ええ、私はちょうど元の質問のバージョンを間違って入力して気づいた。 7/8ではなく、Java 6/7である必要があります。 – CasaDelGato

0

、実験の束と、私は一種-の回避策を見つけました。 CommandまたはCtrlキー修飾子を受け取ったマウスリスナーはありませんが、Ctrlキーは多くのDragNDropクラスのDropActionに影響します。

ドロップターゲットの上に何かをドラッグした後で、コントロールキーを押した場合に動作することがわかりました。 ユーザーにもっと多くのフィードバックを提供するために、DragSourceListenerとDragSourceMotionListenerを変更して(通常は)ドラッグアイコンを更新することができました。 Macでは頻繁にドラッグカーソルがデフォルトにリセットされるため、Macでは信頼できません。 少なくとも、ユーザはアイコンのフィードバックが一貫していない、やや標準的ではないドラッグ・コピー操作を行うことができます。

関連する問題