我的程序最後從JTextPane
(A)中取出一個StyledDocument
對象,並將其傳遞給另一個JTextPane
(B)。當我完成通過後,我希望JTextPane
(A)清除文本和任何格式,並且基本上是該對象的新構建,其默認JTextPane
設置。要做到這一點,我目前做這樣的事情:每次我想清除一個並重新創建一個新的DefaultStyledDocument時,是不是很糟糕的形式?
//make things
JTextPane inputField = new JTextPane();
JTextPane outputField = new JTextPane();
//move inputField text (with formatting) from inputField to outputField
StyledDocument doc = inputField.getStyledDocument();
EditorKit kit = inputField.getEditorKit();
outputField.setStyledDocument(doc);
outputField.setEditorKit(kit);
outputField.revalidate();
//reset the inputField so that it's fresh and ready for new input
inputField.setStyledDocument(new DefaultStyledDocument());
inputField.setEditorKit(new StyledEditorKit());
我在這個例子中知道我沒有做任何移動文字或格式(只是一個空白文檔對象),但這些都是我在執行操作,並且很好奇,如果「新建」工具包和文檔是將我的JTextPane
重置爲默認設置的懶惰方式。提前致謝!
重新使用現有對象而不是創建新對象會更好。 – 2013-06-20 17:08:23
@RafaelOsipov:你爲什麼這麼說?我看到盧卡斯的計劃沒有錯。這段代碼似乎並不在他的項目的任何時間或內存關鍵部分,並且當需要內存時,舊文檔可能會被GC'd。 –
我知道在更新之前重用會更好,但這種情況並非如此,我可以簡單地重用。如果我這樣做了,我的JTextPane A和B都會引用同一個文檔對象。對其中一個JTextPane文檔的更改將反映在其他JTextPane的文檔中,因爲它們是相同的文檔。我很想知道是否可以避免這種確保併發性的方式,這是一種糟糕的形式。謝謝你的時間。 –