2009-07-27 13 views
8

मेरे पास एक जेएफआरएएम है जिसमें बाल घटकों को बदलने की बड़ी संख्या है। (कई परतें) क्या सभी माउस घटनाओं के लिए श्रोता जोड़ने का कोई तरीका है? KeyEventDispatcher की तरह कुछ?मैं जेएफआरएएम/स्विंग में सभी माउस ईवेंट कैप्चर कैसे कर सकता हूं?

+1

इस समुदाय विकी क्यों है? – akf

उत्तर

18

एक AWTEventListener MouseEvents को फिल्टर करने का उपयोग करें:

long eventMask = AWTEvent.MOUSE_MOTION_EVENT_MASK + AWTEvent.MOUSE_EVENT_MASK; 
Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() 
{ 
    public void eventDispatched(AWTEvent e) 
    { 
     System.out.println(e); 
    } 
}, eventMask); 
+1

यह हस्ताक्षरित एप्लेट्स में अनुमति नहीं है – lexicalscope

0

एक कक्षा में सभी माउस से संबंधित श्रोताओं को लागू करें, और उस वर्ग रजिस्टर सभी माउस से संबंधित घटनाओं के लिए हैंडलर के रूप में

माउस संबंधित इंटरफेस

MouseListener MouseMotionListener MouseWheelListener

+1

यह काम नहीं करता है क्योंकि पदानुक्रम में केवल एक ही घटक माउस ईवेंट प्रकाशित करने जा रहा है। इसलिए इसे पदानुक्रम में प्रत्येक घटक पर माउस श्रोता (ओं) को पंजीकृत करने की आवश्यकता होगी। –

2

आपके पास होगा जेएफआरएएम का ग्लासपेन का उपयोग करने के लिए: http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JFrame.html#getGlassPane()

बस ग्लास फलक प्राप्त करें frm.getGlassPane() के साथ एक JFrame का और विंडो के अंदर सभी माउस ईवेंट को कैप्चर करने के लिए addMouseListener() का उपयोग करें।

0

आप MouseAdapter का उप-वर्ग लागू करना चाहते हैं, एक सार वर्ग जो Mouse*Listener इंटरफ़ेस में परिभाषित सभी विधियों के खाली कार्यान्वयन प्रदान करता है। एक बार ऐसा करने के बाद, आप इसे बनाए जाने पर MouseListener के रूप में अपने बच्चे के घटकों के साथ पंजीकृत कर सकते हैं। जैसा कि आप इंगित करते हैं कि आपके घटक 'बदल रहे हैं', आप यह सुनिश्चित करना चाहते हैं कि आप अपने श्रोता को अनधिकृत भी करें यदि आप अपने जेएफआरएएम के जीवन चक्र के दौरान अपने घटकों को रिलीज़ करने की उम्मीद करते हैं।

+0

माउस इनपुट एडाप्टर - माउस एडाप्टर केवल माउसलिस्टर (क्लिक, कोई गति या स्क्रोल व्हील) के लिए एक कार्यान्वयन है। – Nate

+0

नेट, उत्तर के लिए धन्यवाद। कोड को देखते हुए, मुझे लगता है कि MouseAdapter सभी तीन इंटरफेस लागू करता है। – akf

7

आप अपने पूरे JFrame पर एक GlassPane जोड़ सकता है, यह करने के लिए एक MouseInputAdapter जोड़ने के लिए सभी संभव माउस की घटनाओं को आकर्षित करने, और उसके बाद का उपयोग [SwingUtilities.getDeepestComponentAt()] [3] वास्तविक घटक पाने के लिए और [SwingUtilities.convertMouseEvent ()] [4] ग्लास फलक से वास्तविक घटक तक माउस इवेंट का प्रतिनिधित्व करने के लिए।

हालांकि, मुझे इसके प्रदर्शन के प्रभाव के बारे में निश्चित नहीं है - KeyEventDispatcher के विपरीत, जिसे किसी भी कुंजी दबाए जाने पर केवल एक ईवेंट को आग लगाना पड़ता है, उपयोगकर्ता कई माउस उत्पन्न करता है क्योंकि उपयोगकर्ता माउस को ले जाता है - और KeyEventDispatcher के विपरीत, आप ईवेंट को इसे संभालने के लिए निम्न घटक को फिर से भेजने की आवश्यकता है।

(खेद है - stackoverflow SwingUtilities तरीकों के लिंक सही ढंग से निपटने के नहीं है ... लिंक बल्कि पाठ की तुलना में नीचे दिखा रहे हैं।)

[3]: http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/SwingUtilities.html#getDeepestComponentAt(java.awt.Component, int, int) [4 ]: http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/SwingUtilities.html#convertMouseEvent(java.awt.Component, java.awt.event.MouseEvent, java.awt.Component)

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

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