JFrame

2009-09-10 10 views
5

पर माउस लिस्टनर मैं अपने जेएफआरएएम पर माउस ईवेंट (विशेष रूप से माउस दर्ज और बाहर निकलने वाली घटनाओं) के बारे में अधिसूचित होना चाहता हूं। लेकिन जब मैं इसमें एक मूसलिस्टर जोड़ता हूं तो मुझे फ्रेम की सीमाओं पर घटनाएं मिलती हैं, न कि पूरे फ्रेम को इसकी सामग्री के साथ।JFrame

कोई विचार क्यों?

संपादित करें: या कम से कम आपके पास कोई विकल्प है? मैं जेएफआरएएम पर माउस घटनाओं को पकड़ने के लिए "ग्लोबल" तरीका चाहता हूं। शायद एक mouselistener जवाब नहीं है।

उत्तर

6

आप सभी घटनाएं प्राप्त कर सकते हैं और जांच सकते हैं कि उनका स्रोत जेएफआरएएम में एक घटक है या नहीं।

देखें Toolkit.addAWTEventListener

2

क्योंकि सामग्री (शायद एक जेपीनल) "छाया" कर रही है और घटनाओं का उपभोग कर रही है और वे जेएफआरएएम तक नहीं पहुंचती हैं।

आप क्या कर सकते हैं सभी बच्चों को एक ही श्रोता जोड़ने के लिए। यद्यपि एक बेहतर तरीका होना चाहिए।

5

एक अदृश्य घटक है जो पूरे जीयूआई, "ग्लास फलक" को ओवरले करता है। आप अपने श्रोताओं को उस पर संलग्न कर सकते हैं। उदाहरण:

JFrame frame = new JFrame(); 
Component glassPane = frame.getGlassPane(); 
glassPane.addMouseListener(myListener); 

यदि आप अंतर्निहित घटकों तक पहुंचने के लिए अपनी अवरोधित घटनाएं चाहते हैं, तो आप उन्हें फिर से खोज सकते हैं। उदाहरण के लिए:

public void mouseMoved(MouseEvent e) { 
    redispatchMouseEvent(e, false); 
} 
+0

मुझे इसे सक्षम करना होगा। यह घटनाओं को प्राप्त करने के नीचे घटकों को रोक देगा –

+0

आप फिर से खोज सकते हैं। मेरा संशोधित उत्तर देखें। – SingleShot

+0

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

2

AWTEventListener के लिए एक वैकल्पिक एक EventQueue पुश करने के लिए है। इसका लाभ यह है कि एप्लेट और वेबस्टार्ट एप्लिकेशन यह कर सकता है।

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