2012-02-19 19 views
24

मैं एक प्रोग्राम लिख रहा हूं जहां मेरे पास एक जेएफआरएम है और मैं इसके सभी घटकों को हटाना चाहता हूं, फिर इसमें केवल एक घटक जोड़ें और फ्रेम को दोबारा डालें। क्या मैं अब तक है नीचे कोड (एक वस्तु है कि JFrame लागू करता है, जहां StartPanel लागू करता JPanel में कहा जाता है) की तरह कुछ है:जावा में जेएफआरएएम से सभी घटकों को कैसे हटाया जाए?

removeAll();  
startPanel = new StartPanel(); 
startPanel.setVisible(true); 
add(startPanel); 
revalidate(); 
repaint(); 

हालांकि, यह एक खाली खिड़की (नहीं startPanel) से पता चलता है जब मैं कोड को चलाने और जब मैं खिड़की को छोटा/आकार बदलता हूं, तो खिड़की काला हो जाती है। अगर मैं removeAll() छोड़ देता हूं और जेएफआरएम पर पहले से मौजूद तत्व नहीं हैं तो यह स्टार्टपैनल को ठीक दिखाता है। वास्तव में सबकुछ हटाने के तरीके पर कोई विचार, और फिर नया पैनल अभी भी दिखाने के लिए मिलता है?

+1

एक शब्द thoes घटक जोड़कर है: [CardLayout] (http: // docs.oracle.com/javase/tutorial/uiswing/layout/card.html) –

+0

@ होवरक्राफ्टफुलऑफेल जो काम कर सकता है, लेकिन क्या इसे मैन्युअल रूप से करने का कोई और तरीका है? और क्यों नहीं हटाया जाएगा() काम कर रहा है जैसा कि मुझे लगता है कि यह चाहिए? यदि कोड के अन्य हिस्सों में मुझे अलग-अलग घटकों के कुछ संयोजन होने की आवश्यकता है (केवल एक समय में दिखाया नहीं जा रहा है), तो मुझे कार्डलाउट नहीं चाहिए? – scaevity

उत्तर

44

आप कॉल करना होगा

getContentPane().removeAll(); 

removeAll()contentPane आवश्यक के रूप में करने के लिए अग्रेषित करने के लिए add() या remove() के रूप में अधिरोहित नहीं किया गया है।

+0

बहुत बहुत धन्यवाद, यह काम करता प्रतीत होता है! – scaevity

+0

@scae: कवका हमारे बाकी हिस्सों की तुलना में तेज आंखें प्रतीत होता है। अच्छी पकड़ और 1+। –

+0

आपके संक्षिप्त और सहायक उत्तर के लिए धन्यवाद। 'removeAll()' वास्तव में आपके द्वारा वर्णित तरीके से 'जोड़ें() 'और' निकालें() 'जैसे ओवरराइड किया जाना चाहिए था। जावा के अजीब quirks में से एक और ... – Variadicism

5
getContentPane().removeAll(); 
getContentPane().repaint(); 
+0

मैंने 'repaint()' का उपयोग नहीं किया और यह सही ढंग से चलता है। –

3

संभालने अपने लक्ष्य के बाद कुछ और जोड़ने के लिए आप स्पष्ट फ्रेम आप बुलाना चाहिए के बाद मान्य इसे अद्यतन करने

getContentPane().removeAll(); 
add(new component); 
validate(); 
संबंधित मुद्दे