2016-07-27 14 views
8

पर ड्रैग और ड्रॉप के दौरान मेटा कुंजी प्रेस का पता लगाने के लिए कैसे करें ओएसएक्स पर जावा 6/7 में एक बग है जहां ड्रैग और ड्रॉप ऑपरेशंस के दौरान, यह मेटा (सीएमडी) कुंजी को अनदेखा करता है। (विंडोज कुंजी विंडोज़ पर ठीक काम करता है, ओएसएक्स पर Ctrl कुंजी भी अनदेखा करता है) मुझे वास्तव में यह काम करने की आवश्यकता है।ओएसएक्स

देखें: Java Drag and drop on OS X reports Move instead of Copy

मैं KeyboardFocusManager करने के लिए एक KeyEventDispatcher श्रोता जोड़ने की कोशिश की, लेकिन यह एक खींचें आपरेशन के दौरान नहीं बुलाया जाता है।

न ही माता-पिता जेननेल की प्रक्रिया केईवेन्ट() विधि को कभी भी बुलाया जाता है।

तो, क्या कोई ऐसी जगह है जहां मैं मेटा कुंजी प्रेस का पता लगाने के लिए एक हुक डाल सकता हूं?

उत्तर

1

DragGestureEvent पर आप संशोधक प्राप्त कर सकते हैं। e.getTriggerEvent().getModifiersEx() javadocs राज्य:

विस्तारित संशोधक इस तरह के एएलटी, CTRL मेटा के रूप में सभी मोडल चाबियाँ, के राज्य का प्रतिनिधित्व करते हैं, और सिर्फ घटना के बाद माउस बटन हुई।

इस कोड पर 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

बस कोशिश की। (याद रखें, मैं जावा 1.6 में काम कर रहा हूं, नहीं 1.8) getModifiersEx() हमेशा 1040 लौटाता है। BUTTON1_MASK | BUTTON1_DOWN_MASK मैंने नियंत्रण, विकल्प, कमांड का प्रयास किया। सभी चाबियाँ एक ही मूल्य दिया। – CasaDelGato

+0

क्षमा करें आपकी पोस्ट में 1.6 नहीं देखा। अब मैं आपके द्वारा प्रदान किए गए लिंक में अन्य मुद्दे पर करता हूं। – Jayfray

+0

हाँ, मैंने अभी देखा है कि मैंने मूल प्रश्न में संस्करण को गलत टाइप किया है। जावा 6/7 होना चाहिए, 7/8 नहीं। – CasaDelGato

0

तो, प्रयोग के एक समूह के साथ, मैं एक वैकल्पिक हल पाया तरह-की है। जबकि माउस श्रोताओं में से कोई भी कमांड या Ctrl कुंजी संशोधक प्राप्त नहीं करता है, तो Ctrl कुंजी ड्रैगनड्रॉप कक्षाओं के लिए ड्रॉपएक्शन को प्रभावित करता है।

एक बात हमने देखा कि यह काम करेगा यदि आपने ड्रॉप कुंजी पर कुछ खींच लिया है तो आप नियंत्रण कुंजी दबाएंगे। इसलिए उपयोगकर्ता को एक और अधिक प्रतिक्रिया के साथ प्रदान करने के लिए, मैं अपने ड्रैगसोर्स लिस्टनर को संशोधित करने में सक्षम था, और ड्रैगसोर्समोशन लिस्टर (आमतौर पर) ड्रैग आइकन अपडेट करता था। यह मैक पर अविश्वसनीय है, क्योंकि मैक अक्सर ड्रैग कर्सर को डिफ़ॉल्ट रूप से रीसेट करता है। लेकिन कम से कम उपयोगकर्ता असंगत आइकन फीडबैक के साथ कुछ हद तक गैर-मानक तरीके से ड्रैग-कॉपी ऑपरेशन कर सकता है।