2009-04-16 11 views
5

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

तो यह कुछ इस तरह होगी ...

--------------- 
|    |---------- 
| JFrame |   | 
|    | JWidow | 
|    |   | 
|    |   | 
|    |   | 
|    |----------- 
--------------- 

जिसके अनुसार, ओएस एक्स में ComponentListener componentMoved के लिए निरंतर अपडेट नहीं भेजता है, केवल जब तुम एक पल के लिए रोक सकते हैं या माउस बंद उठा। ऐसा लगता है कि विन/लिनक्स से अलग है, इसलिए मैं सोच रहा था कि किसी के पास कोई अलग समाधान है या नहीं।

पूरी तरह से सबकुछ समझने के बिना, मैं खिड़की के टाइटलबार (जो रूटपैन लगता है) के बारे में कुछ भी खींचने के साथ मिलकर काम करने की उम्मीद कर रहा था। मुझे यह भी यकीन नहीं है कि क्या ऐसा करना संभव है, लेकिन यह एकमात्र अन्य समाधान है जिसे मैं यह निर्धारित करने के लिए सोच सकता हूं कि पूरी खिड़की को कब खींचा जा रहा है।

किसी भी मदद की सराहना की जाती है!

+0

मुझे निर्दिष्ट होना चाहिए था, मैं प्राथमिक रूप से जेएफआरएएम का उपयोग कर रहा हूं और द्वितीयक के लिए जेविंडो का उपयोग करने की योजना बना रहा हूं। – dustins

उत्तर

1

मान लें कि आपके पास विश्वसनीय कोड है, तो आप पॉइंटर का स्थान प्राप्त करने के लिए MouseInfo.getPointerInfo() का उपयोग कर सकते हैं। इस जानकारी को मतदान किया जा सकता है ताकि आप काम कर सकें कि खिड़की कहाँ होनी चाहिए। आप बस मतदान करने में सक्षम हो सकते हैं जहां खिड़की वैसे भी है।

+0

मुझे यकीन नहीं है कि यह कैसे सहायक होगा। फे कर्सर की स्थिति यह जानने में मदद नहीं करती है कि मुख्य जेएफआरएम कब स्थानांतरित किया जा रहा है? मुझे उम्मीद थी कि यह जानना संभव है कि जब टाइटलबार पर माउसडाउन निकाल दिया जाता है और फिर jwindow pos को अपडेट किया जाता है। उसके बाद प्रत्येक माउस के लिए खींचा। – dustins

+2

आप यह पता लगा सकते हैं कि खिड़की कब चलती है जब पॉइंटर चल रहा है, और तब वहां से काम करना चाहिए जहां से यह होना चाहिए। यद्यपि आप गैर-पीएल और एफ सजाए गए फ्रेम का उपयोग कर रहे हैं, तो आप वास्तव में माउस डाउन इवेंट नहीं प्राप्त करेंगे। –

1

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

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