2010-12-09 9 views
13

संभव डुप्लिकेट:
Java Swing revalidate() vs repaint()जावा घुमाओ: फिर से रंगना() बनाम अमान्य

हाय सब

मैं अपने कार्यक्रम के साथ लड़ रहा हूँ यह सही समय पर ताज़ा करने के लिए ।

और सफलता का एक बहुत lol नहीं होने

मेरे पास 2 सवाल

Q1: जो मैं जब मेरे इंटरफेस बदल गया है का उपयोग करना चाहिए: फिर से रंगना या रद्द करना?

प्रश्न 2: उन्हें कब बुलाया जाना चाहिए? मुझे पता है कि यह बेवकूफ लगता है लेकिन मुझे वास्तव में स्विंगवर्कर और अन्य थ्रेडेड ऑपरेशंस की वजह से समस्याएं आ रही हैं।

+0

मैं नहीं कहूंगा कि "अमान्य" और "पुनर्मूल्यांकन" एक ही बात है। –

उत्तर

25

Q1: फिर से रंगना या रद्द: जो मैं जब मेरे इंटरफेस बदल गया है इस्तेमाल करना चाहिए?

यदि लेआउट आकार बदलने, फ़ॉन्ट बदलने आदि के कारण अद्यतित नहीं है तो आपको अमान्य कॉल करना चाहिए। किसी घटक को अमान्य करना, घटक को अमान्य करता है और इसके ऊपर के सभी माता-पिता को निर्धारित करने की आवश्यकता के रूप में चिह्नित किया जाता है। चित्रकला से पहले, सत्यापन चरण में यदि कोई परिवर्तन नहीं मिलता है तो पेंट चरण छोड़ दिया जाता है।

यदि घटक का कुछ हिस्सा अपडेट किया जा रहा है (ग्राफ़िक के क्लिप आयताकार द्वारा परिभाषित किया गया है, जिसे "क्षतिग्रस्त" क्षेत्र कहा जाता है) तो आपको पुनर्विचार को कॉल करने पर विचार करना चाहिए। क्षतिग्रस्त क्षेत्रों का कारण हो सकता है कि किसी अन्य घटक या एप्लिकेशन के कारण आपके घटक के एक हिस्से के ओवरलैपिंग से हो सकता है। मेरे अनुभव के अनुसार पुनर्विक्रेता() अधिक प्रभावी है यदि आप इसे आंतरिक संलग्न घटक पर कॉल करते हैं (यानी public void repaint(int x, int y, int width, int height) का उपयोग सार्वजनिक void repaint() का उपयोग करने के बजाय)।

प्रश्न 2: उन्हें कब बुलाया जाना चाहिए?

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

जब नियंत्रण में एक से अधिक क्षेत्र को पुनर्निर्मित करने की आवश्यकता होती है, तो अमान्यता पूरी खिड़की को एक ही पास में पुनर्निर्मित करने का कारण बनती है, अनावश्यक पश्चाताप के कारण झिलमिलाहट से परहेज करती है। नियंत्रण वास्तव में पुनर्निर्मित होने से पहले कई बार अमान्य को कॉल करने के लिए कोई प्रदर्शन दंड नहीं है।

Repaint() : यदि घटक हल्का घटक है, तो यह विधि जितनी जल्दी हो सके इस घटक की पेंट विधि को कॉल का कारण बनती है। अन्यथा, यह विधि जितनी जल्दी हो सके इस घटक की अद्यतन विधि को कॉल का कारण बनती है।

भी Update विधि देखें।

नोट: स्विंग प्रक्रियाओं AWT से एक से थोड़ा अलग तरीके से अनुरोध "फिर से रंगना है", हालांकि आवेदन प्रोग्रामर के लिए अंतिम परिणाम अनिवार्य रूप से एक ही है - रंग() शुरू हो जाती है।

कैसे चित्रकला AWT में किया और स्विंग है पर एक उत्कृष्ट लिंक के लिए नीचे दिए गए लिंक को देखें:

http://www.oracle.com/technetwork/java/painting-140037.html

आशा इस में मदद मिलेगी।

+0

JComponents से निपटने पर, 'अवैध()' के बजाय 'revalidate()' का उपयोग करें, यह सुनिश्चित करने के लिए कि संपूर्ण घटक पदानुक्रम अमान्य हो जहां उचित हो (देखें http://stackoverflow.com/questions/859493/remove-swing-component उपयोग करना सत्यापित करें या पुनः सत्यापित) –

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