Es gibt einen Fehler in Java 6/7 auf 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.
Siehe: Java Drag und Drop auf OS X-Berichte Verschieben statt Kopieren
Ich habe versucht, dem KeyboardFocusManager einen KeyEventDispatcher-Listener hinzuzufügen, der aber nicht während einer Drag-Operation aufgerufen wird.
Auch wird die processKeyEvent () -Methode des übergeordneten JPanels niemals aufgerufen.
Also, gibt es einen Ort, an dem ich einen Haken setzen kann, um META-Tasten zu drücken?
Im DragGestureEvent können Sie die Modifikatoren erhalten. e.getTriggerEvent().getModifiersEx()
javadocs state:
Erweiterte Modifikatoren stellen den Status aller modalen Schlüssel dar, z. B. ALT, STRG, META und die Maustasten direkt nach dem Auftreten des Ereignisses.
Dieser Code funktionierte für mich unter OSX:
%Vor%Also, mit ein paar Experimenten habe ich eine Art Workaround gefunden. Während keiner der Maus-Listener den Befehlstasten- oder Strg-Tastenmodifikator erhält, wirkt sich die Strg-Taste auf die DropAction für viele der DragNDrop-Klassen aus.
Eine Sache, die uns aufgefallen ist, war, dass es funktionieren würde, wenn Sie die Kontrolltaste gedrückt haben, nachdem Sie etwas über das Abwurfziel gezogen haben. Um dem Benutzer mehr Feedback zu geben, konnte ich meinen DragSourceListener und den DragSourceMotionListener ändern, um das Drag-Symbol zu aktualisieren. Es ist unzuverlässig auf dem Mac, da der Mac den Drag-Cursor häufig auf den Standard zurücksetzt. Aber zumindest kann der Benutzer eine Drag-Copy-Operation ausführen, die etwas nicht standardgemäß ist und eine inkonsistente Icon-Rückmeldung aufweist.
Tags und Links java macos swing drag-and-drop keyevent