में (घटक) जोड़ें क्या उनके बीच कोई अंतर है और क्या ऐसी कोई स्थितियां हैं जिनमें किसी के बजाय किसी का उपयोग किया जाना चाहिए?मुझे JFrame.add (घटक) और JFrame.getContentPane() का उपयोग कब करना चाहिए। जावा
उत्तर
जो मैं जवाडॉक्स से समझता हूं, जेएफआरएम.एड ने बाद वाले को फोन किया। एडब्ल्यूटी के फ्रेम और स्विंग्स जेएफआरएएम के बीच असंगतता प्राप्त करने के लिए यह एक सुविधाजनक तरीका है।
JFrame वर्ग फ्रेम के साथ थोड़ा असंगत है। अन्य सभी जेएफसी/स्विंग टॉप-स्तरीय कंटेनर की तरह, एक जेएफआरएएम में एक JRootPane होता है जो इसके केवल बच्चे के रूप में होता है। रूट फलक द्वारा प्रदान की गई सामग्री फलक को नियम के रूप में, JFrame द्वारा प्रदर्शित सभी गैर-मेनू घटक शामिल होना चाहिए। यह एडब्ल्यूटी फ्रेम मामले से अलग है। एक संयोजक जोड़ें और इसके रूपों को हटाएं, हटाएं और सेटआउट को को आवश्यकतानुसार सामग्री प्लेन पर अग्रेषित करने के लिए ओवरराइड कर दिया गया है। इसका मतलब है आप लिख सकते हैं:
`frame.add(child);`
और बच्चे contentPane में जोड़ दिया जाएगा। सामग्री फलक हमेशा गैर-शून्य होगी। पर प्रयास करने से इसे शून्य पर सेट किया जाएगा जिससे जेएफआरएम अपवाद फेंक देगा। डिफ़ॉल्ट सामग्री फलक में एक BorderLayout प्रबंधक सेट होगा। को रूटफ़ेनकॉन्टेनर को जेएफआरएएम के लेआउटमैनेजर को जोड़ने, हटाने और सेट करने के विवरण के लिए देखें।
add()
addImpl()
को काम अग्रेषित करेंगे JFrame
राज्यों के JavaDoc निम्नलिखित जिसके लिए:
डिफ़ॉल्ट रूप से, बच्चों contentPane बजाय फ्रेम करने के लिए जोड़ रहे हैं।
इस प्रकार, दोनों विधियों के समान मूल व्यवहार है, इस तथ्य के अलावा कि getContentPane().add(...)
का उपयोग करना अधिक स्पष्ट है।
ध्यान दें कि आप जोड़ने के लिए डिफ़ॉल्ट व्यवहार को बदल सकते हैं (setRootPaneCheckingEnabled(false)
का उपयोग करके), लेकिन मुझे यकीन नहीं है कि आप ऐसा करना चाहते हैं।
दोनों कॉल समान हैं। जावा 5 में, वे सामग्री फलक पर कॉल अग्रेषित करने के लिए jframe.add
बदल गए।
Java 5 release notes से:।
अन्त में, सात साल के बाद, हम jFrame.add बराबर jFrame.getContentPane() में किए गए परिवर्तन को जोड़ने()।
इसके अलावा, javadocs देखें।
यदि आपका प्रश्न केवल JFrame#add(JComponent)
बनाम है। JFrame.getContentPane()#add(JComponent)
तो कोई फर्क नहीं पड़ता है, लेकिन यदि आप f.e. को बदलना चाहते हैं। बैकग्राउंड तब निर्भर करता है यदि आप JFrame#setBackground(Color)
से तरीकों को कॉल करते हैं या awt.Frame JFrame.getContentPane()#setBackground(Color)
से नेस्टेड या विरासत विधियों को कॉल करते हैं ...
सरल और स्पष्ट। यह सही जवाब होना चाहिए। – GusDeCooL