2012-02-19 14 views
24

JFrame'in olduğu bir program yazıyorum ve tüm bileşenleri buradan kaldırmak istiyorum, daha sonra tek bir bileşen ekleyip çerçeveyi yeniden boyayın. Ne var bugüne kadar (startpanel Jpanel uygulayan JFrame uygulayan bir nesne, içinde adlandırılır) aşağıda kodu gibi bir şeydir: Ben kodu çalıştırdığınızda boş bir pencere (değil startpanel) gösterir, ancakJava'da JFrame'in tüm bileşenleri nasıl kaldırılır?

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

ve pencereyi simge durumuna küçültme/yeniden boyutlandırdığımda, pencere siyah olur. removeAll()'u terk edersem ve JFrame'de zaten bir öğe yoksa, startPanel'i iyi gösterir. Her şeyi gerçekten nasıl kaldıracağınıza dair herhangi bir fikir, ve sonra yeni paneli görünmeye devam edecek misiniz?

+1

Bir kelimeyi güncellemek için thoes bileşenleri ekleyerek sonra doğrulamak sonra başka bir şey eklemek olduğunu varsayarak: [CardLayout] (http: // docs.oracle.com/javase/tutorial/uiswing/layout/card.html) –

+0

@HovercraftFullOfEels işe yarayabilir, ancak el ile yapmanın başka bir yolu var mı? ve neden benim düşünmem gereken şekilde removeAll() çalışmıyor? Kodun diğer bölümlerinde farklı bileşenlerin bazı kombinasyonlarının olması gerekir (bir seferde sadece bir tane değil), bu yüzden bir CardLayout istemiyorum? – scaevity

cevap

44

Sen

getContentPane().removeAll(); 

removeAll()

gerekli contentPane iletmek için add() veya remove() olarak geçersiz edilmemiştir çağırmalıdır.

+0

çok teşekkürler, bu işe yarıyor! – scaevity

+0

@scae: Kavka, diğerlerinden daha keskin gözlere sahip gibi görünüyor. İyi yakalama ve 1+. –

+0

Özlü ve yardımsever cevabınız için teşekkür ederiz. 'removeAll()' gerçekten anlattığınız şekilde 'add()' ve 'remove() gibi geçersiz kılınmış olmalıdır. Java'nın garip gariplerinden sadece bir tanesi ... – Variadicism

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

'repaint() 'kullanmadım ve düzgün çalışıyor. –

3

hedef net aramak gerekir çerçeve o

getContentPane().removeAll(); 
add(new component); 
validate();