2016-07-27 17 views
8

OSX'te Java 6/7'de, Sürükle ve Bırak işlemleri sırasında, META (CMD) tuşunun yok sayıldığı bir hata vardır. (Ctrl tuşu Windows üzerinde çalışıyor, Ctrl tuşu da OSX'te yok sayılıyor) Bu çalışmayı GERÇEKTEN GEREKİYORUM.OSX'de Sürükle ve Bırak sırasında META tuşunu nasıl algıladığı

Bkz: Ben KeyboardFocusManager bir KeyEventDispatcher dinleyici ekleme çalıştı Java Drag and drop on OS X reports Move instead of Copy

, ama bu bir sürükle işlemi sırasında çağrılmaz.

Ebeveyn JPanel'in processKeyEvent() yöntemi hiç çağrılmıyor.

META tuşa basımlarını tespit etmek için kanca takabileceğim herhangi bir yer var mı?

cevap

1

DragGestureEvent üzerinde değiştiricileri alabilirsiniz. e.getTriggerEvent().getModifiersEx() Javadocs durumu:

Genişletilmiş düzenleyiciler gibi ALT, CTRL META gibi tüm modal tuşları, durumunu temsil ve sadece olaydan sonra fare düğmeleri oluştu.

Bu kod

OSX'te benim için çalıştı:

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

Sadece bunu denedim. (hatırlıyorum, Java 1.6'da çalışıyorum, 1.8 değil) getModifiersEx() her zaman bir 1040 döndürür. BUTTON1_MASK | BUTTON1_DOWN_MASK Kontrol, Seçenek, Komutu denedim. tüm tuşlar aynı değeri verdi. – CasaDelGato

+0

Maalesef, yayınınızdaki 1.6 sayfayı görmedim. Şimdi diğer konuya verdiğiniz bağlantıda yapıyorum. – Jayfray

+0

Evet, yalnızca orijinal sorudaki sürümün yanlış yazıldığını fark ettim. Java 6/7 olmalı, 7/8 değil. – CasaDelGato

0

Yani, deney bir grup ile buldum geçici çözüm tür-of ettik. Fare dinleyicilerinin hiçbiri Komut veya Ctrl tuş değiştiricisini almazken, Ctrl tuşu birçok DragNDrop sınıfı için DropAction'ı etkiler.

Fark ettiğimiz bir şey, bırakma hedefi üzerinde bir şey sürükledikten sonra kontrol tuşunu basarsanız, bunun işe yarayacağıydı. Kullanıcıya daha büyük bir geri bildirim sağlamak için DragSourceListener ve DragSourceMotionListener'ı sürükleme simgesini (genellikle) güncelleyebildim. Mac'te, sürükle imleci varsayılana sık sık sıfırladığından, bu, Mac'te güvenilmezdir. Ancak en azından kullanıcı, tutarsız simge geri bildirimi ile standart olmayan bir şekilde Sürükle Kopyalama işlemini yapabilir.