Soru Java'daki JFrame'deki tüm bileşenleri nasıl kaldırabilirsiniz?


Bir JFrame'in olduğu bir program yazıyorum ve tüm bileşenleri buradan kaldırmak istiyorum, sonra ona sadece bir bileşen ekleyip çerçeveyi yeniden boyamak istiyorum. Şimdiye kadar sahip olduğumuz şey, aşağıdaki kod gibi bir şeydir (StartPanel'in JPanel'i uyguladığı JFrame'i uygulayan bir nesne olarak adlandırılır):

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

Ancak, kodu çalıştırdığımda boş bir pencere (startPanel değil) ve pencereyi simge durumuna küçültme / yeniden boyutlandırdığımda, pencere siyah olur. Eğer dışarı çıkarsam removeAll() ve JFrame'de zaten var olan elementler yok, sadece startPanel'i gösteriyor. Her şeyi gerçekten nasıl kaldıracağınıza dair herhangi bir fikir, ve sonra yeni paneli görünmeye devam edecek misiniz?


25
2018-02-19 05:46


Menşei


Bir kelime: CardLayout - Hovercraft Full Of Eels
@HovercraftFullOfEels işe yarayabilir, ancak bunu elle 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


Cevaplar:


Aramalısın

 private JFrame frame = new JFrame();
 ...
 ...
 frame.getContentPane().removeAll();
 frame.repaint();

removeAll() olarak geçersiz kılındı add() veya remove() iletmek contentPane gerekli olarak.


45
2018-02-19 06:42



Çok teşekkürler, bu işe yarıyor! - scaevity
@scae: Kavka bizden daha keskin gözlere sahip gibi görünüyor. İyi yakalama ve 1+. - Hovercraft Full Of Eels
Özlü ve yardımsever cevabınız için teşekkür ederiz. removeAll() gerçekten gibi geçersiz kılınmış olmalı add() ve remove() tarif ettiğin gibi. Java'nın garip gariplerinden sadece bir tanesi ... - Variadicism


getContentPane().removeAll();
getContentPane().repaint();

5
2017-12-18 10:34



kullanmadım repaint() ve doğru çalışıyor. - Halil İbrahim Oymacı


Amacınız daha sonra başka bir şey eklemek olduğunu varsayarak sonra onaylamak istediğiniz çerçeveyi temizlersiniz güncellemek için thoes bileşenleri ekleyerek

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

3
2017-08-27 15:27