मुझे एक दिनचर्या मिली है जो स्क्रॉल फलक के अंदर एक बेहद बड़े ग्राफ को चित्रित करती है। स्क्रोलपैन में जोड़ने से पहले पेंट करना बहुत बड़ा है - मेनोरी आवश्यकताएं कई गिग होंगी।जावा स्विंग में अजीब पेंट कॉल में मेरे जेएसक्रॉलपेन का परिणाम क्यों है?
ग्राफ के आकार के कारण मैं स्क्रॉलपैन के बच्चे की पेंट विधि के भीतर चार्ट को प्रस्तुत कर रहा हूं। जो अच्छी तरह से काम करता है, हालांकि मैं देख रहा हूं कि जब भी एक स्क्रॉलबार स्थानांतरित हो जाता है तो मेरे पेंट दिनचर्या को दो बार बुलाया जाता है - एक बार क्लिपिंग रेक्ट के साथ अनदेखा क्षेत्र के बराबर होता है, और दूसरी बार क्लिपपिंग रेक्ट व्यूपोर्ट के आयामों के बराबर होता है ।
उदाहरण के लिए अगर मेरे व्यूपोर्ट 245x195 & मैं 3 पिक्सल द्वारा नीचे स्क्रॉल मेरी पेंट दिनचर्या g.getClipBounds()
सेट के साथ कहा जाता हो जाता है इस प्रकार है:
java.awt.Rectangle[x=0,y=195,width=245,height=3]
java.awt.Rectangle[x=0,y=3,width=245,height=195]
... क्योंकि मैं रंग दिनचर्या के भीतर प्रस्तुत करना इस झिलमिलाहट खड़ी कर रहा है (मैं जितना तेज़ कर सकता हूं, उतना तेज़ कर सकता हूं, लेकिन मुझे लगता है कि देरी का थोड़ा सा हिस्सा है)। प्रश्न:
किसी को भी 2 रंग कॉल को रोकने के लिए कैसे पता है? यह सादा-जेन जेएसक्रॉलपेन सामान है जो मैं यहां कर रहा हूं - मेरे पास एक घटक है, मैं इसे स्क्रॉलपैन में जोड़ता हूं, मैं स्क्रॉलपेन को मूल घटक में जोड़ता हूं। आप पहली छवि स्क्रॉलिंग डेमो @the swing tutorial में भी इस व्यवहार को देख सकते हैं।
यदि # 1 का उत्तर 'नोप' है: क्या कोई इस से निपटने के लिए एक अच्छा तरीका सोच सकता है? क्या मुझे किसी प्रकार के छवि बफर को पेंट करना चाहिए, हालिया पेंट कॉल को ट्रैक करें & जहां संभव हो वहां छवि कॉपी करें? मैं कल्पना नहीं कर सकता कि यह पुनः प्रतिपादन की तुलना में बहुत तेज़ है, लेकिन किसी अंतर्दृष्टि की सराहना की गई :-)
मेरी एकमात्र समस्या यह है कि मैं पूरी छवि को बफर नहीं कर सकता - यह बहुत बड़ा है। जिसका अर्थ है कि मुझे बफर किए गए अनुभागों को खींचे जाने की आवश्यकता है, जब मुझे पेंट करने के लिए बुलाया जाता है तो कवरेज की जांच करें() और आवश्यकतानुसार उन्हें एक साथ सीवन करें। मुझे लगता है कि मैं इसे एक शॉट दूंगा, लेकिन मैं यह देखने के लिए रोकूंगा कि किसी और के पास कोई विचार है –
ठीक है, डबल बफरिंग अभी भी खेल में आ सकती है। बस एक ऑफ-स्क्रीन सतह (दृश्य भाग का आकार) पर आपको जो चाहिए उसे प्रस्तुत करें। और फिर जब आप पूरा कर लेंगे, तो पूरी छवि को अपनी डिस्प्ले सतह पर खींचें, एक में गिरावट आई है। – colithium
असल में, यह काम करता है।धन्यवाद :-) स्क्रॉलिंग एक धीमी गति से धीमी है, लेकिन झिलमिलाहट चली गई है। क्षमा करें मुझे इसे पहले नहीं मिला - मेरी मूर्खता आपके दृढ़ता के लिए कोई मेल नहीं थी ;-) –