2010-09-03 12 views
5

मैं एक कक्षा JFrame का विस्तार है कि कहीं भी एक माउस क्लिक के लिए देख रहा है है:MouseListener फायरिंग नहीं है काफी तेजी से

addMouseListener(new MouseAdapter() { 
    public void mouseClicked(MouseEvent e){ 
     System.out.println("mouse was clicked"); 
    } 
}); 

मैं आमतौर पर क्लिक के बीच लगभग एक दूसरे प्रतीक्षा करने के लिए घटना को गति प्रदान करने के लिए है। अगर मैं एक सेकंड में 2 या 3 क्लिक करता हूं, तो केवल एक घटना आग लगती है। आप तेजी से क्लिक घटनाओं के लिए कैसे देखते हैं?

यह जावा का उपयोग करने वाला मेरा पहला समय है और मैं नेटबीन का उपयोग कर रहा हूं।

+0

मुझे कोई विलंबता दिखाई नहीं दे रही है; कुछ और धीमा कर रहा है। – trashgod

उत्तर

14

माउसक्लिक के बजाए माउस दबाए गए का उपयोग करने का प्रयास करें। mouseClicked कई बटन क्लिक के लिए दिखता है, इसलिए यह कुछ घटनाओं को सहारा देगा।

+0

बस स्पष्टीकरण के लिए, 'mouseEvent' द्वारा प्राप्त 'MouseEvent'' होस्ट क्लासिक ड्राइवर द्वारा प्रदान की गई क्लिक गिनती की रिपोर्ट करता है। उत्तरार्द्ध उपयोगकर्ता प्राथमिकताओं को खाते में ले सकता है या नहीं, जैसा कि @aperkins के उत्तर के बाद टिप्पणियों में चर्चा की गई है। – trashgod

1

@ रिकी क्लार्कसन ने जो कुछ कहा, उस पर थोड़ा विस्तार करने के लिए माउस बटन दबाए जाने पर माउस दबाएगा; हर बार माउस बटन जारी होने पर माउस रिलेज्ड आग लग जाएगी, और माउसक्लिड इवेंट हर बार आग लगेंगे ओएस का मानना ​​है कि उपयोगकर्ता क्लिक कर रहा है (यानी उन्होंने क्लिक गिनती को ओवरफ़्लो करने के लिए पर्याप्त क्लिक किया है या इसके लिए उनके अंतिम क्लिक से पर्याप्त समय था समाप्त क्लिक के रूप में गिनने के लिए)। उपयोगकर्ता माउस ईवेंट दबाता है और रिलीज़ करता है।

यदि आप माउस प्रेस पर जानकारी चाहते हैं, तो माउस दबाए गए ईवेंट का उपयोग करें। अन्यथा, जब भी ओएस जावा को देना चाहता है, तो आपको माउसक्लिड की घटना मिल जाएगी, जो सिस्टम की सेटिंग्स पर निर्भर करता है (यानी सिस्टम विकल्प में देरी का कितना समय निर्धारित होता है - जैसे कि नियंत्रण कक्ष - से डबल क्लिक के लिए अनुमति दें)।

उम्मीद है कि यह स्पष्ट करने में मदद करता है।


संपादित करें: ओएस जानकारी से संबंधित मेरे बयान हटा दिए गए - ऐसा लगता है कि यह मेरी याद में गलत था कि यह कैसे काम करता था। मैं क्षमाप्रार्थी हूं।

+1

मैंने सोचा कि यदि आप 'डबल-क्लिक' करते हैं तो आपको दो माउस-क्लिक किए गए ईवेंट मिलेंगे, एक क्लिक-गिनती के साथ 1 और एक क्लिक-गिनती के साथ 2? – DJClayworth

+0

वास्तव में सोचें कि यह उत्तर नीचे दिया जाना चाहिए, लेकिन मैं केवल विंडोज़ पर परीक्षण कर सकता हूं। सिस्टम सेटिंग्स के पास कुछ भी नहीं है कि कितने माउस क्लिक किए गए ईवेंट उत्पन्न होते हैं। माउस दबाए गए ईवेंट को एक ही माउस समन्वय पर प्रत्येक दबाए/रिलीज़ किए गए ईवेंट के लिए जेनरेट किया जाता है। सिस्टम सेटिंग्स केवल "क्लिक गिनती" को नियंत्रित करती है। यदि आप धीरे-धीरे क्लिक करते हैं तो गिनती हमेशा 1 होगी। यदि आप तेजी से क्लिक करते हैं (सिस्टम सेटिंग्स के भीतर) क्लिक गिनती बढ़ती रहती है। ट्यूटोरियल डेमो आज़माएं: http://download.oracle.com/javase/tutorial/uiswing/events/mouselistener.html – camickr

+0

@camickr: मैक ओएस एक्स पर 'MouseEventDemo' का उपयोग करके, मुझे 'getClickCount के व्यवहार में एक अलग परिवर्तन दिखाई देता है() 'जब मैं मेजबान की डबल-क्लिक गति समायोजित करता हूं; लेकिन मुझे @aperkins द्वारा सुझाए गए कार्यक्रमों की रिपोर्ट करने में कोई देरी नहीं है। मैं यह बताने में असमर्थ हूं कि स्वीकार्य उत्तर प्रश्न में विलंबता को कैसे प्रभावित करता है। – trashgod

1

उम्मीद है कि इस एक ही समस्या :)

आप माउस पर क्लिक करते हैं तो आपको निम्न घटनाओं को सक्रिय कर देगा के जवाब के लिए खोज किसी के लिए 3.5 साल बाद मदद करता है।

  1. MousePressed
  2. mouseDragged
  3. MouseReleased
  4. MouseClicked

मैं यह बहुत ही घटनाओं आलसी रास्ता बनाने समस्या में पड़ गए हैं (यदि आप कठिन थोड़ा कर्सर ले जाने के लिए पर्याप्त दबाया) Netbeans में उनके फॉर्म उपयोगिता का उपयोग कर। मुझे लगता है कि प्रेस और रिलीज के बीच मेरे माउस की आकस्मिक खींचें क्लिक घटना को मार डाला गया है। जेवीएम और नेटबीन्स की विफलता के रूप में कार्यरत या नाबालिग के रूप में कार्य करना? मुझे नहीं पता।


काम के आसपास मैं प्रयोग किया जाता एक MousePressed और MouseReleased घटना क्लिक अनुकरण करने के लिए रजिस्टर करने के लिए किया गया था। यदि प्रेस और रिलीज एक ही ऑब्जेक्ट पर नहीं होता है, तो माउस रीलेड कुछ भी नहीं करेगा।

यदि प्रेस और रिलीज एक ही ऑब्जेक्ट पर होता है, तो मैं ईवेंट को उपभोग करने के लिए उचित पैरामीटर के साथ अपनी विधि को कॉल करता हूं।

ध्यान दें कि चूंकि मैं जेएफआरएएम पर क्लिक कर रहा हूं, इसलिए यह एकमात्र स्विंग ऑब्जेक्ट है, इसलिए मैं माउस कोर के पॉइंट ऑब्जेक्ट को पास कर रहा हूं और दोनों की तुलना कर रहा हूं, यह सुनिश्चित करता हूं कि वे निर्दिष्ट आयताकार में आते हैं।

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