2013-02-27 23 views
13

मैंने इस पर ट्यूटोरियल की कोशिश की है लेकिन मुझे अभी भी यह समझ में नहीं आता है। असल में मेरा सवाल यह है कि कौन सी विधि बेहतर है और क्यों? क्या मुझे paint या paintComponent का उपयोग करना चाहिए?पेंट() और पेंटकंपोनेंट() के बीच अंतर?

कृपया उत्तर को सरल रखने का प्रयास करें, धन्यवाद।

+6

सी [* AWT में चित्रकारी और स्विंग *] (http://www.oracle.com/ technetwork/जावा/चित्रकला-140037.html)। – trashgod

उत्तर

13

paint() विधि

इस विधि वास्तव में प्रतिनिधियों तीन संरक्षित तरीकों को चित्रकला के काम के प्रलेखन से हवाला देते हुए: paintComponent, paintBorder, और paintChildren। ... एक सबक्लास जो यूआई (देखो और महसूस) को विशेषज्ञ बनाना चाहता है, प्रतिनिधि की पेंट विधि को सिर्फ पेंटकंपेंट को ओवरराइड करना चाहिए।

ऐसा लगता है कि paint() विधि वास्तव में सीमा और बच्चों सहित घटक खींचती है। यदि आप केवल सीमा और बच्चों को छोड़कर घटक की उपस्थिति को कस्टमाइज़ करना चाहते हैं, तो आप paintComponent() का उपयोग करें।

http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html#paint(java.awt.Graphics)

+0

सही होने पर, जावाडॉक्स के संस्करण को अपडेट करने के लिए और अधिक लिंक करना समझदारी होगी, केवल एपीआई – MadProgrammer

+0

में डेवलपर संभावित परिवर्तनों को हाइलाइट करने के लिए मैंने लिंक संपादित किया। इस – christianhs

+0

के बारे में मुझे याद दिलाने के लिए धन्यवाद @ मैडप्रोग्रामर अभी भी उत्तर के लिए +1 प्राप्त किया गया है;) – MadProgrammer

7

सामान्य शब्दों में, जब स्विंग में चित्रकला, यह paintComponent ओवरराइड करने के लिए सिफारिश की है।

ऐसे कई कारण हैं, एक paintComponent नीचे परत पर चित्रित किया गया है, जिसका अर्थ है कि आप पेंट प्रक्रिया के दौरान प्रदान किए गए किसी भी घटक को गलती से मिटा नहीं पाएंगे - यह यहां पोस्ट करने वाले लोगों के लिए बहुत कुछ होता है।

paint को ओवरराइड करने की आवश्यकता हो सकती है, लेकिन मैं हमेशा आपको paintComponent के साथ काम करने की कोशिश करने के लिए प्रोत्साहित करता हूं।

चेक बाहर

+2

मुझे लगता है कि यदि आप पेंट() या पेंट कॉम्पोनेंट() को डबल बफरिंग पॉइंट से ओवरराइड करते हैं तो मुझे यह महत्वपूर्ण नहीं लगता है। "एडब्ल्यूटी और स्विंग में चित्रकारी" लेख से डबल बफरिंग अनुभाग देखें। अब यदि आप एक फ्रेम स्तर पर पेंट() को ओवरराइड करते हैं (जिसे मैं कभी अनुशंसा नहीं करता) और super.paint() का आह्वान करने के बारे में भूल जाता हूं तो आप कुछ परेशानी में पड़ सकते हैं। – camickr

+1

@camickr आह हाँ, आप सही हैं, यह शीर्ष स्तर के कंटेनरों को ओवरराइड करने का तर्क नहीं है: पी – MadProgrammer

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