2011-03-23 47 views
1

我有一個JFrame並創建了一個對象來打開它並在我的項目中關閉它。這意味着我只爲該JFrame使用一個對象。如何在處理()後在swing中重置字段

當我打電話給dispose()方法來關閉那個幀時,我希望它在下一次setVisible(true)調用中被重置爲新的JFrame。但是我仍然可以看到從前面的setVisible(true)電話充值的字段,即使在我關閉它後調用dispose()

如何從該幀刷新存儲的值,以便在撥打setVisible(true)時獲得新表格?

回答

1

嘗試添加WindowListener

frame.addWindowListener(new WindowAdapter() { 
    public void windowClosed(WindowEvent e) { 
     MyJFrame frame = (MyJFrame) e.getSource(); 
     frame.someTextField.setText(""); 
     ... 
    } 
}); 

這不是測試,但應儘量接近讓你開始。

+0

謝謝..其實我正在尋找類似於dispose()的任何方法,但如果沒有其他方式,然後我必須嘗試這些方法。目前我正在使用剛剛告訴我的方法。 – Deepak 2011-03-23 01:21:40

+1

沒有任何內置方法會自動執行它,但是可以在調用父類的實現後重寫'dispose'或'setVisible'並清除那裏的字段如果你寧願這樣做。 – 2011-03-23 01:54:06

1

的Dispose()不重置你的組件,但也可以手動創建新的JFrame:

previous.setVisible(false); 
previous = new JFrame(); 
previous.setVisible(true); 
+0

但我可能需要像這樣每天打開1000幀這樣的幀。如果我繼續創建像這樣的新幀會影響性能嗎? – Deepak 2011-03-23 00:33:46

+1

表現 - 我不這麼認爲,但你可以測試它。內存 - 如果您沒有任何對舊畫面的引用,GC將正確刪除它。我的第二個建議是手動清除組件:例如:setText(「」);等等。 – smas 2011-03-23 00:42:27

+0

儘管技術上屬實,但它仍然可能會降低性能,因爲不能保證GC何時運行。 http://stackoverflow.com/questions/6309407/remove-top-level-container-on-runtime – 2011-11-10 18:00:33