2016-07-27 25 views
8

Es gibt einen Fehler in Java 6/7 unter OSX, bei dem während Drag & Drop-Operationen der Schlüssel META (CMD) ignoriert wird. (Strg-Taste funktioniert gut unter Windows, Strg-Taste ignoriert auch auf OSX) Ich muss wirklich funktionieren.META-Taste während Drag & Drop auf OSX erkennen

See: Java Drag and drop on OS X reports Move instead of Copy

Ich versuchte, einen KeyEventDispatcher Zuhörer zum KeyboardFocusManager Zugabe, aber das wird nicht während eines Ziehvorgangs aufgerufen.

Noch wird die processKeyEvent() -Methode des übergeordneten JPanel jemals aufgerufen.

Also, gibt es einen Ort, wo ich einen Haken legen kann, um META Tasten drücken zu erkennen?

Antwort

1

Auf dem DragGestureEvent können Sie die Modifikatoren erhalten. e.getTriggerEvent().getModifiersEx() javadocs Zustand:

Erweiterte Modifikatoren repräsentieren den Zustand aller modalen Tasten, wie ALT, CTRL, META, und die Maustasten kurz nach dem Ereignis aufgetreten ist.

Dieser Code für mich auf OSX gearbeitet:

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

Ich habe es gerade versucht. (Denken Sie daran, ich arbeite in Java 1.6, nicht 1.8) getModifiersEx() gibt immer eine 1040. BUTTON1_MASK | BUTTON1_DOWN_MASK Ich habe versucht Control, Option, Command. Alle Tasten haben den gleichen Wert. – CasaDelGato

+0

Sorry hat den 1.6 in Ihrem Beitrag nicht angezeigt. Ich mache jetzt den Link in dem du das andere Thema angegeben hast. – Jayfray

+0

Ja, ich habe gerade bemerkt, dass ich die Version in der ursprünglichen Frage falsch eingegeben habe. Sollte Java 6/7 gewesen sein, nicht 7/8. – CasaDelGato

0

Also, mit einem Bündel von Experimenten habe ich Art-gefundenes dieses Problem zu umgehen. Während keiner der Maus-Listener den Befehls- oder Strg-Tastenmodifikator erhält, wirkt sich die Strg-Taste auf die DropAction für viele der DragNDrop-Klassen aus.

Eine Sache, die wir bemerkten, war, dass es funktionieren würde, WENN du den Steuerschlüssel NACHDEM du etwas über das Drop-Ziel gezogen hast. Um dem Benutzer mehr Feedback zu geben, konnte ich meinen DragSourceListener und DragSourceMotionListener ändern, um das Drag-Symbol (normalerweise) zu aktualisieren. Es ist unzuverlässig auf dem Mac, da der Mac den Drag-Cursor häufig auf den Standard zurücksetzt. Aber zumindest der Benutzer kann eine Drag-Copy-Operation, in einer etwas nicht-Standard-Art, mit inkonsistenten Icon-Feedback.