2012-05-28 7 views
10

मैंने इसे इस साइट पर कई बार लिखा है (जैसे here, और here) कि JComponent पर घटक जोड़ने से पहले आपको setVisible(true) पर कॉल नहीं करना चाहिए, लेकिन मैंने स्पष्टीकरण और जानकारी नहीं देखी है इंटरनेट दुर्लभ लगता है।घटक जोड़ने से पहले मुझे सेट विज़िबल (सत्य) क्यों नहीं कॉल करना चाहिए?

यह मामला क्यों है, और यदि आप नियम तोड़ते हैं तो क्या होता है?

+0

क्या आप एक स्रोत डाल सकते हैं जहां उन्होंने कहा था? –

+1

एक दृश्य दृष्टिकोण से, एक घटक को देखते हुए जिसमें अभी भी नई चीजें शामिल हैं, वह मैला लगती है (जब तक, निश्चित रूप से, यह उपयोगकर्ता द्वारा व्यवहार की अपेक्षा नहीं की जाती है)। – Jeffrey

उत्तर

19

यदि आप इसे पहले कॉल करते हैं तो आप कुछ भी तोड़ नहीं रहे हैं, लेकिन यदि आपको कुछ भी जोड़ा गया है तो आपको शायद इसे फिर से कॉल करने की आवश्यकता होगी। अन्यथा स्विंग जोड़े गए घटकों को प्रस्तुत नहीं करेगा। JFrame के घटक को प्रस्तुत करने के लिए आपको JVM को JFrame की paint(...) विधि कॉल करने की आवश्यकता है, और setVisible(true) यह करने के लिए JVM से पूछेगा। यदि आपने सेटविज़िबल (सत्य) को कॉल करने के बाद कभी भी घटक जोड़ दिए हैं और घटकों को नहीं देखते हैं, तो आप पाएंगे कि यदि आप जेएफआरएएम को दोबारा आकार देते हैं तो वे "भौतिक" करेंगे। इसका कारण यह है कि इसे फिर से आकार देने से ऑपरेटिंग सिस्टम जीयूआई को पुन: पेश करने के लिए स्विंग से पूछता है, और इसके परिणामस्वरूप paint(...) कहा जा सकता है।

ध्यान दें कि यदि आप अपना जीयूआई बनाने के बाद कोई घटक जोड़ते हैं, तो आप revalidate() पर कॉल कर सकते हैं और अक्सर repaint() अपने कंटेनर पर सही तरीके से रखे गए नए घटक को प्राप्त करने के लिए कॉल कर सकते हैं और फिर प्रस्तुत किया जा सकता है। repaint()निश्चित रूप से आवश्यक हो सकता है यदि घटकों में परिवर्तन में एक विलोपन शामिल है, या एक घटक खींचा जा रहा है जहां पहले एक अन्य घटक को देखा गया था।

किताब सुझाव है कि मैं अत्यधिक की सिफारिश: Filthy Rich Clients लड़का और हासे खरीदते हैं। बस इसे खरीद लो! आपको खरीद पर अफसोस नहीं होगा।

7

@ होवरक्राफ्ट के सहायक विश्लेषण पर बढ़ते हुए, आपको शीर्ष-स्तर के कंटेनर को फिर से pack() भी करना पड़ सकता है। यह example, जो के बाद JList पर तत्व जोड़ता है, व्यापार-बंदों को चित्रित कर सकता है।

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