我現在有一個SwingWorker發送HTTP請求,我重寫了SwingWorker的done()方法來更改JFrame中的內容。我想基本上刪除所有內容,並根據從服務器返回的值在JFrame上添加新成員面板。JFrame刪除JPanels並添加一個新的JPanel
現在,我面臨的問題是,當我在JFrame上調用以下方法時,它不會從JFrame中刪除任何內容,也不會更改它在Frame中包含的內容。
//TODO: Investigate why JFrame content pane won't repaint.
f.removeAll();
//Pass the frame f reference only into MainDisplay, it doesn't actually do anything apart from allowing a class to add a JMenuBar on the JFrame.
f.add(new MainDisplay(f));
f.getContentPane().invalidate();
f.getContentPane().validate();
f.getContentPane().repaint();
目前修復我已經是這個之下,但我寧願改變JFrame的內容而不是加載了新一輪上漲。
f.dispose();
f=new ApplicationFrame();
我已經通過,而調用重繪()重新繪製的JFrame在這裏和谷歌以前的答案和一些國家使用的validate()或無效()看着。
任何建議/幫助將不勝感激。
編輯:我想我會進行更多的調試,因爲肯定還有其他問題。
有誰如果使用刪除或知道的removeAll刪除優越,面板/面板上一幀中的實際內存?或者它只是從框架中刪除它? – unleashed
它只是從框架中刪除組件。這取決於JVM垃圾回收器「去除」內存......或者取消分配內存。 GC不保證在您的程序的整個生命週期中都會發生這種情況。另外,如果刪除的組件在程序中的其他地方被引用,那麼它們將不會被GC'd(除了在使用弱引用的特殊情況下)。 – Jason