2009-11-15 9 views
13

में/keyReleased() की घटनाओं तो समस्या यह है कि मैं कर रहा हूँ एक बग है कि केवल लिनक्स पर होता प्रतीत होता है। जब मैं एक कुंजी दबाया जाता है, तो यह पता लगाने के लिए कि जब वह कुंजी जारी की जाती है तो मैं अपने स्विंग ऐप रिकॉर्ड करने की कोशिश कर रहा हूं। अब यह समस्या में नहीं होना चाहिए क्योंकि KeyListener इसे मेरे लिए संभालना है।कैसे दोहराया बंद करने के लिए keyPressed() स्विंग

समस्या यह है कि जब मैं कुंजी को दबाए रखें मैं बार-बार keyPressed()/keyReleased() के बजाय घटनाओं के बहुत सारे मिल है सिर्फ एक keypressed()। क्या किसी को लिनक्स पर वास्तव में रिलीज़ होने पर जानने के लिए कोई समाधान या समाधान होता है?

धन्यवाद।

उत्तर

14

तो समस्या यह है कि मैं हो रहा है एक बग है कि केवल लिनक्स

पर

होता है हाँ यह एक लिनक्स समस्या है प्रतीत होता है।

विंडोज़ पर जब एक कुंजी के दबे आप एक से अधिक KeyPressed घटनाओं लेकिन केवल एक ही KeyReleased घटना मिलता है।

यह सवाल अक्सर पूछा जाता है और मैं एक अच्छा समाधान कभी नहीं देखा।

लेकिन मुझे लगता है एक समाधान के आधार एक टाइमर का प्रयोग है। जब कुंजी दबाया जाता है तो आप टाइमर शुरू करते हैं। जब आप एक और कुंजी दबाते हैं तो आप टाइमर को पुनरारंभ करते हैं। इसलिए जब तक कि टाइमर अंतराल कुंजी बोर्ड की दोहराने की दर से अधिक हो, तब तक जब एक कुंजी दबाई जाती है तो टाइमर लगातार रीसेट हो जाएगा। जब keyPresses उत्पन्न होने से रोकें तो टाइमर आग लगेगा ताकि आप मान लें कि कुंजी जारी की गई है। इसका तात्पर्य है कि आपको keyReleased को संसाधित करने में देरी होगी।

+1

मैं जावा में "कुंजी बोर्ड की दोहराना दर" कैसे प्राप्त करूं? यह एक ओएस उपयोगकर्ता वरीयता सेटिंग है, है ना? –

2

यह सवाल here दोहराया गया है।

Here's a hack एक AWTEventListener है कि आवेदन के शुरू में स्थापित किया जा सकता के रूप में लागू।

2

आप एक बहुत अच्छा कामकाज here पा सकते हैं।

+0

लिंक मर चुका है :-( – Thomas

+0

+1 उपयोगी उदाहरण के लिए और लिंक को बहाल करना। धन्यवाद! –

संबंधित मुद्दे