2013-01-15 14 views
5

मैं समझने की कोशिश कर रहा हूं कि पुनरीक्षण/पुनर्निर्मित/पैक का उपयोग कब करें।स्विंग रीफ्रेश चक्र

आश्चर्य की बात है कि मुझे बहुत अधिक विस्तृत जानकारी नहीं मिली है (लिंक करने के लिए स्वतंत्र महसूस करें)।

अब तक मुझे समझ में आया है कि यह RepaintManager की सभी ज़िम्मेदारी है।

  • रंग/फिर से रंगना क्या के रूप में गंदा देखता है का उल्लेख/साफ
  • पैक/मान्य/क्या वैध

This article on Oracle बताते हैं कि एक रीपेंट बुला घटना डिस्पैचर थ्रेड पर एक नौकरी enqueues है का उल्लेख दोबारा सत्यापित जो बदले में घटक को तुरंत कॉल करेगा() घटक पर (यह घटक को दोबारा हटा देता है)।

This trail इंगित करता है कि लेआउटमैनेजर से वैध होना या नहीं होना चाहिए। और यह सामग्री के बजाए घटक के आकार के बारे में सब कुछ है।

  1. क्या यह सच है कि जब आप अपने घटक को स्थानांतरित/आकार बदलते हैं और जब आप इसकी सामग्री बदलते हैं तो पुनर्निर्मित करना चाहिए?
  2. क्या पैक() विधि वास्तव में एक बहिष्कृत चीज है जिसे आपको कभी कॉल नहीं करना चाहिए?
  3. क्या उपरोक्त में से कोई भी दावा गलत है?

उत्तर

6

यहां कुछ बुनियादी मामले हैं जहां आपको उन तरीकों का आह्वान करने की आवश्यकता है (मैं मूलभूत बातें शामिल करता हूं लेकिन मुझे कुछ अन्य मामलों को याद किया होगा जहां उन विधियों को कॉल करना आवश्यक होगा)।

  1. आप कंटेनर पर revalidate() बुलाना चाहिए जब आप या तो: एक या अधिक घटक ने कहा, एक या अधिक घटकों को हटा दिया, एक या अधिक निहित घटकों (कमी या XXXSize() की कमी बदल गया है, हालांकि बाद है अनुशंसित नहीं), कंटेनर के LayoutManager को बदल दिया।
  2. जब भी आप उस घटक (और इसके वंशज) को पुनर्निर्मित करना चाहते हैं तो आपको repaint() पर कॉल करना चाहिए। अंत में, यह फोन करेगा paintComponent() (बुनियादी विजेट्स के लिए इस XXXUI.paint प्रतिनिधि होगा()), paintBorder() और paintChildren() (कम से कम स्विंग में)
  3. pack() वास्तव में अपनी पसंद के आकार के लिए एक खिड़की के आकार निर्धारित करता है। विंडो को दृश्यमान बनाने से पहले आपको आमतौर पर यह अधिकार कॉल करना चाहिए। आप इसे बाद में फोन कर सकते हैं, लेकिन यह एक अजीब उपयोगकर्ता अनुभव दे देंगे

revalidate() और repaint() का उपयोग करने का मुख्य लाभ यह है कि वे खुद संगठित कर सकते हैं (मैं कई अनुप्रयोगों है कि उनके खिड़कियों का आकार बदलने के एक बार दिखाया गया है पता नहीं है)। इसका मतलब यह है कि यदि आप कई बार repaint() पर कॉल करते हैं, तो चित्र केवल एक बार किया जाएगा।

+0

क्या आप इसका अर्थ बताते हुए पेंट को परिभाषित कर सकते हैं? मुझे संदेह करना शुरू हो गया कि मैं पूरी तरह से समझता हूं कि इसका क्या अर्थ है। – kotoko

+1

@ kotoko मुझे यकीन नहीं है कि मुझे आपकी किस तरह का उत्तर मिल रहा है (आपकी टिप्पणी wrt)। जब आप पेंट करते हैं ('paintComponent() 'विधि का कार्यान्वयन), इसका मतलब है कि आप रेखाएं, मंडल (भरे या नहीं), आयताकार (भरे या नहीं), छवियों, टेक्स्ट इत्यादि ... (सभी ऑपरेशन जो आप कर सकते हैं वास्तव में 'ग्राफिक्स/ग्राफिक्स 2 डी' पर आक्रमण)। –

+0

मैं यह समझने की कोशिश कर रहा था कि किन तरीकों से ट्रिगर हुआ।अब मुझे यह मिलता है (अंगूठे का नियम): लेआउट/घटक से संबंधित ऑपरेशन वैध होने पर प्रभावित होता है (आपका 1.); ग्राफिक्स/ग्राफिक्स 2 डी ऑपरेशन गंदे होने पर प्रभावित होते हैं। – kotoko